Kill ioctl(2) added with original KAME import that have never been used.
FreeBSD also stopped supporting them in 2013.

ok?

Index: sys/sockio.h
===================================================================
RCS file: /cvs/src/sys/sys/sockio.h,v
retrieving revision 1.70
diff -u -p -r1.70 sockio.h
--- sys/sockio.h        27 Jun 2017 22:18:24 -0000      1.70
+++ sys/sockio.h        18 Oct 2017 11:28:25 -0000
@@ -64,12 +64,6 @@
 #define        SIOCGIFDATA     _IOWR('i', 27, struct ifreq)    /* get if_data 
*/
 #define        SIOCSIFLLADDR   _IOW('i', 31, struct ifreq)     /* set link 
level addr */
 
-/* KAME IPv6 */
-/* SIOCAIFALIAS? */
-#define SIOCALIFADDR    _IOW('i', 28, struct if_laddrreq) /* add IF addr */
-#define SIOCGLIFADDR   _IOWR('i', 29, struct if_laddrreq) /* get IF addr */
-#define SIOCDLIFADDR    _IOW('i', 30, struct if_laddrreq) /* delete IF addr */
-
 #define        SIOCADDMULTI     _IOW('i', 49, struct ifreq)    /* add m'cast 
addr */
 #define        SIOCDELMULTI     _IOW('i', 50, struct ifreq)    /* del m'cast 
addr */
 #define        SIOCGETVIFCNT   _IOWR('u', 51, struct sioc_vif_req)/* vif pkt 
cnt */
Index: netinet/in.c
===================================================================
RCS file: /cvs/src/sys/netinet/in.c,v
retrieving revision 1.140
diff -u -p -r1.140 in.c
--- netinet/in.c        11 Aug 2017 19:53:02 -0000      1.140
+++ netinet/in.c        18 Oct 2017 11:29:04 -0000
@@ -83,7 +83,6 @@
 
 
 void in_socktrim(struct sockaddr_in *);
-int in_lifaddr_ioctl(u_long, caddr_t, struct ifnet *, int);
 
 void in_purgeaddr(struct ifaddr *);
 int in_addhost(struct in_ifaddr *, struct sockaddr_in *);
@@ -182,9 +181,6 @@ in_nam2sin(const struct mbuf *nam, struc
        return 0;
 }
 
