On 08/08/13(Thu) 01:06, Alexander Bluhm wrote:
> Hi,
>
> To control the lifetime of IPv6 addresses, prefixes and default
> routers, the kernel and ndp use a bunch of expire fields. Currently
> they are int or long, but expire should always be time_t. Move
> vltime and pltime to u_int32_t everywhere. Sort struct fields by
> size. Struct inet6_ndpr_msghdr is not used at all, so remove it.
It looks to me that the in6_oprlist structure is here only for some
binary compatibility. So changing its fields makes no sense, however
I think you can completely remove it as it has been introduced in
2002 and nothing use the SIOCGPRLST_IN6 ioctl(2) anymore. ;)
Apart from that it looks ok to me.
>
> bluhm
>
> Index: netinet6/nd6.h
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/netinet6/nd6.h,v
> retrieving revision 1.31
> diff -u -p -u -p -r1.31 nd6.h
> --- netinet6/nd6.h 1 Jul 2013 14:22:20 -0000 1.31
> +++ netinet6/nd6.h 7 Aug 2013 22:54:51 -0000
> @@ -46,14 +46,14 @@ struct llinfo_nd6 {
> struct llinfo_nd6 *ln_prev;
> struct rtentry *ln_rt;
> struct mbuf *ln_hold; /* last packet until resolved/timeout */
> - long ln_asked; /* number of queries already sent for this addr
> */
> - u_long ln_expire; /* lifetime for NDP state transition */
> + time_t ln_expire; /* lifetime for NDP state transition */
> + long ln_asked; /* number of queries already sent for addr */
> + int ln_byhint; /* # of times we made it reachable by UL hint */
> short ln_state; /* reachability state */
> short ln_router; /* 2^0: ND6 router bit */
> - int ln_byhint; /* # of times we made it reachable by UL hint */
>
> long ln_ntick;
> - struct timeout ln_timer_ch;
> + struct timeout ln_timer_ch;
> };
>
> #define ND6_LLINFO_PURGE -3
> @@ -107,10 +107,10 @@ struct nd_ifinfo {
> struct in6_nbrinfo {
> char ifname[IFNAMSIZ]; /* if name, e.g. "en0" */
> struct in6_addr addr; /* IPv6 address of the neighbor */
> - long asked; /* number of queries already sent for this addr
> */
> + time_t expire; /* lifetime for NDP state transition */
> + long asked; /* number of queries already sent for addr */
> int isrouter; /* if it acts as a router */
> int state; /* reachability state */
> - int expire; /* lifetime for NDP state transition */
> };
>
> #define DRLSTSIZ 10
> @@ -119,19 +119,19 @@ struct in6_drlist {
> char ifname[IFNAMSIZ];
> struct {
> struct in6_addr rtaddr;
> - u_char flags;
> + time_t expire;
> u_short rtlifetime;
> - u_long expire;
> - u_short if_index;
> + u_short if_index;
> + u_char flags;
> } defrouter[DRLSTSIZ];
> };
>
> struct in6_defrouter {
> struct sockaddr_in6 rtaddr;
> - u_char flags;
> + time_t expire;
> u_short rtlifetime;
> - u_long expire;
> - u_short if_index;
> + u_short if_index;
> + u_char flags;
> };
>
> #ifdef _KERNEL
> @@ -139,14 +139,14 @@ struct in6_oprlist {
> char ifname[IFNAMSIZ];
> struct {
> struct in6_addr prefix;
> - struct prf_ra raflags;
> + struct prf_ra raflags;
> + time_t expire;
> + u_int32_t vltime;
> + u_int32_t pltime;
> + u_short if_index;
> + u_short advrtrs; /* number of advertisement routers */
> u_char prefixlen;
> u_char origin;
> - u_long vltime;
> - u_long pltime;
> - u_long expire;
> - u_short if_index;
> - u_short advrtrs; /* number of advertisement routers */
> struct in6_addr advrtr[DRLSTSIZ]; /* XXX: explicit limit */
> } prefix[PRLSTSIZ];
> };
> @@ -156,30 +156,30 @@ struct in6_prlist {
> char ifname[IFNAMSIZ];
> struct {
> struct in6_addr prefix;
> - struct prf_ra raflags;
> - u_char prefixlen;
> - u_char origin;
> + struct prf_ra raflags;
> + time_t expire;
> u_int32_t vltime;
> u_int32_t pltime;
> - time_t expire;
> - u_short if_index;
> - u_short advrtrs; /* number of advertisement routers */
> + u_short if_index;
> + u_short advrtrs; /* number of advertisement routers */
> + u_char prefixlen;
> + u_char origin;
> struct in6_addr advrtr[DRLSTSIZ]; /* XXX: explicit limit */
> } prefix[PRLSTSIZ];
> };
>
> struct in6_prefix {
> struct sockaddr_in6 prefix;
> - struct prf_ra raflags;
> - u_char prefixlen;
> - u_char origin;
> + struct prf_ra raflags;
> + time_t expire;
> u_int32_t vltime;
> u_int32_t pltime;
> - time_t expire;
> u_int32_t flags;
> - int refcnt;
> - u_short if_index;
> - u_short advrtrs; /* number of advertisement routers */
> + int refcnt;
> + u_short if_index;
> + u_short advrtrs; /* number of advertisement routers */
> + u_char prefixlen;
> + u_char origin;
> /* struct sockaddr_in6 advrtr[] */
> };
>
> @@ -242,11 +242,11 @@ TAILQ_HEAD(nd_drhead, nd_defrouter);
> struct nd_defrouter {
> TAILQ_ENTRY(nd_defrouter) dr_entry;
> struct in6_addr rtaddr;
> - u_char flags; /* flags on RA message */
> - u_short rtlifetime;
> - u_long expire;
> struct ifnet *ifp;
> + time_t expire;
> int installed; /* is installed into kernel routing table */
> + u_short rtlifetime;
> + u_char flags; /* flags on RA message */
> };
>
> struct nd_prefix {
> @@ -255,13 +255,13 @@ struct nd_prefix {
> struct sockaddr_in6 ndpr_prefix; /* prefix */
> struct in6_addr ndpr_mask; /* netmask derived from the prefix */
>
> - u_int32_t ndpr_vltime; /* advertised valid lifetime */
> - u_int32_t ndpr_pltime; /* advertised preferred lifetime */
> -
> time_t ndpr_expire; /* expiration time of the prefix */
> time_t ndpr_preferred; /* preferred time of the prefix */
> time_t ndpr_lastupdate; /* reception time of last advertisement */
>
> + u_int32_t ndpr_vltime; /* advertised valid lifetime */
> + u_int32_t ndpr_pltime; /* advertised preferred lifetime */
> +
> struct prf_ra ndpr_flags;
> u_int32_t ndpr_stateflags; /* actual state flags */
> /* list of routers that advertise the prefix: */
> @@ -274,32 +274,6 @@ struct nd_prefix {
> #define ndpr_raf_onlink ndpr_flags.onlink
> #define ndpr_raf_auto ndpr_flags.autonomous
> #define ndpr_raf_router ndpr_flags.router
> -
> -/*
> - * Message format for use in obtaining information about prefixes
> - * from inet6 sysctl function
> - */
> -struct inet6_ndpr_msghdr {
> - u_short inpm_msglen; /* to skip over non-understood messages */
> - u_char inpm_version; /* future binary compatibility */
> - u_char inpm_type; /* message type */
> - struct in6_addr inpm_prefix;
> - u_long prm_vltim;
> - u_long prm_pltime;
> - u_long prm_expire;
> - u_long prm_preferred;
> - struct in6_prflags prm_flags;
> - u_short prm_index; /* index for associated ifp */
> - u_char prm_plen; /* length of prefix in bits */
> -};
> -
> -#define prm_raf_onlink prm_flags.prf_ra.onlink
> -#define prm_raf_auto prm_flags.prf_ra.autonomous
> -
> -#define prm_statef_onlink prm_flags.prf_state.onlink
> -
> -#define prm_rrf_decrvalid prm_flags.prf_rr.decrvalid
> -#define prm_rrf_decrprefd prm_flags.prf_rr.decrprefd
>
> struct nd_pfxrouter {
> LIST_ENTRY(nd_pfxrouter) pfr_entry;
>