From nobody@FreeBSD.org  Sat Feb 27 11:45:35 2010
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 67EDF1065670
	for <freebsd-gnats-submit@FreeBSD.org>; Sat, 27 Feb 2010 11:45:35 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21])
	by mx1.freebsd.org (Postfix) with ESMTP id 5565A8FC18
	for <freebsd-gnats-submit@FreeBSD.org>; Sat, 27 Feb 2010 11:45:35 +0000 (UTC)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.14.3/8.14.3) with ESMTP id o1RBjZei027541
	for <freebsd-gnats-submit@FreeBSD.org>; Sat, 27 Feb 2010 11:45:35 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.14.3/8.14.3/Submit) id o1RBjZ21027540;
	Sat, 27 Feb 2010 11:45:35 GMT
	(envelope-from nobody)
Message-Id: <201002271145.o1RBjZ21027540@www.freebsd.org>
Date: Sat, 27 Feb 2010 11:45:35 GMT
From: Tatsuki Makino <tatsuki_makino@hotmail.com>
To: freebsd-gnats-submit@FreeBSD.org
Subject: The rtadvd cannot avoid the prefix that doesn't want to advertise.
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         144343
>Category:       bin
>Synopsis:       The rtadvd cannot avoid the prefix that doesn't want to advertise.
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    hrs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Sat Feb 27 11:50:01 UTC 2010
>Closed-Date:    
>Last-Modified:  Tue Feb  7 14:20:08 UTC 2012
>Originator:     Tatsuki Makino
>Release:        FreeBSD 6.4-RELEASE-p9 i386
>Organization:
>Environment:
FreeBSD T0.test 6.4-RELEASE-p9 FreeBSD 6.4-RELEASE-p9 #0: Thu Jan  7 11:28:17 GMT 2010     root@T0.test:/usr/obj/usr/src/sys/GENERIC  i386
>Description:
When one network interface has 2 prefixes or more, all prefixes are advertised. I don't hope for it.
When choice prefixes to advertise by configuration file, it is limited only to static prefixes. I want also to advertise dynamic prefix.
>How-To-Repeat:
-- Host T0:

 /etc/rc.conf (snipped)
 ipv6_gateway_enable="YES"
 rtadvd_enable="YES"
 rtadvd_interfaces="rl0"

 rl0 has these addresses as follows
 inet6 2001:db8:0:0::0 prefixlen 64 # fixed
 inet6 2001:db8:0:1:: prefixlen 64 # add or remove dynamically
 inet6 2001:db8:0:2:: prefixlen 64 # add or remove dynamically
 inet6 2001:db8:0:3:: prefixlen 64 # add or remove dynamically
 (snip)
 inet6 2001:db8:0:ffff:: prefixlen 64 # add or remove dynamically

--

-- Host T2:

 /etc/sysctl.conf (snipped)
 net.inet6.ip6.use_tempaddr=1
 net.inet6.ip6.prefer_tempaddr=1

 rl0 has these addresses as follows
 ether XX:XX:XX:XX:XX:XX
 inet6 2001:db8:0:0::1 prefixlen 64 # fixed (A)
 inet6 2001:db8:0:0:XXXX:XXff:feXX:XXXX prefixlen 64 # or this (B)

--

rl0 on T0 and rl0 on T2 are connected via cable.
When T2 used inet6 address (A), T2 generate tempaddr. I don't want to tempaddr for 2001:db8:0:0/64.
When T2 used inet6 address (B), T2 log a lot of messages as "in6_ifadd: 2001:db8::XXXX:XXff:feXX:XXXX is already configured".
>Fix:
Patch it (written for 6.4-RELEASE).
Build and install.
Configure /etc/rtadvd.conf as follows

rl0:\
 :ignoreaddr="2001:db8::":ignoreprefixlen#8:

Start rtadvd.

I don't know it is useful for you...
If it is not useful for you, close this PR immediately.

Patch attached with submission follows:

