changeset 2977:a7c2131d0b48 draft

Remove RTM_GET code as we now read all kernel routes before building our own.
author Roy Marples <roy@marples.name>
date Tue, 03 Mar 2015 17:38:35 +0000
parents fe20a975aa48
children 88b0e8255e5a
files if-bsd.c if.h ipv4.c ipv6.c
diffstat 4 files changed, 17 insertions(+), 39 deletions(-) [+]
line wrap: on
line diff
--- a/if-bsd.c	Tue Mar 03 17:27:25 2015 +0000
+++ b/if-bsd.c	Tue Mar 03 17:38:35 2015 +0000
@@ -538,7 +538,7 @@
 }
 
 int
-if_route(unsigned char cmd, const struct rt *rt, struct rt *srt)
+if_route(unsigned char cmd, const struct rt *rt)
 {
 	const struct dhcp_state *state;
 	union sockunion {
@@ -632,9 +632,8 @@
 		if (rtm.hdr.rtm_flags & RTF_STATIC)
 			rtm.hdr.rtm_flags |= RTF_GATEWAY;
 	}
-	if (((cmd == RTM_ADD || cmd == RTM_CHANGE) &&
-	    !(rtm.hdr.rtm_flags & RTF_GATEWAY)) ||
-	    cmd == RTM_GET)
+	if ((cmd == RTM_ADD || cmd == RTM_CHANGE) &&
+	    !(rtm.hdr.rtm_flags & RTF_GATEWAY))
 		rtm.hdr.rtm_addrs |= RTA_IFA | RTA_IFP;
 
 	ADDADDR(&rt->dest);
@@ -674,16 +673,6 @@
 
 	rtm.hdr.rtm_msglen = (unsigned short)(bp - (char *)&rtm);
 	retval = write(s, &rtm, rtm.hdr.rtm_msglen) == -1 ? -1 : 0;
-
-	if (cmd == RTM_GET && retval == 0) {
-		retval = read(s, &rtm, sizeof(rtm));
-		if (retval < (int)sizeof(struct rt_msghdr) ||
-		    retval < rtm.hdr.rtm_msglen)
-			retval = -1;
-		else
-			retval = if_copyrt(rt->iface->ctx, srt, &rtm.hdr);
-	}
-
 	close(s);
 	return retval;
 }
@@ -905,7 +894,7 @@
 }
 
 int
