On 15/10/15(Thu) 22:51, Alexander Bluhm wrote:
> Hi,
> 
> Inspired by the satosin() functions, I think it is better to have
> inline functions than casts to convert between sockaddrs.  They
> check if the incoming object has the expected type.  So introduce
> satosdl() and sdltosa() to the kernel.

I like this very much, ok mpi@.

I general I'd like to see more uses of "sockaddr_dl" and stop violating
the ifp layer by using ac_enaddr in most of the places.  This cleanup
will help with that.

> Index: net/if.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/net/if.c,v
> retrieving revision 1.389
> diff -u -p -r1.389 if.c
> --- net/if.c  12 Oct 2015 13:17:58 -0000      1.389
> +++ net/if.c  15 Oct 2015 20:40:39 -0000
> @@ -1945,7 +1945,7 @@ ifioctl(struct socket *so, u_long cmd, c
>       case SIOCSIFLLADDR:
>               if ((error = suser(p, 0)))
>                       return (error);
> -             sdl = (struct sockaddr_dl *)ifp->if_sadl;
> +             sdl = ifp->if_sadl;
>               if (sdl == NULL)
>                       return (EINVAL);
>               if (ifr->ifr_addr.sa_len != ETHER_ADDR_LEN)
> Index: net/if_dl.h
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/net/if_dl.h,v
> retrieving revision 1.9
> diff -u -p -r1.9 if_dl.h
> --- net/if_dl.h       15 Sep 2015 09:13:33 -0000      1.9
> +++ net/if_dl.h       15 Oct 2015 20:39:13 -0000
> @@ -71,7 +71,21 @@ struct sockaddr_dl {
>  
>  #define LLADDR(s) ((caddr_t)((s)->sdl_data + (s)->sdl_nlen))
>  
> -#ifndef _KERNEL
> +#ifdef _KERNEL
> +
> +static __inline struct sockaddr_dl *
> +satosdl(struct sockaddr *sa)
> +{
> +     return ((struct sockaddr_dl *)(sa));
> +}
> +
> +static __inline struct sockaddr *
> +sdltosa(struct sockaddr_dl *sdl)
> +{
> +     return ((struct sockaddr *)(sdl));
> +}
> +
> +#else /* _KERNEL */
>  
>  __BEGIN_DECLS
>  char *link_ntoa(const struct sockaddr_dl *);
> Index: net/if_enc.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/net/if_enc.c,v
> retrieving revision 1.60
> diff -u -p -r1.60 if_enc.c
> --- net/if_enc.c      14 Mar 2015 03:38:51 -0000      1.60
> +++ net/if_enc.c      15 Oct 2015 20:40:40 -0000
> @@ -27,6 +27,7 @@
>  #include <sys/mbuf.h>
>  
>  #include <net/if.h>
> +#include <net/if_dl.h>
>  #include <net/if_var.h>
>  #include <net/if_enc.h>
>  #include <net/if_types.h>
> @@ -104,7 +105,7 @@ enc_clone_create(struct if_clone *ifc, i
>       if_alloc_sadl(ifp);
>       sc->sc_ifa.ifa_ifp = ifp;
>       sc->sc_ifa.ifa_rtrequest = link_rtrequest;
> -     sc->sc_ifa.ifa_addr = (struct sockaddr *)ifp->if_sadl;
> +     sc->sc_ifa.ifa_addr = sdltosa(ifp->if_sadl);
>       sc->sc_ifa.ifa_netmask = NULL;
>  
>  #if NBPFILTER > 0
> Index: net/if_ethersubr.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/net/if_ethersubr.c,v
> retrieving revision 1.228
> diff -u -p -r1.228 if_ethersubr.c
> --- net/if_ethersubr.c        29 Sep 2015 10:11:40 -0000      1.228
> +++ net/if_ethersubr.c        15 Oct 2015 20:41:54 -0000
> @@ -222,10 +222,9 @@ ether_output(struct ifnet *ifp, struct m
>  
>               switch (dst->sa_family) {
>                       case AF_LINK:
> -                             if (((struct sockaddr_dl *)dst)->sdl_alen <
> -                                 sizeof(edst))
> +                             if (satosdl(dst)->sdl_alen < sizeof(edst))
>                                       senderr(EHOSTUNREACH);
> -                             memcpy(edst, LLADDR((struct sockaddr_dl *)dst),
> +                             memcpy(edst, LLADDR(satosdl(dst)),
>                                   sizeof(edst));
>                               break;
>                       case AF_INET:
> Index: net/if_mpe.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/net/if_mpe.c,v
> retrieving revision 1.47
> diff -u -p -r1.47 if_mpe.c
> --- net/if_mpe.c      12 Sep 2015 20:50:17 -0000      1.47
> +++ net/if_mpe.c      15 Oct 2015 20:40:40 -0000
> @@ -25,6 +25,7 @@
>  #include <sys/ioctl.h>
>  
>  #include <net/if.h>
> +#include <net/if_dl.h>
>  #include <net/if_var.h>
>  #include <net/if_types.h>
>  #include <net/netisr.h>
> @@ -105,7 +106,7 @@ mpe_clone_create(struct if_clone *ifc, i
>  
>       mpeif->sc_ifa.ifa_ifp = ifp;
>       mpeif->sc_ifa.ifa_rtrequest = link_rtrequest;
> -     mpeif->sc_ifa.ifa_addr = (struct sockaddr *) ifp->if_sadl;
> +     mpeif->sc_ifa.ifa_addr = sdltosa(ifp->if_sadl);
>       mpeif->sc_smpls.smpls_len = sizeof(mpeif->sc_smpls);
>       mpeif->sc_smpls.smpls_family = AF_MPLS;
>  
> Index: net/if_mpw.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/net/if_mpw.c,v
> retrieving revision 1.6
> diff -u -p -r1.6 if_mpw.c
> --- net/if_mpw.c      12 Sep 2015 20:50:17 -0000      1.6
> +++ net/if_mpw.c      15 Oct 2015 20:40:40 -0000
> @@ -27,6 +27,7 @@
>  #include <sys/errno.h>
>  
>  #include <net/if.h>
> +#include <net/if_dl.h>
>  #include <net/if_types.h>
>  #include <net/route.h>
>  
> @@ -105,7 +106,7 @@ mpw_clone_create(struct if_clone *ifc, i
>  
>       sc->sc_ifa.ifa_ifp = ifp;
>       sc->sc_ifa.ifa_rtrequest = link_rtrequest;
> -     sc->sc_ifa.ifa_addr = (struct sockaddr *) ifp->if_sadl;
> +     sc->sc_ifa.ifa_addr = sdltosa(ifp->if_sadl);
>       sc->sc_smpls.smpls_len = sizeof(sc->sc_smpls);
>       sc->sc_smpls.smpls_family = AF_MPLS;
>  
> Index: net/route.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/net/route.c,v
> retrieving revision 1.252
> diff -u -p -r1.252 route.c
> --- net/route.c       14 Oct 2015 10:18:03 -0000      1.252
> +++ net/route.c       15 Oct 2015 20:43:06 -0000
> @@ -388,7 +388,7 @@ rt_sendmsg(struct rtentry *rt, int cmd, 
>       info.rti_info[RTAX_NETMASK] = rt_mask(rt);
>       info.rti_info[RTAX_LABEL] = rtlabel_id2sa(rt->rt_labelid, &sa_rl);
>       if (rt->rt_ifp != NULL) {
> -             info.rti_info[RTAX_IFP] =(struct sockaddr *)rt->rt_ifp->if_sadl;
> +             info.rti_info[RTAX_IFP] = sdltosa(rt->rt_ifp->if_sadl);
>               info.rti_info[RTAX_IFA] = rt->rt_ifa->ifa_addr;
>       }
>  
> @@ -612,7 +612,7 @@ ifa_ifwithroute(int flags, struct sockad
>       }
>       if (ifa == NULL) {
>               if (gateway->sa_family == AF_LINK) {
> -                     struct sockaddr_dl *sdl = (struct sockaddr_dl *)gateway;
> +                     struct sockaddr_dl *sdl = satosdl(gateway);
>                       struct ifnet *ifp = if_get(sdl->sdl_index);
>  
>                       if (ifp != NULL)
> @@ -656,7 +656,7 @@ rt_getifa(struct rt_addrinfo *info, u_in
>       if (info->rti_info[RTAX_IFP] != NULL) {
>               struct sockaddr_dl *sdl;
>  
> -             sdl = (struct sockaddr_dl *)info->rti_info[RTAX_IFP];
> +             sdl = satosdl(info->rti_info[RTAX_IFP]);
>               ifp = if_get(sdl->sdl_index);
>       }
>  
> @@ -808,7 +808,7 @@ rtrequest1(int req, struct rt_addrinfo *
>  
>               info->rti_flags = rt->rt_flags | (RTF_CLONED|RTF_HOST);
>               info->rti_flags &= ~(RTF_CLONING|RTF_CONNECTED|RTF_STATIC);
> -             info->rti_info[RTAX_GATEWAY] = (struct sockaddr *)&sa_dl;
> +             info->rti_info[RTAX_GATEWAY] = sdltosa(&sa_dl);
>               info->rti_info[RTAX_LABEL] =
>                   rtlabel_id2sa(rt->rt_labelid, &sa_rl2);
>               /* FALLTHROUGH */
> @@ -1117,7 +1117,7 @@ rt_ifa_add(struct ifaddr *ifa, int flags
>       info.rti_flags = flags | RTF_MPATH;
>       info.rti_info[RTAX_DST] = dst;
>       if (flags & RTF_LLINFO)
> -             info.rti_info[RTAX_GATEWAY] = (struct sockaddr *)ifp->if_sadl;
> +             info.rti_info[RTAX_GATEWAY] = sdltosa(ifp->if_sadl);
>       else
>               info.rti_info[RTAX_GATEWAY] = ifa->ifa_addr;
>       info.rti_info[RTAX_LABEL] = rtlabel_id2sa(ifp->if_rtlabelid, &sa_rl);
> Index: net/rtsock.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/net/rtsock.c,v
> retrieving revision 1.171
> diff -u -p -r1.171 rtsock.c
> --- net/rtsock.c      21 Sep 2015 11:27:08 -0000      1.171
> +++ net/rtsock.c      15 Oct 2015 20:40:40 -0000
> @@ -72,6 +72,7 @@
>  #include <sys/protosw.h>
>  
>  #include <net/if.h>
> +#include <net/if_dl.h>
>  #include <net/if_var.h>
>  #include <net/route.h>
>  #include <net/raw_cb.h>
> @@ -703,8 +704,7 @@ report:
>                       info.rti_info[RTAX_IFA] = NULL;
>                       if (rtm->rtm_addrs & (RTA_IFP | RTA_IFA) &&
>                           (ifp = rt->rt_ifp) != NULL) {
> -                             info.rti_info[RTAX_IFP] =
> -                                     (struct sockaddr *)ifp->if_sadl;
> +                             info.rti_info[RTAX_IFP] = sdltosa(ifp->if_sadl);
>                               info.rti_info[RTAX_IFA] = rt->rt_ifa->ifa_addr;
>                               if (ifp->if_flags & IFF_POINTOPOINT)
>                                       info.rti_info[RTAX_BRD] =
> @@ -1144,7 +1144,7 @@ rt_sendaddrmsg(struct rtentry *rt, int c
>  
>       memset(&info, 0, sizeof(info));
>       info.rti_info[RTAX_IFA] = ifa->ifa_addr;
> -     info.rti_info[RTAX_IFP] = (struct sockaddr *)ifp->if_sadl;
> +     info.rti_info[RTAX_IFP] = sdltosa(ifp->if_sadl);
>       info.rti_info[RTAX_NETMASK] = ifa->ifa_netmask;
>       info.rti_info[RTAX_BRD] = ifa->ifa_dstaddr;
>       if ((m = rt_msg1(cmd, &info)) == NULL)
> @@ -1220,8 +1220,7 @@ sysctl_dumpentry(struct rtentry *rt, voi
>       info.rti_info[RTAX_GATEWAY] = rt->rt_gateway;
>       info.rti_info[RTAX_NETMASK] = rt_mask(rt);
>       if (rt->rt_ifp) {
> -             info.rti_info[RTAX_IFP] =
> -                 (struct sockaddr *)rt->rt_ifp->if_sadl;
> +             info.rti_info[RTAX_IFP] = sdltosa(rt->rt_ifp->if_sadl);
>               info.rti_info[RTAX_IFA] = rt->rt_ifa->ifa_addr;
>               if (rt->rt_ifp->if_flags & IFF_POINTOPOINT)
>                       info.rti_info[RTAX_BRD] = rt->rt_ifa->ifa_dstaddr;
> @@ -1275,7 +1274,7 @@ sysctl_iflist(int af, struct walkarg *w)
>               if (w->w_arg && w->w_arg != ifp->if_index)
>                       continue;
>               /* Copy the link-layer address first */
> -             info.rti_info[RTAX_IFP] = (struct sockaddr *)ifp->if_sadl;
> +             info.rti_info[RTAX_IFP] = sdltosa(ifp->if_sadl);
>               len = rt_msg2(RTM_IFINFO, RTM_VERSION, &info, 0, w);
>               if (w->w_where && w->w_tmem && w->w_needed <= 0) {
>                       struct if_msghdr *ifm;
> Index: netinet/if_ether.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/if_ether.c,v
> retrieving revision 1.172
> diff -u -p -r1.172 if_ether.c
> --- netinet/if_ether.c        13 Oct 2015 10:21:27 -0000      1.172
> +++ netinet/if_ether.c        15 Oct 2015 20:42:52 -0000
> @@ -69,8 +69,6 @@
>  #include <net/if_bridge.h>
>  #endif
>  
> -#define SDL(s) ((struct sockaddr_dl *)s)
> -
>  /*
>   * ARP trailer negotiation.  Trailer protocol is not IP specific,
>   * but ARP request/response use IP addresses.
> @@ -198,7 +196,7 @@ arp_rtrequest(int req, struct rtentry *r
>                       arprequest(ifp,
>                           &satosin(rt_key(rt))->sin_addr.s_addr,
>                           &satosin(rt_key(rt))->sin_addr.s_addr,
> -                         (u_char *)LLADDR(SDL(gate)));
> +                         (u_char *)LLADDR(satosdl(gate)));
>               /*FALLTHROUGH*/
>       case RTM_RESOLVE:
>               if (gate->sa_family != AF_LINK ||
> @@ -207,8 +205,8 @@ arp_rtrequest(int req, struct rtentry *r
>                           ifp->if_xname);
>                       break;
>               }
> -             SDL(gate)->sdl_type = ifp->if_type;
> -             SDL(gate)->sdl_index = ifp->if_index;
> +             satosdl(gate)->sdl_type = ifp->if_type;
> +             satosdl(gate)->sdl_index = ifp->if_index;
>               if (la != 0)
>                       break; /* This happens on a route change */
>               /*
> @@ -373,7 +371,7 @@ arpresolve(struct ifnet *ifp, struct rte
>       }
>       if (la == NULL || rt == NULL)
>               goto bad;
> -     sdl = SDL(rt->rt_gateway);
> +     sdl = satosdl(rt->rt_gateway);
>       if (sdl->sdl_alen > 0 && sdl->sdl_alen != ETHER_ADDR_LEN) {
>               log(LOG_DEBUG, "%s: %s: incorrect arp information\n", __func__,
>                   inet_ntop(AF_INET, &satosin(dst)->sin_addr,
> @@ -635,7 +633,7 @@ in_arpinput(struct mbuf *m)
>       }
>       rt = arplookup(isaddr.s_addr, itaddr.s_addr == myaddr.s_addr, 0,
>           rtable_l2(m->m_pkthdr.ph_rtableid));
> -     if (rt != NULL && (sdl = SDL(rt->rt_gateway)) != NULL) {
> +     if (rt != NULL && (sdl = satosdl(rt->rt_gateway)) != NULL) {
>               la = (struct llinfo_arp *)rt->rt_llinfo;
>               if (sdl->sdl_alen) {
>                       if (memcmp(ea->arp_sha, LLADDR(sdl), sdl->sdl_alen)) {
> @@ -743,7 +741,7 @@ out:
>               if (rt->rt_ifp->if_type == IFT_CARP && ifp->if_type != IFT_CARP)
>                       goto out;
>               memcpy(ea->arp_tha, ea->arp_sha, sizeof(ea->arp_sha));
> -             sdl = SDL(rt->rt_gateway);
> +             sdl = satosdl(rt->rt_gateway);
>               memcpy(ea->arp_sha, LLADDR(sdl), sizeof(ea->arp_sha));
>               rtfree(rt);
>       }
> @@ -775,7 +773,7 @@ void
>  arptfree(struct rtentry *rt)
>  {
>       struct llinfo_arp *la = (struct llinfo_arp *)rt->rt_llinfo;
> -     struct sockaddr_dl *sdl = SDL(rt->rt_gateway);
> +     struct sockaddr_dl *sdl = satosdl(rt->rt_gateway);
>  
>       if ((sdl != NULL) && (sdl->sdl_family == AF_LINK)) {
>               sdl->sdl_alen = 0;
> @@ -831,7 +829,7 @@ arpproxy(struct in_addr in, unsigned int
>               return (0);
>  
>       /* Check that arp information are correct. */
> -     sdl = (struct sockaddr_dl *)rt->rt_gateway;
> +     sdl = satosdl(rt->rt_gateway);
>       if (sdl->sdl_alen != ETHER_ADDR_LEN) {
>               rtfree(rt);
>               return (0);
> Index: netinet6/icmp6.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/netinet6/icmp6.c,v
> retrieving revision 1.172
> diff -u -p -r1.172 icmp6.c
> --- netinet6/icmp6.c  18 Sep 2015 14:26:22 -0000      1.172
> +++ netinet6/icmp6.c  15 Oct 2015 20:40:39 -0000
> @@ -1692,7 +1692,7 @@ icmp6_redirect_output(struct mbuf *m0, s
>               if ((nrt != NULL) &&
>                   (nrt->rt_flags & (RTF_GATEWAY|RTF_LLINFO)) == RTF_LLINFO &&
>                   (nrt->rt_gateway->sa_family == AF_LINK) &&
> -                 (sdl = (struct sockaddr_dl *)nrt->rt_gateway) &&
> +                 (sdl = satosdl(nrt->rt_gateway)) &&
>                   sdl->sdl_alen) {
>                       nd_opt = (struct nd_opt_hdr *)p;
>                       nd_opt->nd_opt_type = ND_OPT_TARGET_LINKADDR;
> Index: netinet6/in6_ifattach.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/netinet6/in6_ifattach.c,v
> retrieving revision 1.96
> diff -u -p -r1.96 in6_ifattach.c
> --- netinet6/in6_ifattach.c   12 Sep 2015 20:50:17 -0000      1.96
> +++ netinet6/in6_ifattach.c   15 Oct 2015 20:40:39 -0000
> @@ -144,7 +144,7 @@ get_hw_ifid(struct ifnet *ifp, struct in
>       static u_int8_t allone[8] =
>               { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
>  
> -     sdl = (struct sockaddr_dl *)ifp->if_sadl;
> +     sdl = ifp->if_sadl;
>       if (sdl == NULL || sdl->sdl_alen == 0)
>               return -1;
>  
> Index: netinet6/nd6.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/netinet6/nd6.c,v
> retrieving revision 1.155
> diff -u -p -r1.155 nd6.c
> --- netinet6/nd6.c    1 Oct 2015 09:10:22 -0000       1.155
> +++ netinet6/nd6.c    15 Oct 2015 20:40:40 -0000
> @@ -64,8 +64,6 @@
>  #define ND6_SLOWTIMER_INTERVAL (60 * 60) /* 1 hour */
>  #define ND6_RECALC_REACHTM_INTERVAL (60 * 120) /* 2 hours */
>  
> -#define SDL(s) ((struct sockaddr_dl *)s)
> -
>  /* timer values */
>  int  nd6_prune       = 1;    /* walk list every 1 seconds */
>  int  nd6_delay       = 5;    /* delay first probe time 5 second */
> @@ -608,7 +606,7 @@ nd6_purge(struct ifnet *ifp)
>               rt = ln->ln_rt;
>               if (rt && rt->rt_gateway &&
>                   rt->rt_gateway->sa_family == AF_LINK) {
> -                     sdl = (struct sockaddr_dl *)rt->rt_gateway;
> +                     sdl = satosdl(rt->rt_gateway);
>                       if (sdl->sdl_index == ifp->if_index)
>                               nln = nd6_free(rt, 0);
>               }
> @@ -669,8 +667,7 @@ nd6_lookup(struct in6_addr *addr6, int c
>                       bzero(&info, sizeof(info));
>                       info.rti_flags = RTF_HOST | RTF_LLINFO;
>                       info.rti_info[RTAX_DST] = sin6tosa(&sin6);
> -                     info.rti_info[RTAX_GATEWAY] =
> -                         (struct sockaddr *)ifp->if_sadl;
> +                     info.rti_info[RTAX_GATEWAY] = sdltosa(ifp->if_sadl);
>                       error = rtrequest1(RTM_ADD, &info, RTP_CONNECTED, &rt,
>                           rtableid);
>                       if (error)
> @@ -1028,8 +1025,8 @@ nd6_rtrequest(int req, struct rtentry *r
>                           __func__, ifp->if_xname);
>                       break;
>               }
> -             SDL(gate)->sdl_type = ifp->if_type;
> -             SDL(gate)->sdl_index = ifp->if_index;
> +             satosdl(gate)->sdl_type = ifp->if_type;
> +             satosdl(gate)->sdl_index = ifp->if_index;
>               if (ln != NULL)
>                       break;  /* This happens on a route change */
>               /*
> @@ -1365,7 +1362,7 @@ fail:
>               goto fail;
>       if (rt->rt_gateway->sa_family != AF_LINK)
>               goto fail;
> -     sdl = SDL(rt->rt_gateway);
> +     sdl = satosdl(rt->rt_gateway);
>  
>       olladdr = (sdl->sdl_alen) ? 1 : 0;
>       if (olladdr && lladdr) {
> @@ -1770,7 +1767,7 @@ nd6_storelladdr(struct ifnet *ifp, struc
>               m_freem(m);
>               return (EINVAL);
>       }
> -     sdl = SDL(rt->rt_gateway);
> +     sdl = satosdl(rt->rt_gateway);
>       if (sdl->sdl_alen != ETHER_ADDR_LEN) {
>               char addr[INET6_ADDRSTRLEN];
>               log(LOG_DEBUG, "%s: %s: incorrect nd6 information\n", __func__,
> Index: netinet6/nd6_nbr.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/netinet6/nd6_nbr.c,v
> retrieving revision 1.96
> diff -u -p -r1.96 nd6_nbr.c
> --- netinet6/nd6_nbr.c        18 Sep 2015 14:26:22 -0000      1.96
> +++ netinet6/nd6_nbr.c        15 Oct 2015 20:40:40 -0000
> @@ -61,8 +61,6 @@
>  #include <netinet/ip_carp.h>
>  #endif
>  
> -#define SDL(s) ((struct sockaddr_dl *)s)
> -
>  TAILQ_HEAD(dadq_head, dadq);
>  struct dadq {
>       TAILQ_ENTRY(dadq) dad_list;
> @@ -242,7 +240,7 @@ nd6_ns_input(struct mbuf *m, int off, in
>                           IN6_IFF_NOTREADY | IN6_IFF_ANYCAST)->ia_ifa;
>                       if (ifa) {
>                               proxy = 1;
> -                             proxydl = SDL(rt->rt_gateway);
> +                             proxydl = satosdl(rt->rt_gateway);
>                               router = 0;     /* XXX */
>                       }
>               }
> @@ -317,7 +315,7 @@ nd6_ns_input(struct mbuf *m, int off, in
>               nd6_na_output(ifp, &saddr6, &taddr6,
>                   ((anycast || proxy || !tlladdr) ? 0 : ND_NA_FLAG_OVERRIDE) |
>                   (router ? ND_NA_FLAG_ROUTER : 0),
> -                 tlladdr, (struct sockaddr *)proxydl);
> +                 tlladdr, sdltosa(proxydl));
>               goto freeit;
>       }
>  
> @@ -326,7 +324,7 @@ nd6_ns_input(struct mbuf *m, int off, in
>       nd6_na_output(ifp, &saddr6, &taddr6,
>           ((anycast || proxy || !tlladdr) ? 0 : ND_NA_FLAG_OVERRIDE) |
>           (router ? ND_NA_FLAG_ROUTER : 0) | ND_NA_FLAG_SOLICITED,
> -         tlladdr, (struct sockaddr *)proxydl);
> +         tlladdr, sdltosa(proxydl));
>   freeit:
>       m_freem(m);
>       if_put(ifp);
> @@ -711,7 +709,7 @@ nd6_na_input(struct mbuf *m, int off, in
>       rt = nd6_lookup(&taddr6, 0, ifp, ifp->if_rdomain);
>       if ((rt == NULL) ||
>          ((ln = (struct llinfo_nd6 *)rt->rt_llinfo) == NULL) ||
> -        ((sdl = SDL(rt->rt_gateway)) == NULL))
> +        ((sdl = satosdl(rt->rt_gateway)) == NULL))
>               goto freeit;
>  
>       if (ln->ln_state == ND6_LLINFO_INCOMPLETE) {
> @@ -1033,7 +1031,7 @@ nd6_na_output(struct ifnet *ifp, struct 
>                       mac = nd6_ifptomac(ifp);
>               } else if (sdl0->sa_family == AF_LINK) {
>                       struct sockaddr_dl *sdl;
> -                     sdl = (struct sockaddr_dl *)sdl0;
> +                     sdl = satosdl(sdl0);
>                       if (sdl->sdl_alen == ifp->if_addrlen)
>                               mac = LLADDR(sdl);
>               }
> Index: netinet6/nd6_rtr.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/netinet6/nd6_rtr.c,v
> retrieving revision 1.125
> diff -u -p -r1.125 nd6_rtr.c
> --- netinet6/nd6_rtr.c        18 Sep 2015 14:26:22 -0000      1.125
> +++ netinet6/nd6_rtr.c        15 Oct 2015 20:39:13 -0000
> @@ -58,8 +58,6 @@
>  #include <netinet6/nd6.h>
>  #include <netinet/icmp6.h>
>  
> -#define SDL(s)       ((struct sockaddr_dl *)s)
> -
>  int rtpref(struct nd_defrouter *);
>  struct nd_defrouter *defrtrlist_update(struct nd_defrouter *);
>  struct in6_ifaddr *in6_ifadd(struct nd_prefix *, int);
> 

Reply via email to