]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
For the time being, linkaddr is FreeBSD only.
authorRoy Marples <roy@marples.name>
Sat, 11 Oct 2014 00:44:59 +0000 (00:44 +0000)
committerRoy Marples <roy@marples.name>
Sat, 11 Oct 2014 00:44:59 +0000 (00:44 +0000)
dhcpcd.h
if-bsd.c
if.c

index 63a0c4a392da40eda88c55cb2a694a4eada08aa4..71659c566970a58678f195bddbbf0044f5fd2ad8 100644 (file)
--- 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;
index 62393250ca54c5775f873ed7a11b1ed24829c43b..cd9bdd9f776e46069903d75f6cbbd931cbf87225 100644 (file)
--- 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 f73c654603a0ea1a06d0732ea822920d142c0578..d5fbf651acffa8c6a93f2dfbd189d6cc0aae92f4 100644 (file)
--- 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) {