diff -u -r -N -d /usr/src/usr.sbin/rtadvd/config.c usr.sbin/rtadvd/config.c
--- /usr/src/usr.sbin/rtadvd/config.c	2008-10-02 02:57:24.000000000 +0000
+++ usr.sbin/rtadvd/config.c	2010-02-27 08:06:36.000000000 +0000
@@ -123,6 +123,7 @@
 #ifdef ROUTEINFO
 	tmp->route.next = tmp->route.prev = &tmp->route;
 #endif
+	tmp->ignore_prefix.next = tmp->ignore_prefix.prev = &tmp->ignore_prefix;
 
 	/* check if we are allowed to forward packets (if not determined) */
 	if (forwarding < 0) {
@@ -381,6 +382,51 @@
 				now.tv_sec + pfx->preflifetime;
 		}
 	}
+	/* ignore prefix */
+	tmp->ignore_pfxs = 0;
+	for (i = -1; i < MAXPREFIX; i++) {
+		struct prefix *pfx;
+		char entbuf[256];
+
+		makeentry(entbuf, sizeof(entbuf), i, "ignoreaddr");
+		addr = (char *)agetstr(entbuf, &bp);
+		if (addr == NULL)
+			continue;
+
+		/* allocate memory to store prefix information */
+		if ((pfx = malloc(sizeof(struct prefix))) == NULL) {
+			syslog(LOG_ERR,
+			       "<%s> can't allocate enough memory",
+			       __func__);
+			exit(1);
+		}
+		memset(pfx, 0, sizeof(*pfx));
+
+		/* link into chain */
+		insque(pfx, &tmp->ignore_prefix);
+		tmp->ignore_pfxs++;
+		pfx->rainfo = tmp;
+
+		pfx->origin = PREFIX_FROM_CONFIG;
+
+		if (inet_pton(AF_INET6, addr, &pfx->prefix) != 1) {
+			syslog(LOG_ERR,
+			       "<%s> inet_pton failed for %s",
+			       __func__, addr);
+			exit(1);
+		}
+
+		makeentry(entbuf, sizeof(entbuf), i, "ignoreprefixlen");
+		MAYHAVE(val, entbuf, 64);
+		if (val < 0 || val > 128) {
+			syslog(LOG_ERR, "<%s> prefixlen (%ld) for %s "
+			       "on %s out of range",
+			       __func__, val, addr, intface);
+			exit(1);
+		}
+		pfx->prefixlen = (int)val;
+
+	}
 	if (tmp->pfxs == 0)
 		get_prefix(tmp);
 
@@ -641,6 +687,10 @@
 			/* ignore a duplicated prefix. */
 			continue;
 		}
+		if (find_ignore_prefix(rai, a, plen)) {
+			/* ignore a ignored prefix. */
+			continue;
+		}
 
 		/* allocate memory to store prefix info. */
 		if ((pp = malloc(sizeof(*pp))) == NULL) {
diff -u -r -N -d /usr/src/usr.sbin/rtadvd/rtadvd.c usr.sbin/rtadvd/rtadvd.c
--- /usr/src/usr.sbin/rtadvd/rtadvd.c	2008-10-02 02:57:24.000000000 +0000
+++ usr.sbin/rtadvd/rtadvd.c	2010-02-26 16:17:07.000000000 +0000
@@ -490,6 +490,18 @@
 				    __func__, plen);
 				break;
 			}
