Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 8 Mar 2010 13:12:35 +0000 (UTC)
From:      Hiroki Sato <hrs@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r204867 - user/hrs/ipv6/usr.sbin/route6d
Message-ID:  <201003081312.o28DCZdr001421@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: hrs
Date: Mon Mar  8 13:12:35 2010
New Revision: 204867
URL: http://svn.freebsd.org/changeset/base/204867

Log:
  - Handle routes which are not marked as Qflag again.
  - Ignore routes of !RTF_GATEWAY && !RTF_HOST && !RTF_STATIC.
  - Add sleep(1) between NET_RT_DUMP retries.

Modified:
  user/hrs/ipv6/usr.sbin/route6d/route6d.c

Modified: user/hrs/ipv6/usr.sbin/route6d/route6d.c
==============================================================================
--- user/hrs/ipv6/usr.sbin/route6d/route6d.c	Mon Mar  8 11:27:39 2010	(r204866)
+++ user/hrs/ipv6/usr.sbin/route6d/route6d.c	Mon Mar  8 13:12:35 2010	(r204867)
@@ -79,6 +79,7 @@ static const char _rcsid[] = "$KAME: rou
 #include "route6d.h"
 
 #define	MAXFILTER	40
+#define RT_DUMP_MAXRETRY	15
 
 #ifdef	DEBUG
 #define	INIT_INTERVAL6	6
@@ -2702,6 +2703,8 @@ krtread(again)
 	mib[4] = NET_RT_DUMP;	/* Dump the kernel routing table */
 	mib[5] = 0;		/* No flags */
 	do {
+		if (retry)
+			sleep(1);
 		retry++;
 		errmsg = NULL;
 		if (buf)
@@ -2718,7 +2721,7 @@ krtread(again)
 			errmsg = "sysctl NET_RT_DUMP";
 			continue;
 		}
-	} while (retry < 15 && errmsg != NULL);
+	} while (retry < RT_DUMP_MAXRETRY && errmsg != NULL);
 	if (errmsg) {
 		fatal("%s (with %d retries, msize=%lu)", errmsg, retry,
 		    (u_long)msize);
@@ -2760,16 +2763,8 @@ rt_entry(rtm, again)
 	if (rtm->rtm_flags & RTF_CLONED)
 		return;
 #endif
-	/* Ignore RTF_PROTO<num> mismached routes */
-	/*
-	 * XXX: can we know if it is a connected network route or not?
-	 *      RTF_WASCLONED was the flag for that, but we no longer
-	 *      use it.  Rely on Qflag instead here.
-	 */
-	if (Qflag && !(rtm->rtm_flags & Qflag))
-		return;
 	/* XXX: Ignore connected routes. */
-	if (!(rtm->rtm_flags & RTF_GATEWAY))
+	if (!(rtm->rtm_flags & (RTF_GATEWAY|RTF_HOST|RTF_STATIC)))
 		return;
 	/*
 	 * do not look at dynamic routes.
@@ -3006,6 +3001,7 @@ delroute(np, gw)
 	rtm->rtm_seq = ++seq;
 	rtm->rtm_pid = pid;
 	rtm->rtm_flags = RTF_UP | RTF_GATEWAY;
+	rtm->rtm_flags |= Qflag;
 	if (np->rip6_plen == sizeof(struct in6_addr) * 8)
 		rtm->rtm_flags |= RTF_HOST;
 	rtm->rtm_addrs = RTA_DST | RTA_GATEWAY | RTA_NETMASK;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201003081312.o28DCZdr001421>