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