Router Renumbering was never supported, prefix ioctls were deprecated back in 2002, nobody uses them anymore out there. struct in6_prefix still uses a few bits from the prefix ioctl code, I've moved those bits to nd6.h. The last (pointless) use of struct in6_prefixreq was in rtadvd.
SIOCSIFADDR_IN6, SIOCSIFDSTADDR_IN6 and SIOCSIFNETMASK_IN6 were introduced as mirrors of their IPv4 counterparts but they never made sense in IPv6, where there is no such thing as "the first interface address". I propose to get rid of all that stuff (in two commits). The diff below caused no fallout in a bulk ports build (thanks ajacoutot@). ok? Index: sys/netinet6/in6.c =================================================================== RCS file: /cvs/src/sys/netinet6/in6.c,v retrieving revision 1.184 diff -u -p -r1.184 in6.c --- sys/netinet6/in6.c 28 Feb 2016 07:15:34 -0000 1.184 +++ sys/netinet6/in6.c 29 Feb 2016 12:51:57 -0000 @@ -200,19 +200,6 @@ in6_control(struct socket *so, u_long cm } switch (cmd) { - case SIOCSIFPREFIX_IN6: - case SIOCDIFPREFIX_IN6: - case SIOCAIFPREFIX_IN6: - case SIOCCIFPREFIX_IN6: - case SIOCSGIFPREFIX_IN6: - case SIOCGIFPREFIX_IN6: - log(LOG_NOTICE, - "prefix ioctls are now invalidated. " - "please use ifconfig.\n"); - return (EOPNOTSUPP); - } - - switch (cmd) { case SIOCALIFADDR: case SIOCDLIFADDR: if (!privileged) @@ -239,10 +226,7 @@ in6_control(struct socket *so, u_long cm case SIOCSIFPHYADDR_IN6: sa6 = &ifra->ifra_addr; break; - case SIOCSIFADDR_IN6: case SIOCGIFADDR_IN6: - case SIOCSIFDSTADDR_IN6: - case SIOCSIFNETMASK_IN6: case SIOCGIFDSTADDR_IN6: case SIOCGIFNETMASK_IN6: case SIOCDIFADDR_IN6: @@ -292,15 +276,6 @@ in6_control(struct socket *so, u_long cm ia6 = NULL; switch (cmd) { - case SIOCSIFADDR_IN6: - case SIOCSIFDSTADDR_IN6: - case SIOCSIFNETMASK_IN6: - /* - * Since IPv6 allows a node to assign multiple addresses - * on a single interface, SIOCSIFxxx ioctls are deprecated. - */ - return (EINVAL); - case SIOCDIFADDR_IN6: /* * for IPv4, we look for existing in_ifaddr here to allow Index: sys/netinet6/in6_var.h =================================================================== RCS file: /cvs/src/sys/netinet6/in6_var.h,v retrieving revision 1.60 diff -u -p -r1.60 in6_var.h --- sys/netinet6/in6_var.h 28 Feb 2016 07:15:34 -0000 1.60 +++ sys/netinet6/in6_var.h 29 Feb 2016 12:51:57 -0000 @@ -269,91 +269,6 @@ struct in6_aliasreq { struct in6_addrlifetime ifra_lifetime; }; -/* prefix type macro */ -#define IN6_PREFIX_ND 1 -#define IN6_PREFIX_RR 2 - -/* - * prefix related flags passed between kernel(NDP related part) and - * userland command(ifconfig) and daemon(rtadvd). - */ -struct prf_ra { - u_int onlink : 1; - u_int autonomous : 1; - u_int router : 1; - u_int reserved : 5; -}; - -struct in6_prflags { - struct prf_ra prf_ra; - u_char prf_reserved1; - u_short prf_reserved2; - /* want to put this on 4byte offset */ - struct prf_rr { - u_int decrvalid : 1; - u_int decrprefd : 1; - u_int reserved : 6; - } prf_rr; - u_char prf_reserved3; - u_short prf_reserved4; -}; - -struct in6_prefixreq { - char ipr_name[IFNAMSIZ]; - u_char ipr_origin; - u_char ipr_plen; - u_int32_t ipr_vltime; - u_int32_t ipr_pltime; - struct in6_prflags ipr_flags; - struct sockaddr_in6 ipr_prefix; -}; - -#define PR_ORIG_RA 0 -#define PR_ORIG_RR 1 -#define PR_ORIG_STATIC 2 -#define PR_ORIG_KERNEL 3 - -#define ipr_raf_onlink ipr_flags.prf_ra.onlink -#define ipr_raf_auto ipr_flags.prf_ra.autonomous - -#define ipr_statef_onlink ipr_flags.prf_state.onlink - -#define ipr_rrf_decrvalid ipr_flags.prf_rr.decrvalid -#define ipr_rrf_decrprefd ipr_flags.prf_rr.decrprefd - -struct in6_rrenumreq { - char irr_name[IFNAMSIZ]; - u_char irr_origin; - u_char irr_m_len; /* match len for matchprefix */ - u_char irr_m_minlen; /* minlen for matching prefix */ - u_char irr_m_maxlen; /* maxlen for matching prefix */ - u_char irr_u_uselen; /* uselen for adding prefix */ - u_char irr_u_keeplen; /* keeplen from matching prefix */ - struct irr_raflagmask { - u_int onlink : 1; - u_int autonomous : 1; - u_int reserved : 6; - } irr_raflagmask; - u_int32_t irr_vltime; - u_int32_t irr_pltime; - struct in6_prflags irr_flags; - struct sockaddr_in6 irr_matchprefix; - struct sockaddr_in6 irr_useprefix; -}; - -#define irr_raf_mask_onlink irr_raflagmask.onlink -#define irr_raf_mask_auto irr_raflagmask.autonomous -#define irr_raf_mask_reserved irr_raflagmask.reserved - -#define irr_raf_onlink irr_flags.prf_ra.onlink -#define irr_raf_auto irr_flags.prf_ra.autonomous - -#define irr_statef_onlink irr_flags.prf_state.onlink - -#define irr_rrf irr_flags.prf_rr -#define irr_rrf_decrvalid irr_flags.prf_rr.decrvalid -#define irr_rrf_decrprefd irr_flags.prf_rr.decrprefd - /* * Given a pointer to an in6_ifaddr (ifaddr), * return a pointer to the addr as a sockaddr_in6 @@ -374,18 +289,8 @@ struct in6_rrenumreq { (((d)->s6_addr32[3] ^ (a)->s6_addr32[3]) & (m)->s6_addr32[3]) == 0 ) #endif /* _KERNEL */ -#define SIOCSIFADDR_IN6 _IOW('i', 12, struct in6_ifreq) #define SIOCGIFADDR_IN6 _IOWR('i', 33, struct in6_ifreq) -#ifdef _KERNEL -/* - * SIOCSxxx ioctls should be unused (see comments in in6.c), but - * we do not shift numbers for binary compatibility. - */ -#define SIOCSIFDSTADDR_IN6 _IOW('i', 14, struct in6_ifreq) -#define SIOCSIFNETMASK_IN6 _IOW('i', 22, struct in6_ifreq) -#endif /* _KERNEL */ - #define SIOCGIFDSTADDR_IN6 _IOWR('i', 34, struct in6_ifreq) #define SIOCGIFNETMASK_IN6 _IOWR('i', 37, struct in6_ifreq) @@ -409,15 +314,6 @@ struct in6_rrenumreq { #define SIOCGIFSTAT_ICMP6 _IOWR('i', 84, struct in6_ifreq) #define SIOCSIFINFO_FLAGS _IOWR('i', 87, struct in6_ndireq) /* XXX */ - -#define SIOCSIFPREFIX_IN6 _IOW('i', 100, struct in6_prefixreq) /* set */ -#define SIOCGIFPREFIX_IN6 _IOWR('i', 101, struct in6_prefixreq) /* get */ -#define SIOCDIFPREFIX_IN6 _IOW('i', 102, struct in6_prefixreq) /* del */ -#define SIOCAIFPREFIX_IN6 _IOW('i', 103, struct in6_rrenumreq) /* add */ -#define SIOCCIFPREFIX_IN6 _IOW('i', 104, \ - struct in6_rrenumreq) /* change */ -#define SIOCSGIFPREFIX_IN6 _IOW('i', 105, \ - struct in6_rrenumreq) /* set global */ #define SIOCGETSGCNT_IN6 _IOWR('u', 106, \ struct sioc_sg_req6) /* get s,g pkt cnt */ Index: sys/netinet6/nd6.h =================================================================== RCS file: /cvs/src/sys/netinet6/nd6.h,v retrieving revision 1.56 diff -u -p -r1.56 nd6.h --- sys/netinet6/nd6.h 18 Dec 2015 10:55:51 -0000 1.56 +++ sys/netinet6/nd6.h 29 Feb 2016 12:51:57 -0000 @@ -81,6 +81,13 @@ struct in6_defrouter { u_char flags; }; +struct prf_ra { + u_int onlink : 1; + u_int autonomous : 1; + u_int router : 1; + u_int reserved : 5; +}; + struct in6_prefix { struct sockaddr_in6 prefix; struct prf_ra raflags; @@ -93,6 +100,10 @@ struct in6_prefix { u_short advrtrs; /* number of advertisement routers */ u_char prefixlen; u_char origin; +#define PR_ORIG_RA 0 +#define PR_ORIG_RR 1 +#define PR_ORIG_STATIC 2 +#define PR_ORIG_KERNEL 3 /* struct sockaddr_in6 advrtr[] */ }; -- jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE