summaryrefslogtreecommitdiffstats
path: root/if-bsd.c
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2014-10-11 00:44:59 +0000
committerRoy Marples <roy@marples.name>2014-10-11 00:44:59 +0000
commitb594ce0ddf3eb6a930e856c4ec67a59e8991d3a4 (patch)
tree29277cf8ce98453cb72dae7bcfe8c4d3a1ceeabd /if-bsd.c
parent907a5c24e36626a81c20de02c24e7de55f09163a (diff)
downloaddhcpcd-b594ce0ddf3eb6a930e856c4ec67a59e8991d3a4.tar.xz
For the time being, linkaddr is FreeBSD only.
Diffstat (limited to 'if-bsd.c')
-rw-r--r--if-bsd.c29
1 files changed, 17 insertions, 12 deletions
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;
}