-if_route6(unsigned char cmd, const struct rt6 *rt, struct rt6 *srt)
+if_route6(unsigned char cmd, const struct rt6 *rt)
 {
 	union sockunion {
 		struct sockaddr sa;
@@ -964,8 +953,7 @@
 
 	if (cmd == RTM_ADD)
 		rtm.hdr.rtm_addrs |= RTA_GATEWAY;
-	if (cmd == RTM_GET ||
-	    (cmd == RTM_ADD && !(rtm.hdr.rtm_flags & RTF_REJECT)))
+	if (cmd == RTM_ADD && !(rtm.hdr.rtm_flags & RTF_REJECT))
 		rtm.hdr.rtm_addrs |= RTA_IFP | RTA_IFA;
 
 	ADDADDR(&rt->dest);
@@ -1010,16 +998,6 @@
 
 	rtm.hdr.rtm_msglen = (unsigned short)(bp - (char *)&rtm);
 	retval = write(s, &rtm, rtm.hdr.rtm_msglen) == -1 ? -1 : 0;
-
-	if (cmd == RTM_GET && retval == 0) {
-		retval = read(s, &rtm, sizeof(rtm));
-		if (retval < (int)sizeof(struct rt_msghdr) ||
-		    retval < rtm.hdr.rtm_msglen)
-			retval = -1;
-		else
-			retval = if_copyrt6(rt->iface->ctx, srt, &rtm.hdr);
-	}
-
 	close(s);
 	return retval;
 }
--- a/if.h	Tue Mar 03 17:27:25 2015 +0000
+++ b/if.h	Tue Mar 03 17:38:35 2015 +0000
@@ -124,7 +124,7 @@
 #define if_deladdress(ifp, addr, net)		\
 	if_address(ifp, addr, net, NULL, -1)
 
-int if_route(unsigned char, const struct rt *rt, struct rt *);
+int if_route(unsigned char, const struct rt *rt);
 int if_initrt(struct interface *);
 #endif
 
@@ -145,7 +145,7 @@
 int if_addrflags6(const struct in6_addr *, const struct interface *);
 int if_getlifetime6(struct ipv6_addr *);
 
-int if_route6(unsigned char, const struct rt6 *rt, struct rt6 *);
+int if_route6(unsigned char, const struct rt6 *rt);
 int if_initrt6(struct interface *);
 #else
 #define if_checkipv6(a, b, c) (-1)
--- a/ipv4.c	Tue Mar 03 17:27:25 2015 +0000
+++ b/ipv4.c	Tue Mar 03 17:38:35 2015 +0000
@@ -436,17 +436,17 @@
 #ifdef HAVE_ROUTE_METRIC
 	/* With route metrics, we can safely add the new route before
 	 * deleting the old route. */
-	if ((retval = if_route(RTM_ADD, nrt, NULL))  == -1)
+	if ((retval = if_route(RTM_ADD, nrt))  == -1)
 		syslog(LOG_ERR, "if_route (ADD): %m");
-	if (ort && if_route(RTM_DELETE, ort, NULL) == -1 && errno != ESRCH)
+	if (ort && if_route(RTM_DELETE, ort) == -1 && errno != ESRCH)
 		syslog(LOG_ERR, "if_route (DEL): %m");
 	return retval;
 #else
 	/* No route metrics, we need to delete the old route before
 	 * adding the new one. */
-	if (ort && if_route(RTM_DELETE, ort, NULL) == -1 && errno != ESRCH)
+	if (ort && if_route(RTM_DELETE, ort) == -1 && errno != ESRCH)
 		syslog(LOG_ERR, "if_route (DEL): %m");
-	if (if_route(RTM_ADD, nrt, NULL) == 0)
+	if (if_route(RTM_ADD, nrt) == 0)
 		return 0;
 	syslog(LOG_ERR, "if_route (ADD): %m");
 	return -1;
@@ -459,7 +459,7 @@
 	int retval;
 
 	desc_route("deleting", rt);
-	retval = if_route(RTM_DELETE, rt, NULL);
+	retval = if_route(RTM_DELETE, rt);
 	if (retval != 0 && errno != ENOENT && errno != ESRCH)
 		syslog(LOG_ERR,"%s: if_delroute: %m", rt->iface->name);
 	return retval;
--- a/ipv6.c	Tue Mar 03 17:27:25 2015 +0000
+++ b/ipv6.c	Tue Mar 03 17:38:35 2015 +0000
@@ -1829,18 +1829,18 @@
 #ifdef HAVE_ROUTE_METRIC
 	/* With route metrics, we can safely add the new route before
 	 * deleting the old route. */
-	if ((retval = if_route6(RTM_ADD, nrt, NULL)) == -1)
+	if ((retval = if_route6(RTM_ADD, nrt)) == -1)
 		syslog(LOG_ERR, "if_route6 (ADD): %m");
-	if (ort && if_route6(RTM_DELETE, ort, NULL) == -1 &&
+	if (ort && if_route6(RTM_DELETE, ort) == -1 &&
 	    errno != ESRCH)
 		syslog(LOG_ERR, "if_route6 (DEL): %m");
 	return retval;
 #else
 	/* No route metrics, we need to delete the old route before
 	 * adding the new one. */
-	if (ort && if_route6(RTM_DELETE, ort, NULL) == -1 && errno != ESRCH)
+	if (ort && if_route6(RTM_DELETE, ort) == -1 && errno != ESRCH)
 		syslog(LOG_ERR, "if_route6: %m");
-	if (if_route6(RTM_ADD, nrt, NULL) == 0)
+	if (if_route6(RTM_ADD, nrt) == 0)
 		return 0;
 	syslog(LOG_ERR, "if_route6 (ADD): %m");
 	return -1;
@@ -1853,7 +1853,7 @@
 	int retval;
 
 	desc_route("deleting", rt);
-	retval = if_route6(RTM_DELETE, rt, NULL);
+	retval = if_route6(RTM_DELETE, rt);
 	if (retval != 0 && errno != ENOENT && errno != ESRCH)
 		syslog(LOG_ERR,"%s: if_delroute6: %m", rt->iface->name);
 	return retval;