-/*
- * Generic internet control operations (ioctl's).
- */
 int
 in_control(struct socket *so, u_long cmd, caddr_t data, struct ifnet *ifp)
 {
@@ -194,25 +190,13 @@ in_control(struct socket *so, u_long cmd
        if ((so->so_state & SS_PRIV) != 0)
                privileged++;
 
-       switch (cmd) {
 #ifdef MROUTING
+       switch (cmd) {
        case SIOCGETVIFCNT:
        case SIOCGETSGCNT:
                return (mrt_ioctl(so, cmd, data));
-#endif /* MROUTING */
-       case SIOCALIFADDR:
-       case SIOCDLIFADDR:
-               if (!privileged)
-                       return (EPERM);
-               /* FALLTHROUGH */
-       case SIOCGLIFADDR:
-               if (ifp == NULL)
-                       return (EINVAL);
-               return in_lifaddr_ioctl(cmd, data, ifp, privileged);
-       default:
-               if (ifp == NULL)
-                       return (EOPNOTSUPP);
        }
+#endif /* MROUTING */
 
        return (in_ioctl(cmd, data, ifp, privileged));
 }
@@ -228,6 +212,9 @@ in_ioctl(u_long cmd, caddr_t data, struc
        int error;
        int newifaddr;
 
+       if (ifp == NULL)
+               return (EOPNOTSUPP);
+
        NET_ASSERT_LOCKED();
 
        TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list) {
@@ -413,187 +400,6 @@ in_ioctl(u_long cmd, caddr_t data, struc
        }
        return (0);
 }
-
-/*
- * SIOC[GAD]LIFADDR.
- *     SIOCGLIFADDR: get first address. (???)
- *     SIOCGLIFADDR with IFLR_PREFIX:
- *             get first address that matches the specified prefix.
- *     SIOCALIFADDR: add the specified address.
- *     SIOCALIFADDR with IFLR_PREFIX:
- *             EINVAL since we can't deduce hostid part of the address.
- *     SIOCDLIFADDR: delete the specified address.
- *     SIOCDLIFADDR with IFLR_PREFIX:
- *             delete the first address that matches the specified prefix.
- * return values:
- *     EINVAL on invalid parameters
- *     EADDRNOTAVAIL on prefix match failed/specified address not found
- *     other values may be returned from in_ioctl()
- */
-int
-in_lifaddr_ioctl(u_long cmd, caddr_t data, struct ifnet *ifp, int privileged)
-{
-       struct if_laddrreq *iflr = (struct if_laddrreq *)data;
-       struct ifaddr *ifa;
-       struct sockaddr *sa;
-
-       /* sanity checks */
-       if (!data || !ifp) {
-               panic("invalid argument to in_lifaddr_ioctl");
-               /*NOTRECHED*/
-       }
-
-       switch (cmd) {
-       case SIOCGLIFADDR:
-               /* address must be specified on GET with IFLR_PREFIX */
-               if ((iflr->flags & IFLR_PREFIX) == 0)
-                       break;
-               /*FALLTHROUGH*/
-       case SIOCALIFADDR:
-       case SIOCDLIFADDR:
-               /* address must be specified on ADD and DELETE */
-               sa = sstosa(&iflr->addr);
-               if (sa->sa_family != AF_INET)
-                       return EINVAL;
-               if (sa->sa_len != sizeof(struct sockaddr_in))
-                       return EINVAL;
-               /* XXX need improvement */
-               sa = sstosa(&iflr->dstaddr);
-               if (sa->sa_family
-                && sa->sa_family != AF_INET)
-                       return EINVAL;
-               if (sa->sa_len && sa->sa_len != sizeof(struct sockaddr_in))
-                       return EINVAL;
-               break;
-       default: /*shouldn't happen*/
-#if 0
-               panic("invalid cmd to in_lifaddr_ioctl");
-               /*NOTREACHED*/
-#else
-               return EOPNOTSUPP;
-#endif
-       }
-       if (sizeof(struct in_addr) * 8 < iflr->prefixlen)
-               return EINVAL;
-
-       switch (cmd) {
-       case SIOCALIFADDR:
-           {
-               struct in_aliasreq ifra;
-
-               if (iflr->flags & IFLR_PREFIX)
-                       return EINVAL;
-
-               /* copy args to in_aliasreq, perform ioctl(SIOCAIFADDR). */
-               bzero(&ifra, sizeof(ifra));
-               memcpy(ifra.ifra_name, iflr->iflr_name,
-                   sizeof(ifra.ifra_name));
-
-               memcpy(&ifra.ifra_addr, &iflr->addr, iflr->addr.ss_len);
-
-               if (iflr->dstaddr.ss_family) {  /*XXX*/
-                       memcpy(&ifra.ifra_dstaddr, &iflr->dstaddr,
-                           iflr->dstaddr.ss_len);
-               }
-
-               ifra.ifra_mask.sin_family = AF_INET;
-               ifra.ifra_mask.sin_len = sizeof(struct sockaddr_in);
-               in_len2mask(&ifra.ifra_mask.sin_addr, iflr->prefixlen);
-
-               return in_ioctl(SIOCAIFADDR, (caddr_t)&ifra, ifp, privileged);
-           }
-       case SIOCGLIFADDR:
-       case SIOCDLIFADDR:
-           {
-               struct in_ifaddr *ia;
-               struct in_addr mask, candidate, match;
-               struct sockaddr_in *sin;
-               int cmp;
-
-               bzero(&mask, sizeof(mask));
-               if (iflr->flags & IFLR_PREFIX) {
-                       /* lookup a prefix rather than address. */
-                       in_len2mask(&mask, iflr->prefixlen);
-
-                       sin = (struct sockaddr_in *)&iflr->addr;
-                       match.s_addr = sin->sin_addr.s_addr;
-                       match.s_addr &= mask.s_addr;
-
-                       /* if you set extra bits, that's wrong */
-                       if (match.s_addr != sin->sin_addr.s_addr)
-                               return EINVAL;
-
-                       cmp = 1;
-               } else {
-                       if (cmd == SIOCGLIFADDR) {
-                               /* on getting an address, take the 1st match */
-                               cmp = 0;        /*XXX*/
-                       } else {
-                               /* on deleting an address, do exact match */
-                               in_len2mask(&mask, 32);
-                               sin = (struct sockaddr_in *)&iflr->addr;
-                               match.s_addr = sin->sin_addr.s_addr;
-
-                               cmp = 1;
-                       }
-               }
-
-               TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list) {
-                       if (ifa->ifa_addr->sa_family != AF_INET)
-                               continue;
-                       if (!cmp)
-                               break;
-                       candidate.s_addr = ((struct sockaddr_in 
*)&ifa->ifa_addr)->sin_addr.s_addr;
-                       candidate.s_addr &= mask.s_addr;
-                       if (candidate.s_addr == match.s_addr)
-                               break;
-               }
-               if (!ifa)
-                       return EADDRNOTAVAIL;
-               ia = ifatoia(ifa);
-
-               if (cmd == SIOCGLIFADDR) {
-                       /* fill in the if_laddrreq structure */
-                       memcpy(&iflr->addr, &ia->ia_addr, ia->ia_addr.sin_len);
-
-                       if ((ifp->if_flags & IFF_POINTOPOINT) != 0) {
-                               memcpy(&iflr->dstaddr, &ia->ia_dstaddr,
-                                   ia->ia_dstaddr.sin_len);
-                       } else
-                               bzero(&iflr->dstaddr, sizeof(iflr->dstaddr));
-
-                       iflr->prefixlen =
-                               in_mask2len(&ia->ia_sockmask.sin_addr);
-
-                       iflr->flags = 0;        /*XXX*/
-
-                       return 0;
-               } else {
-                       struct in_aliasreq ifra;
-
-                       /* fill in_aliasreq and do ioctl(SIOCDIFADDR) */
-                       bzero(&ifra, sizeof(ifra));
-                       memcpy(ifra.ifra_name, iflr->iflr_name,
-                           sizeof(ifra.ifra_name));
-
-                       memcpy(&ifra.ifra_addr, &ia->ia_addr,
-                           ia->ia_addr.sin_len);
-                       if ((ifp->if_flags & IFF_POINTOPOINT) != 0) {
-                               memcpy(&ifra.ifra_dstaddr, &ia->ia_dstaddr,
-                                   ia->ia_dstaddr.sin_len);
-                       }
-                       memcpy(&ifra.ifra_dstaddr, &ia->ia_sockmask,
-                           ia->ia_sockmask.sin_len);
-
-                       return in_ioctl(SIOCDIFADDR, (caddr_t)&ifra, ifp,
-                           privileged);
-               }
-           }
-       }
-
-       return EOPNOTSUPP;      /*just for safety*/
-}
-
 /*
  * Delete any existing route for an interface.
  */
Index: netinet6/in6.c
===================================================================
RCS file: /cvs/src/sys/netinet6/in6.c,v
retrieving revision 1.212
diff -u -p -r1.212 in6.c
--- netinet6/in6.c      16 Oct 2017 13:40:58 -0000      1.212
+++ netinet6/in6.c      18 Oct 2017 11:27:45 -0000
@@ -118,7 +118,6 @@ const struct in6_addr in6mask64 = IN6MAS
 const struct in6_addr in6mask96 = IN6MASK96;
 const struct in6_addr in6mask128 = IN6MASK128;
 
-int in6_lifaddr_ioctl(u_long, caddr_t, struct ifnet *, int);
 int in6_ioctl(u_long, caddr_t, struct ifnet *, int);
 int in6_ifinit(struct ifnet *, struct in6_ifaddr *, int);
 void in6_unlink_ifa(struct in6_ifaddr *, struct ifnet *);
@@ -196,7 +195,7 @@ in6_control(struct socket *so, u_long cm
        case SIOCGETMIFCNT_IN6:
                return (mrt6_ioctl(so, cmd, data));
        }
-#endif
+#endif /* MROUTING */
 
        return (in6_ioctl(cmd, data, ifp, privileged));
 }
