changeset 1642:4caee6e8e449 draft

Stop trunctating netmask sockaddr
author Roy Marples <roy@marples.name>
date Mon, 30 Jan 2012 20:11:47 +0000
parents 0b71c6eb1c25
children c317baa79482
files if-bsd.c
diffstat 1 files changed, 3 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/if-bsd.c	Mon Jan 30 16:59:48 2012 +0000
+++ b/if-bsd.c	Mon Jan 30 20:11:47 2012 +0000
@@ -195,7 +195,7 @@
 		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 @@
 	} 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);