svn commit: r204867 - user/hrs/ipv6/usr.sbin/route6d
Hiroki Sato
hrs at FreeBSD.org
Mon Mar 8 13:12:36 UTC 2010
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;
More information about the svn-src-user
mailing list