[radvd-devel-l] RemoveRoute option
Reuben Hawkins
reubenhwk at gmail.com
Mon Mar 21 10:21:39 EDT 2011
On Sun, Mar 20, 2011 at 11:17 PM, Mark Smith <
radvd at 02a76c927861ca7413a122f2a73a0d37.nosense.org> wrote:
> Hi,
>
> Following up from the DeprecatePrefix option, here is the equivalent
> for Route Information Options. Here's the manual page text -
>
> RemoveRoute on|off
>
> Upon shutdown, announce this route with a zero second
> lifetime. This should cause the route to be immediately
> removed from the receiving end-nodes' route table.
>
> Default: on
>
>
> It defaults to on as RFC4191 says the following in "4. Router
> Configuration" -
>
> "
> When ceasing to be an advertising
> interface and sending Router Advertisements with a Router Lifetime of
> zero, the Router Advertisement SHOULD also set the Route Lifetime to
> zero in all Route Information Options"
>
>
> Patch against CVS revision 1.114. Attached as a file and shown below.
>
> Regards,
> Mark.
>
> diff --git a/defaults.h b/defaults.h
> index 0bf357b..d6fcdfe 100644
> --- a/defaults.h
> +++ b/defaults.h
> @@ -62,6 +62,7 @@
> #define DFLT_AdvRouteLifetime(iface) (3 * (iface)->MaxRtrAdvInterval)
>
> #define DFLT_AdvRoutePreference 0 /* medium*/
> +#define DFLT_RemoveRouteFlag 1
>
> /* RDNSS */
> #define DFLT_AdvRDNSSLifetime(iface)
> (iface)->MaxRtrAdvInterval
> diff --git a/gram.y b/gram.y
> index 2d13800..13a8887 100644
> --- a/gram.y
> +++ b/gram.y
> @@ -111,6 +111,7 @@ static struct in6_addr get_prefix6(struct in6_addr
> const *addr, struct in6_addr
>
> %token T_AdvRoutePreference
> %token T_AdvRouteLifetime
> +%token T_RemoveRoute
>
> %token T_AdvRDNSSPreference
> %token T_AdvRDNSSOpenFlag
> @@ -704,6 +705,10 @@ routeparms : T_AdvRoutePreference SIGNEDNUMBER ';'
> {
> route->AdvRouteLifetime = $2;
> }
> + | T_RemoveRoute SWITCH ';'
> + {
> + route->RemoveRouteFlag = $2;
> + }
> ;
>
> rdnssdef : rdnsshead '{' optional_rdnssplist '}' ';'
> diff --git a/interface.c b/interface.c
> index 072f548..d7c0258 100644
> --- a/interface.c
> +++ b/interface.c
> @@ -69,6 +69,7 @@ route_init_defaults(struct AdvRoute *route, struct
> Interface *iface)
>
> route->AdvRouteLifetime = DFLT_AdvRouteLifetime(iface);
> route->AdvRoutePreference = DFLT_AdvRoutePreference;
> + route->RemoveRouteFlag = DFLT_RemoveRouteFlag;
> }
>
> void
> diff --git a/radvd.conf.5.man b/radvd.conf.5.man
> index dcc4314..acd26ae 100644
> --- a/radvd.conf.5.man
> +++ b/radvd.conf.5.man
> @@ -495,6 +495,13 @@ The preference associated with the default router, as
> either "low",
>
> Default: medium
>
> +.TP
> +.BR RemoveRoute " " on | off
> +
> +Upon shutdown, announce this route with a zero second lifetime. This
> should cause the route to be immediately removed from the receiving
> end-nodes' route table.
> +
> +Default: on
> +
> .SH RDNSS SPECIFIC OPTIONS
>
> .TP
> diff --git a/radvd.h b/radvd.h
> index 3b8b0e5..cdd679f 100644
> --- a/radvd.h
> +++ b/radvd.h
> @@ -126,6 +126,7 @@ struct AdvRoute {
>
> int AdvRoutePreference;
> uint32_t AdvRouteLifetime;
> + int RemoveRouteFlag;
>
> struct AdvRoute *next;
> };
> diff --git a/scanner.l b/scanner.l
> index b6ca361..01ea6d8 100644
> --- a/scanner.l
> +++ b/scanner.l
> @@ -85,6 +85,7 @@ HomeAgentLifetime { return T_HomeAgentLifetime; }
>
> AdvRoutePreference { return T_AdvRoutePreference; }
> AdvRouteLifetime { return T_AdvRouteLifetime; }
> +RemoveRoute { return T_RemoveRoute; }
>
> AdvRDNSSPreference { return T_AdvRDNSSPreference; }
> AdvRDNSSOpen { return T_AdvRDNSSOpenFlag; }
> diff --git a/send.c b/send.c
> index cd8ef9f..46a9c92 100644
> --- a/send.c
> +++ b/send.c
> @@ -234,7 +234,11 @@ send_ra(struct Interface *iface, struct in6_addr
> *dest)
>
> rinfo->nd_opt_ri_flags_reserved =
> (route->AdvRoutePreference << ND_OPT_RI_PRF_SHIFT) &
> ND_OPT_RI_PRF_MASK;
> - rinfo->nd_opt_ri_lifetime =
> htonl(route->AdvRouteLifetime);
> + if (iface->cease_adv && route->RemoveRouteFlag) {
> + rinfo->nd_opt_ri_lifetime = 0;
> + } else {
> + rinfo->nd_opt_ri_lifetime =
> htonl(route->AdvRouteLifetime);
> + }
>
> memcpy(&rinfo->nd_opt_ri_prefix, &route->Prefix,
> sizeof(struct in6_addr));
>
> --
> radvd-devel-l mailing list : radvd-devel-l at litech.org
> http://lists.litech.org/listinfo/radvd-devel-l
>
Hi Mark,
Glancing over it in my email, it looks good. For some reason, my gmail is
showing the patch inline. Can you send it again as a .patch file? The last
.patch file came in fine in gmail.
Thanks,
Reuben
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.litech.org/pipermail/radvd-devel-l/attachments/20110321/0a1c2412/attachment.html>
More information about the radvd-devel-l
mailing list