+			if (find_ignore_prefix(rai, addr, plen)) {
+				if (dflag > 1) {
+					syslog(LOG_DEBUG,
+					    "<%s> new prefix(%s/%d) "
+					    "ignored on %s",
+					    __func__,
+					    inet_ntop(AF_INET6, addr,
+					    (char *)addrbuf, INET6_ADDRSTRLEN),
+					    plen, rai->ifname);
+				}
+				break;
+			}
 			prefix = find_prefix(rai, addr, plen);
 			if (prefix) {
 				if (prefix->timer) {
@@ -1263,6 +1275,20 @@
 	return(0);
 }
 
+struct prefix *
+find_ignore_prefix(struct rainfo *rai, struct in6_addr *prefix, int plen)
+{
+	struct prefix *pp;
+
+	for (pp = rai->ignore_prefix.next; pp != &rai->ignore_prefix; pp = pp->next) {
+		if (prefix_match(prefix, plen, &pp->prefix, pp->prefixlen)) {
+			return pp;
+		}
+	}
+
+	return(NULL);
+}
+
 static int
 nd6_options(struct nd_opt_hdr *hdr, int limit,
 	    union nd_opts *ndopts, u_int32_t optflags)
diff -u -r -N -d /usr/src/usr.sbin/rtadvd/rtadvd.h usr.sbin/rtadvd/rtadvd.h
--- /usr/src/usr.sbin/rtadvd/rtadvd.h	2008-10-02 02:57:24.000000000 +0000
+++ usr.sbin/rtadvd/rtadvd.h	2010-02-26 16:11:21.000000000 +0000
@@ -149,6 +149,10 @@
 
 	/* info about soliciter */
 	struct soliciter *soliciter;	/* recent solication source */
+
+	/* prefixes not advertised */
+	struct prefix ignore_prefix;	/* AdvPrefixList(link head) */
+	int	ignore_pfxs;		/* number of prefixes */
 };
 
 struct rtadvd_timer *ra_timeout __P((void *));
@@ -157,5 +161,6 @@
 int prefix_match __P((struct in6_addr *, int, struct in6_addr *, int));
 struct rainfo *if_indextorainfo __P((int));
 struct prefix *find_prefix __P((struct rainfo *, struct in6_addr *, int));
+struct prefix *find_ignore_prefix __P((struct rainfo *, struct in6_addr *, int));
 
 extern struct in6_addr in6a_site_allrouters;


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->hrs 
Responsible-Changed-By: hrs 
Responsible-Changed-When: Sat Feb 27 12:35:29 UTC 2010 
Responsible-Changed-Why:  
I'll take this. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=144343 

From: Hiroki Sato <hrs@FreeBSD.org>
To: tatsuki_makino@hotmail.com
Cc: freebsd-gnats-submit@FreeBSD.org, hrs@FreeBSD.org
Subject: Re: bin/144343: The rtadvd cannot avoid the prefix that doesn't
 want to advertise.
