From: Roy Marples Date: Sat, 11 Oct 2014 00:44:59 +0000 (+0000) Subject: For the time being, linkaddr is FreeBSD only. X-Git-Tag: v6.5.1~29 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b594ce0ddf3eb6a930e856c4ec67a59e8991d3a4;p=thirdparty%2Fdhcpcd.git For the time being, linkaddr is FreeBSD only. --- diff --git a/dhcpcd.h b/dhcpcd.h index 63a0c4a3..71659c56 100644 --- a/dhcpcd.h +++ b/dhcpcd.h @@ -63,7 +63,9 @@ struct interface { unsigned int index; unsigned int flags; sa_family_t family; +#ifdef __FreeBSD struct sockaddr_storage linkaddr; +#endif unsigned char hwaddr[HWADDR_LEN]; uint8_t hwlen; unsigned int metric; diff --git a/if-bsd.c b/if-bsd.c index 62393250..cd9bdd9f 100644 --- a/if-bsd.c +++ b/if-bsd.c @@ -144,6 +144,19 @@ if_openlinksocket(void) #endif } +static void +if_linkaddr(struct sockaddr_dl *sdl, const struct interface *ifp) +{ + +#ifdef __FreeBSD__ + memcpy(sdl, &ifp->linkaddr, sizeof(*sdl)); + sdl->sdl_nlen = sdl->sdl_alen = sdl->sdl_slen = 0; +#else + sdl->sdl_len = sizeof(*sdl); + link_addr(ifp->name, sdl); +#endif +} + static int if_getssid1(const char *ifname, uint8_t *ssid) { @@ -524,9 +537,7 @@ if_route(const struct rt *rt, int action) rt->gate.s_addr != htonl(INADDR_LOOPBACK)) || !(rtm.hdr.rtm_flags & RTF_STATIC)) { - memcpy(&su.sdl, - &rt->iface->linkaddr, sizeof(struct sockaddr_dl)); - su.sdl.sdl_nlen = su.sdl.sdl_alen = su.sdl.sdl_slen = 0; + if_linkaddr(&su.sdl, rt->iface); ADDSU; } else ADDADDR(&rt->gate); @@ -536,9 +547,7 @@ if_route(const struct rt *rt, int action) ADDADDR(&rt->net); if (rtm.hdr.rtm_addrs & RTA_IFP) { - memcpy(&su.sdl, - &rt->iface->linkaddr, sizeof(struct sockaddr_dl)); - su.sdl.sdl_nlen = su.sdl.sdl_alen = su.sdl.sdl_slen = 0; + if_linkaddr(&su.sdl, rt->iface); ADDSU; } @@ -696,9 +705,7 @@ if_route6(const struct rt6 *rt, int action) lla = NULL; if (rtm.hdr.rtm_addrs & RTA_GATEWAY) { if (IN6_IS_ADDR_UNSPECIFIED(&rt->gate)) { - memcpy(&su.sdl, - &rt->iface->linkaddr, sizeof(struct sockaddr_dl)); - su.sdl.sdl_nlen = su.sdl.sdl_alen = su.sdl.sdl_slen = 0; + if_linkaddr(&su.sdl, rt->iface); ADDSU; } else { ADDADDRS(&rt->gate, rt->iface->index); @@ -709,9 +716,7 @@ if_route6(const struct rt6 *rt, int action) ADDADDR(&rt->net); if (rtm.hdr.rtm_addrs & RTA_IFP) { - memcpy(&su.sdl, - &rt->iface->linkaddr, sizeof(struct sockaddr_dl)); - su.sdl.sdl_nlen = su.sdl.sdl_alen = su.sdl.sdl_slen = 0; + if_linkaddr(&su.sdl, rt->iface); ADDSU; } diff --git a/if.c b/if.c index f73c6546..d5fbf651 100644 --- a/if.c +++ b/if.c @@ -326,7 +326,9 @@ if_discover(struct dhcpcd_ctx *ctx, int argc, char * const *argv) } #endif +#ifdef __FreeBSD__ memcpy(&ifp->linkaddr, sdl, sdl->sdl_len); +#endif ifp->index = sdl->sdl_index; sdl_type = sdl->sdl_type; switch(sdl->sdl_type) {