[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