Date: Sat, 27 Feb 2010 21:57:11 +0900 (JST)

 ----Security_Multipart(Sat_Feb_27_21_57_11_2010_461)--
 Content-Type: Text/Plain; charset=us-ascii
 Content-Transfer-Encoding: 7bit
 
 Tatsuki Makino <tatsuki_makino@hotmail.com> wrote
   in <201002271145.o1RBjZ21027540@www.freebsd.org>:
 
 ta>
 ta> >Number:         144343
 ta> >Category:       bin
 ta> >Synopsis:       The rtadvd cannot avoid the prefix that doesn't want to advertise.
 ta> >Confidential:   no
 ta> >Severity:       non-critical
 ta> >Priority:       low
 ta> >Responsible:    freebsd-bugs
 ta> >State:          open
 ta> >Quarter:
 ta> >Keywords:
 ta> >Date-Required:
 ta> >Class:          change-request
 ta> >Submitter-Id:   current-users
 ta> >Arrival-Date:   Sat Feb 27 11:50:01 UTC 2010
 ta> >Closed-Date:
 ta> >Last-Modified:
 ta> >Originator:     Tatsuki Makino
 ta> >Release:        FreeBSD 6.4-RELEASE-p9 i386
 ta> >Organization:
 ta> >Environment:
 ta> FreeBSD T0.test 6.4-RELEASE-p9 FreeBSD 6.4-RELEASE-p9 #0: Thu Jan  7 11:28:17 GMT 2010     root@T0.test:/usr/obj/usr/src/sys/GENERIC  i386
 ta> >Description:
 ta> When one network interface has 2 prefixes or more, all prefixes are advertised. I don't hope for it.
 ta> When choice prefixes to advertise by configuration file, it is limited only to static prefixes. I want also to advertise dynamic prefix.
 ta> >How-To-Repeat:
 ta> -- Host T0:
 ta>
 ta>  /etc/rc.conf (snipped)
 ta>  ipv6_gateway_enable="YES"
 ta>  rtadvd_enable="YES"
 ta>  rtadvd_interfaces="rl0"
 ta>
 ta>  rl0 has these addresses as follows
 ta>  inet6 2001:db8:0:0::0 prefixlen 64 # fixed
 ta>  inet6 2001:db8:0:1:: prefixlen 64 # add or remove dynamically
 ta>  inet6 2001:db8:0:2:: prefixlen 64 # add or remove dynamically
 ta>  inet6 2001:db8:0:3:: prefixlen 64 # add or remove dynamically
 ta>  (snip)
 ta>  inet6 2001:db8:0:ffff:: prefixlen 64 # add or remove dynamically
 ta>
 ta> --
 ta>
 ta> -- Host T2:
 ta>
 ta>  /etc/sysctl.conf (snipped)
 ta>  net.inet6.ip6.use_tempaddr=1
 ta>  net.inet6.ip6.prefer_tempaddr=1
 ta>
 ta>  rl0 has these addresses as follows
 ta>  ether XX:XX:XX:XX:XX:XX
 ta>  inet6 2001:db8:0:0::1 prefixlen 64 # fixed (A)
 ta>  inet6 2001:db8:0:0:XXXX:XXff:feXX:XXXX prefixlen 64 # or this (B)
 ta>
 ta> --
 ta>
 ta> rl0 on T0 and rl0 on T2 are connected via cable.
 ta> When T2 used inet6 address (A), T2 generate tempaddr. I don't want to tempaddr for 2001:db8:0:0/64.
 ta> When T2 used inet6 address (B), T2 log a lot of messages as "in6_ifadd: 2001:db8::XXXX:XXff:feXX:XXXX is already configured".
 ta> >Fix:
 ta> Patch it (written for 6.4-RELEASE).
 ta> Build and install.
 ta> Configure /etc/rtadvd.conf as follows
 ta>
 ta> rl0:\
 ta>  :ignoreaddr="2001:db8::":ignoreprefixlen#8:
 ta>
 ta> Start rtadvd.
 ta>
 ta> I don't know it is useful for you...
 ta> If it is not useful for you, close this PR immediately.
 
  I am still not sure what you think as an issue.  Especially the
  following are cryptic for me:
 
  a) Is Host T0 really a host?  Or you mean a router instead?
 
  b) Does Host T2 use SLAAC?  If so, is it necessary for you in your
     scenario for some reason?
 
  c) How do you control which address is used on T2?  ip6addrctl?
 
  d) If it is correct that you do not want communication with
     2001:db8:: from T2 by using a tempaddr generated within
     2001:db8::/64 subnet as the src addr, what case do you want the
     tempaddr in?
 
 -- Hiroki
 
 ----Security_Multipart(Sat_Feb_27_21_57_11_2010_461)--
 Content-Type: application/pgp-signature
 Content-Transfer-Encoding: 7bit
 
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.9 (FreeBSD)
 
 iEYEABECAAYFAkuJFqcACgkQTyzT2CeTzy25TgCgoCrWJw+zav7F5LEGoikxJKwI
 30kAnRmrcB6G1T2CGAmYS5QZaKFY7x5A
 =zvO0
 -----END PGP SIGNATURE-----
 
 ----Security_Multipart(Sat_Feb_27_21_57_11_2010_461)----

From: "Tatsuki Makino" <tatsuki_makino@hotmail.com>
To: <bug-followup@FreeBSD.org>,
	<tatsuki_makino@hotmail.com>,
	<hrs@FreeBSD.org>
