diff options
| author | Roy Marples <roy@marples.name> | 2012-01-30 20:11:47 +0000 |
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2012-01-30 20:11:47 +0000 |
| commit | c06ded74b2034f632ca7f2f0319436e9a01ec898 (patch) | |
| tree | 54d8ca8d4d27b2a1f8fa9e4fd7e6f75329dee122 | |
| parent | bb25289b0f18bf87810164f5e76cfaffa75286d9 (diff) | |
| download | dhcpcd-c06ded74b2034f632ca7f2f0319436e9a01ec898.tar.xz | |
Stop trunctating netmask sockaddr
| -rw-r--r-- | if-bsd.c | 18 |
1 files changed, 3 insertions, 15 deletions
@@ -195,7 +195,7 @@ if_route(const struct interface *iface, const struct in_addr *dest, struct rt_msghdr hdr; char buffer[sizeof(su) * 4]; } rtm; - char *bp = rtm.buffer, *p; + char *bp = rtm.buffer; size_t l; int retval = 0; @@ -250,20 +250,8 @@ if_route(const struct interface *iface, const struct in_addr *dest, } else ADDADDR(gate); - if (rtm.hdr.rtm_addrs & RTA_NETMASK) { - /* Ensure that netmask is set correctly */ - memset(&su, 0, sizeof(su)); - su.sin.sin_family = AF_INET; - su.sin.sin_len = sizeof(su.sin); - memcpy(&su.sin.sin_addr, &net->s_addr, sizeof(su.sin.sin_addr)); - p = su.sa.sa_len + (char *)&su; - for (su.sa.sa_len = 0; p > (char *)&su;) - if (*--p != 0) { - su.sa.sa_len = 1 + p - (char *)&su; - break; - } - ADDSU(su); - } + if (rtm.hdr.rtm_addrs & RTA_NETMASK) + ADDADDR(net); if (rtm.hdr.rtm_addrs & RTA_IFA) ADDADDR(&iface->addr); |
