summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2012-01-30 20:11:47 +0000
committerRoy Marples <roy@marples.name>2012-01-30 20:11:47 +0000
commitc06ded74b2034f632ca7f2f0319436e9a01ec898 (patch)
tree54d8ca8d4d27b2a1f8fa9e4fd7e6f75329dee122
parentbb25289b0f18bf87810164f5e76cfaffa75286d9 (diff)
downloaddhcpcd-c06ded74b2034f632ca7f2f0319436e9a01ec898.tar.xz
Stop trunctating netmask sockaddr
-rw-r--r--if-bsd.c18
1 files changed, 3 insertions, 15 deletions
diff --git a/if-bsd.c b/if-bsd.c
index 420715e7..65a761d9 100644
--- a/if-bsd.c
+++ b/if-bsd.c
@@ -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);