Cc:  
Subject: Re: bin/144343: The rtadvd cannot avoid the prefix that doesn't want to advertise.
Date: Sun, 28 Feb 2010 15:12:17 +0900

 I'm sorry. I mistook. I forgot some important points.
 
 T0 is working for routing. It has 2 network interfaces, ndis0 and rl0. ndis0
 is established 2001:db8:0::/48 at this time. rl0 has already been described.
 
 T2 uses fixed address 2001:db8:0:0::1 for source address when connecting to 
 T0.
 T2 uses generated tempaddr (prefix 2001:db8:0:1::/64 from RA) for source 
 address when outgoing the Internet via T0.
 It is achieved by the following prefix policy.
 Prefix    Prec    Label
 ::1/128    50    0
 ::/0    40    1
 2002::/16    30    2
 2001:db8:0:0::/64    25    5
 ::/96    20    3
 ::ffff:0.0.0.0/96    10    4
 
 The goal is
 T2's address is acknowledged as 2001:db8:0:0::1 by T0.
 At the same time, T2's address is acknowledged as 
 2001:db8:0:1:XXXX:XXXX:XXXX:XXXX by www.FreeBSD.org.
 
 
 And correction:
 
 Wrong part is as follows.
 
 Configure /etc/rtadvd.conf as follows
 rl0:\
 :ignoreaddr="2001:db8::":ignoreprefixlen#8:
 
 Correction is as follows.
 
 Configure /etc/rtadvd.conf as follows
 rl0:\
 :ignoreaddr="2001:db8::":ignoreprefixlen#64:
 
 --  
 

From: "Tatsuki Makino" <tatsuki_makino@hotmail.com>
To: <bug-followup@FreeBSD.org>,
	<tatsuki_makino@hotmail.com>