@@ -226,16 +225,6 @@ in6_ioctl(u_long cmd, caddr_t data, stru
                return (nd6_ioctl(cmd, data, ifp));
        }
 
-       switch (cmd) {
-       case SIOCALIFADDR:
-       case SIOCDLIFADDR:
-               if (!privileged)
-                       return (EPERM);
-               /* FALLTHROUGH */
-       case SIOCGLIFADDR:
-               return in6_lifaddr_ioctl(cmd, data, ifp, privileged);
-       }
-
        /*
         * Find address for this interface, if it exists.
         *
@@ -931,241 +920,6 @@ in6_unlink_ifa(struct in6_ifaddr *ia6, s
        ifatrash++;
        ia6->ia_ifp = NULL;
        ifafree(&ia6->ia_ifa);
-}
-
-/*
- * SIOC[GAD]LIFADDR.
- *     SIOCGLIFADDR: get first address. (?)
- *     SIOCGLIFADDR with IFLR_PREFIX:
- *             get first address that matches the specified prefix.
- *     SIOCALIFADDR: add the specified address.
- *     SIOCALIFADDR with IFLR_PREFIX:
- *             add the specified prefix, filling hostid part from
- *             the first link-local address.  prefixlen must be <= 64.
- *     SIOCDLIFADDR: delete the specified address.
- *     SIOCDLIFADDR with IFLR_PREFIX:
- *             delete the first address that matches the specified prefix.
- * return values:
- *     EINVAL on invalid parameters
- *     EADDRNOTAVAIL on prefix match failed/specified address not found
- *     other values may be returned from in6_ioctl()
- *
- * NOTE: SIOCALIFADDR(with IFLR_PREFIX set) allows prefixlen less than 64.
- * this is to accommodate address naming scheme other than RFC2374,
- * in the future.
- * RFC2373 defines interface id to be 64bit, but it allows non-RFC2374
- * address encoding scheme. (see figure on page 8)
- */
-int
-in6_lifaddr_ioctl(u_long cmd, caddr_t data, struct ifnet *ifp, int privileged)
-{
-       struct if_laddrreq *iflr = (struct if_laddrreq *)data;
-       struct ifaddr *ifa;
-       struct sockaddr *sa;
-
-       /* sanity checks */
-       if (!data || !ifp) {
-               panic("invalid argument to in6_lifaddr_ioctl");
-               /* NOTREACHED */
-       }
-
-       switch (cmd) {
-       case SIOCGLIFADDR:
-               /* address must be specified on GET with IFLR_PREFIX */
-               if ((iflr->flags & IFLR_PREFIX) == 0)
-                       break;
-               /* FALLTHROUGH */
-       case SIOCALIFADDR:
-       case SIOCDLIFADDR:
-               /* address must be specified on ADD and DELETE */
-               sa = sstosa(&iflr->addr);
-               if (sa->sa_family != AF_INET6)
-                       return EINVAL;
-               if (sa->sa_len != sizeof(struct sockaddr_in6))
-                       return EINVAL;
-               /* XXX need improvement */
-               sa = sstosa(&iflr->dstaddr);
-               if (sa->sa_family && sa->sa_family != AF_INET6)
-                       return EINVAL;
-               if (sa->sa_len && sa->sa_len != sizeof(struct sockaddr_in6))
-                       return EINVAL;
-               break;
-       default: /* shouldn't happen */
-#if 0
-               panic("invalid cmd to in6_lifaddr_ioctl");
-               /* NOTREACHED */
-#else
-               return EOPNOTSUPP;
-#endif
-       }
-       if (sizeof(struct in6_addr) * 8 < iflr->prefixlen)
-               return EINVAL;
-
-       switch (cmd) {
-       case SIOCALIFADDR:
-           {
-               struct in6_aliasreq ifra;
-               struct in6_addr *hostid = NULL;
-               int prefixlen;
-
-               if ((iflr->flags & IFLR_PREFIX) != 0) {
-                       struct sockaddr_in6 *sin6;
-
-                       /*
-                        * hostid is to fill in the hostid part of the
-                        * address.  hostid points to the first link-local
-                        * address attached to the interface.
-                        */
-                       ifa = &in6ifa_ifpforlinklocal(ifp, 0)->ia_ifa;
-                       if (!ifa)
-                               return EADDRNOTAVAIL;
-                       hostid = IFA_IN6(ifa);
-
-                       /* prefixlen must be <= 64. */
-                       if (64 < iflr->prefixlen)
-                               return EINVAL;
-                       prefixlen = iflr->prefixlen;
-
-                       /* hostid part must be zero. */
-                       sin6 = (struct sockaddr_in6 *)&iflr->addr;
-                       if (sin6->sin6_addr.s6_addr32[2] != 0
-                        || sin6->sin6_addr.s6_addr32[3] != 0) {
-                               return EINVAL;
-                       }
-               } else
-                       prefixlen = iflr->prefixlen;
-
-               /* copy args to in6_aliasreq, perform ioctl(SIOCAIFADDR_IN6). */
-               bzero(&ifra, sizeof(ifra));
-               bcopy(iflr->iflr_name, ifra.ifra_name, sizeof(ifra.ifra_name));
-
-               bcopy(&iflr->addr, &ifra.ifra_addr, iflr->addr.ss_len);
-               if (hostid) {
-                       /* fill in hostid part */
-                       ifra.ifra_addr.sin6_addr.s6_addr32[2] =
-                           hostid->s6_addr32[2];
-                       ifra.ifra_addr.sin6_addr.s6_addr32[3] =
-                           hostid->s6_addr32[3];
-               }
-
-               if (iflr->dstaddr.ss_family) {  /*XXX*/
-                       bcopy(&iflr->dstaddr, &ifra.ifra_dstaddr,
-                           iflr->dstaddr.ss_len);
-                       if (hostid) {
-                               ifra.ifra_dstaddr.sin6_addr.s6_addr32[2] =
-                                   hostid->s6_addr32[2];
-                               ifra.ifra_dstaddr.sin6_addr.s6_addr32[3] =
-                                   hostid->s6_addr32[3];
-                       }
-               }
-
-               ifra.ifra_prefixmask.sin6_len = sizeof(struct sockaddr_in6);
-               in6_prefixlen2mask(&ifra.ifra_prefixmask.sin6_addr, prefixlen);
-
-               ifra.ifra_flags = iflr->flags & ~IFLR_PREFIX;
-               return in6_ioctl(SIOCAIFADDR_IN6, (caddr_t)&ifra, ifp,
-                   privileged);
-           }
-       case SIOCGLIFADDR:
-       case SIOCDLIFADDR:
-           {
-               struct in6_ifaddr *ia6;
-               struct in6_addr mask, candidate, match;
-               struct sockaddr_in6 *sin6;
-               int cmp;
-
-               bzero(&mask, sizeof(mask));
-               if (iflr->flags & IFLR_PREFIX) {
-                       /* lookup a prefix rather than address. */
-                       in6_prefixlen2mask(&mask, iflr->prefixlen);
-
-                       sin6 = (struct sockaddr_in6 *)&iflr->addr;
-                       bcopy(&sin6->sin6_addr, &match, sizeof(match));
-                       match.s6_addr32[0] &= mask.s6_addr32[0];
-                       match.s6_addr32[1] &= mask.s6_addr32[1];
-                       match.s6_addr32[2] &= mask.s6_addr32[2];
-                       match.s6_addr32[3] &= mask.s6_addr32[3];
-
-                       /* if you set extra bits, that's wrong */
-                       if (bcmp(&match, &sin6->sin6_addr, sizeof(match)))
-                               return EINVAL;
-
-                       cmp = 1;
-               } else {
-                       if (cmd == SIOCGLIFADDR) {
-                               /* on getting an address, take the 1st match */
-                               cmp = 0;        /* XXX */
-                       } else {
-                               /* on deleting an address, do exact match */
-                               in6_prefixlen2mask(&mask, 128);
-                               sin6 = (struct sockaddr_in6 *)&iflr->addr;
-                               bcopy(&sin6->sin6_addr, &match, sizeof(match));
-
-                               cmp = 1;
-                       }
-               }
-
-               TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list) {
-                       if (ifa->ifa_addr->sa_family != AF_INET6)
-                               continue;
-                       if (!cmp)
-                               break;
-
-                       bcopy(IFA_IN6(ifa), &candidate, sizeof(candidate));
-                       candidate.s6_addr32[0] &= mask.s6_addr32[0];
-                       candidate.s6_addr32[1] &= mask.s6_addr32[1];
-                       candidate.s6_addr32[2] &= mask.s6_addr32[2];
-                       candidate.s6_addr32[3] &= mask.s6_addr32[3];
-                       if (IN6_ARE_ADDR_EQUAL(&candidate, &match))
-                               break;
-               }
-               if (!ifa)
-                       return EADDRNOTAVAIL;
-               ia6 = ifatoia6(ifa);
-
-               if (cmd == SIOCGLIFADDR) {
-                       /* fill in the if_laddrreq structure */
-                       bcopy(&ia6->ia_addr, &iflr->addr, 
ia6->ia_addr.sin6_len);
-                       if ((ifp->if_flags & IFF_POINTOPOINT) != 0) {
-                               bcopy(&ia6->ia_dstaddr, &iflr->dstaddr,
-                                   ia6->ia_dstaddr.sin6_len);
-                       } else
-                               bzero(&iflr->dstaddr, sizeof(iflr->dstaddr));
-
-                       iflr->prefixlen =
-                           in6_mask2len(&ia6->ia_prefixmask.sin6_addr, NULL);
-
-                       iflr->flags = ia6->ia6_flags;   /*XXX*/
-
-                       return 0;
-               } else {
-                       struct in6_aliasreq ifra;
-
-                       /* fill in6_aliasreq and do ioctl(SIOCDIFADDR_IN6) */
-                       bzero(&ifra, sizeof(ifra));
-                       bcopy(iflr->iflr_name, ifra.ifra_name,
-                           sizeof(ifra.ifra_name));
-
-                       bcopy(&ia6->ia_addr, &ifra.ifra_addr,
-                           ia6->ia_addr.sin6_len);
-                       if ((ifp->if_flags & IFF_POINTOPOINT) != 0) {
-                               bcopy(&ia6->ia_dstaddr, &ifra.ifra_dstaddr,
-                                   ia6->ia_dstaddr.sin6_len);
-                       } else {
-                               bzero(&ifra.ifra_dstaddr,
-                                   sizeof(ifra.ifra_dstaddr));
-                       }
-                       bcopy(&ia6->ia_prefixmask, &ifra.ifra_dstaddr,
-                           ia6->ia_prefixmask.sin6_len);
-
-                       ifra.ifra_flags = ia6->ia6_flags;
-                       return in6_ioctl(SIOCDIFADDR_IN6, (caddr_t)&ifra, ifp,
-                           privileged);
-               }
-           }
-       }
-
-       return EOPNOTSUPP;      /* just for safety */
 }
 
 /*

Reply via email to