diff options
| author | Roy Marples <roy@marples.name> | 2013-06-10 00:56:54 +0000 |
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2013-06-10 00:56:54 +0000 |
| commit | 1f4c1525a51e3dad0481638289ece4e88f5f20e6 (patch) | |
| tree | 7746b157c04610e54fe1b9e8d90a9992e8153d45 /if-bsd.c | |
| parent | 10b5d4d07dc255638c5c69f0ab7baf420491c452 (diff) | |
| download | dhcpcd-1f4c1525a51e3dad0481638289ece4e88f5f20e6.tar.xz | |
Purge prefix list and routers at start of IPv6 for BSD.
Remove link_addr compact function as we now had a LL address list.
Fix INET and INET6 seperate compiles.
Diffstat (limited to 'if-bsd.c')
| -rw-r--r-- | if-bsd.c | 30 |
1 files changed, 10 insertions, 20 deletions
@@ -359,6 +359,7 @@ if_route6(const struct rt6 *rt, int action) char *bp = rtm.buffer; size_t l; int retval = 0; + const struct ipv6_addr_l *lla; /* KAME based systems want to store the scope inside the sin6_addr * for link local addreses */ @@ -416,11 +417,10 @@ if_route6(const struct rt6 *rt, int action) ADDADDR(&rt->dest); if (!(rtm.hdr.rtm_flags & RTF_GATEWAY)) { - /* Make us a link layer socket for the host gateway */ - memset(&su, 0, sizeof(su)); - su.sdl.sdl_len = sizeof(struct sockaddr_dl); - link_addr(rt->iface->name, &su.sdl); - ADDSU; + lla = ipv6_linklocal(rt->iface); + if (lla == NULL) /* unlikely as we need a LL to get here */ + return -1; + ADDADDRS(&lla->addr, rt->iface->index); } else ADDADDRS(&rt->gate, rt->iface->index); @@ -450,20 +450,6 @@ if_route6(const struct rt6 *rt, int action) retval = -1; return retval; } - -int -pfx_flush(void) -{ - int s; - char dummy[IFNAMSIZ + 1]; - - s = socket(AF_INET6, SOCK_DGRAM, 0); - if (s != -1) { - strcpy(dummy, "lo0"); - s = ioctl(s, SIOCSPFXFLUSH_IN6, (caddr_t)&dummy); - } - return s; -} #endif static void @@ -485,6 +471,7 @@ get_addrs(int type, char *cp, struct sockaddr **sa) } } +#ifdef INET6 int in6_addr_flags(const char *ifname, const struct in6_addr *addr) { @@ -504,6 +491,7 @@ in6_addr_flags(const char *ifname, const struct in6_addr *addr) } return flags; } +#endif int manage_link(int fd) @@ -515,13 +503,15 @@ manage_link(int fd) struct if_announcemsghdr *ifan; struct if_msghdr *ifm; struct ifa_msghdr *ifam; - struct rt rt; struct sockaddr *sa, *rti_info[RTAX_MAX]; int len; #ifdef RTM_CHGADDR struct sockaddr_dl sdl; unsigned char *hwaddr; #endif +#ifdef INET + struct rt rt; +#endif #if defined(INET6) && !defined(LISTEN_DAD) struct in6_addr ia6; struct sockaddr_in6 *sin6; |