Cc:  
Subject: Re: bin/144343: The rtadvd cannot avoid the prefix that doesn't want to advertise.
Date: Thu, 27 May 2010 23:56:20 +0900

 This is a multi-part message in MIME format.
 
 ------=_NextPart_000_0005_01CAFDF8.3427A2D0
 Content-Type: text/plain;
 	format=flowed;
 	charset="iso-2022-jp";
 	reply-type=original
 Content-Transfer-Encoding: 7bit
 
 This is a patch remade for 8-STABLE (svn rev. 208589). 
 ------=_NextPart_000_0005_01CAFDF8.3427A2D0
 Content-Type: text/plain;
 	format=flowed;
 	name="patch-8-rtadvd_ignore_prefix.diff.txt";
 	reply-type=original
 Content-Transfer-Encoding: quoted-printable
 Content-Disposition: attachment;
 	filename="patch-8-rtadvd_ignore_prefix.diff.txt"
 
 diff -u -r -N -d ../rtadvd.orig/config.c ./config.c=0A=
 --- ../rtadvd.orig/config.c	2007-11-07 10:53:41.000000000 +0000=0A=
 +++ ./config.c	2010-05-27 10:49:35.000000000 +0000=0A=
 @@ -123,6 +123,7 @@=0A=
  #ifdef ROUTEINFO=0A=
  	tmp->route.next =3D tmp->route.prev =3D &tmp->route;=0A=
  #endif=0A=
 +	tmp->ignore_prefix.next =3D tmp->ignore_prefix.prev =3D =
 &tmp->ignore_prefix;=0A=
  =0A=
  	/* check if we are allowed to forward packets (if not determined) */=0A=
  	if (forwarding < 0) {=0A=
 @@ -381,6 +382,51 @@=0A=
  				now.tv_sec + pfx->preflifetime;=0A=
  		}=0A=
  	}=0A=
 +	/* ignore prefix */=0A=
 +	tmp->ignore_pfxs =3D 0;=0A=
 +	for (i =3D -1; i < MAXPREFIX; i++) {=0A=
 +		struct prefix *pfx;=0A=
 +		char entbuf[256];=0A=
 +=0A=
 +		makeentry(entbuf, sizeof(entbuf), i, "ignoreaddr");=0A=
 +		addr =3D (char *)agetstr(entbuf, &bp);=0A=
 +		if (addr =3D=3D NULL)=0A=
 +			continue;=0A=
 +=0A=
 +		/* allocate memory to store prefix information */=0A=
 +		if ((pfx =3D malloc(sizeof(struct prefix))) =3D=3D NULL) {=0A=
 +			syslog(LOG_ERR,=0A=
 +			       "<%s> can't allocate enough memory",=0A=
 +			       __func__);=0A=
 +			exit(1);=0A=
 +		}=0A=
 +		memset(pfx, 0, sizeof(*pfx));=0A=
 +=0A=
 +		/* link into chain */=0A=
 +		insque(pfx, &tmp->ignore_prefix);=0A=
 +		tmp->ignore_pfxs++;=0A=
 +		pfx->rainfo =3D tmp;=0A=
 +=0A=
 +		pfx->origin =3D PREFIX_FROM_CONFIG;=0A=
 +=0A=
 +		if (inet_pton(AF_INET6, addr, &pfx->prefix) !=3D 1) {=0A=
 +			syslog(LOG_ERR,=0A=
 +			       "<%s> inet_pton failed for %s",=0A=
 +			       __func__, addr);=0A=
 +			exit(1);=0A=
 +		}=0A=
 +=0A=
 +		makeentry(entbuf, sizeof(entbuf), i, "ignoreprefixlen");=0A=
 +		MAYHAVE(val, entbuf, 64);=0A=
 +		if (val < 0 || val > 128) {=0A=
 +			syslog(LOG_ERR, "<%s> prefixlen (%ld) for %s "=0A=
 +			       "on %s out of range",=0A=
 +			       __func__, val, addr, intface);=0A=
 +			exit(1);=0A=
 +		}=0A=
 +		pfx->prefixlen =3D (int)val;=0A=
 +=0A=
 +	}=0A=
  	if (tmp->pfxs =3D=3D 0)=0A=
  		get_prefix(tmp);=0A=
  =0A=
 @@ -641,6 +687,10 @@=0A=
  			/* ignore a duplicated prefix. */=0A=
  			continue;=0A=
  		}=0A=
 +		if (find_ignore_prefix(rai, a, plen)) {=0A=
 +			/* ignore a ignored prefix. */=0A=
 +			continue;=0A=
 +		}=0A=
  =0A=
  		/* allocate memory to store prefix info. */=0A=
  		if ((pp =3D malloc(sizeof(*pp))) =3D=3D NULL) {=0A=
 diff -u -r -N -d ../rtadvd.orig/rtadvd.c ./rtadvd.c=0A=
 --- ../rtadvd.orig/rtadvd.c	2008-07-26 15:39:32.261268000 +0000=0A=
 +++ ./rtadvd.c	2010-05-27 10:49:35.000000000 +0000=0A=
 @@ -489,6 +489,18 @@=0A=
  				    __func__, plen);=0A=
  				break;=0A=
  			}=0A=
 +			if (find_ignore_prefix(rai, addr, plen)) {=0A=
 +				if (dflag > 1) {=0A=
 +					syslog(LOG_DEBUG,=0A=
 +					    "<%s> new prefix(%s/%d) "=0A=
 +					    "ignored on %s",=0A=
 +					    __func__,=0A=
 +					    inet_ntop(AF_INET6, addr,=0A=
 +					    (char *)addrbuf, INET6_ADDRSTRLEN),=0A=
 +					    plen, rai->ifname);=0A=
 +				}=0A=
 +				break;=0A=
 +			}=0A=
  			prefix =3D find_prefix(rai, addr, plen);=0A=
  			if (prefix) {=0A=
  				if (prefix->timer) {=0A=
 @@ -1262,6 +1274,20 @@=0A=
  	return(0);=0A=
  }=0A=
  =0A=
 +struct prefix *=0A=
 +find_ignore_prefix(struct rainfo *rai, struct in6_addr *prefix, int =
 plen)=0A=
 +{=0A=
 +	struct prefix *pp;=0A=
 +=0A=
 +	for (pp =3D rai->ignore_prefix.next; pp !=3D &rai->ignore_prefix; pp =
 =3D pp->next) {=0A=
 +		if (prefix_match(prefix, plen, &pp->prefix, pp->prefixlen)) {=0A=
 +			return pp;=0A=
 +		}=0A=
 +	}=0A=
 +=0A=
 +	return(NULL);=0A=
 +}=0A=
 +=0A=
  static int=0A=
  nd6_options(struct nd_opt_hdr *hdr, int limit,=0A=
  	    union nd_opts *ndopts, u_int32_t optflags)=0A=
 diff -u -r -N -d ../rtadvd.orig/rtadvd.h ./rtadvd.h=0A=
 --- ../rtadvd.orig/rtadvd.h	2007-11-07 10:53:41.000000000 +0000=0A=
 +++ ./rtadvd.h	2010-05-27 10:49:35.000000000 +0000=0A=
 @@ -149,6 +149,10 @@=0A=
  =0A=
  	/* info about soliciter */=0A=
  	struct soliciter *soliciter;	/* recent solication source */=0A=
 +=0A=
 +	/* prefixes not advertised */=0A=
 +	struct prefix ignore_prefix;	/* AdvPrefixList(link head) */=0A=
 +	int	ignore_pfxs;		/* number of prefixes */=0A=
  };=0A=
  =0A=
  struct rtadvd_timer *ra_timeout(void *);=0A=
 @@ -157,5 +161,6 @@=0A=
  int prefix_match(struct in6_addr *, int, struct in6_addr *, int);=0A=
  struct rainfo *if_indextorainfo(int);=0A=
  struct prefix *find_prefix(struct rainfo *, struct in6_addr *, int);=0A=
 +struct prefix *find_ignore_prefix(struct rainfo *, struct in6_addr *, =
 int);=0A=
  =0A=
  extern struct in6_addr in6a_site_allrouters;=0A=
 
 ------=_NextPart_000_0005_01CAFDF8.3427A2D0--
 

From: "Tatsuki Makino" <tatsuki_makino@hotmail.com>
To: <bug-followup@FreeBSD.org>,
	<tatsuki_makino@hotmail.com>
Cc:  
Subject: Re: bin/144343: The rtadvd cannot avoid the prefix that doesn&#39;t want to advertise.
Date: Tue, 7 Feb 2012 23:12:34 +0900

 This is a multi-part message in MIME format.
 
 ------=_NextPart_000_0005_01CCE5ED.F98EFFD0
 Content-Type: text/plain;
 	format=flowed;
 	charset="iso-2022-jp";
 	reply-type=original
 Content-Transfer-Encoding: 7bit
 
 These are patches that can apply to 8.2-STABLE (patch-8-...) and 9.0-STABLE 
 (patch-9-...).
 patch-9 is also applicable to 
 http://svn.freebsd.org/base/head/usr.sbin/rtadvd Revision 230465.
 
 These patches has been changed parts of below since my first report.
 * Stopped the diversion of struct prefix.
 * ignoreplen capability substituted for ignoreprefixlen.
 
 Configure file included with this archive is example.
 If it load,
 # ifconfig rl0 inet6 2001:db8:0:0:: prefixlen 64 alias # this prefix is not 
 advertised.
 # ifconfig rl0 inet6 2001:db8:0:1:: prefixlen 64 alias # this prefix is not 
 advertised.
 # ifconfig rl0 inet6 2001:db8:0:2:: prefixlen 64 alias # this prefix is 
 advertised.
 It can control prefix to advertise without editing. 
 
 ------=_NextPart_000_0005_01CCE5ED.F98EFFD0
 Content-Type: application/octet-stream;
 	name="rtadvd.shar.xz"
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment;
 	filename="rtadvd.shar.xz"
 
 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
 
 ------=_NextPart_000_0005_01CCE5ED.F98EFFD0--
 
>Unformatted:
