[PATCH odhcpd 2/2] router: always check ra_lifetime

Hans Dedecker dedeckeh at gmail.com
Thu Feb 16 12:27:41 PST 2023


On Mon, Feb 13, 2023 at 9:18 PM <stijn at linux-ipv6.be> wrote:
>
> We currently only check ra_default when an interface has valid
> addresses. This results in ra_default being ignored in case we have an
> interface with only link-local addresses. This effectively breaks the
> use of value 2 for the ra_default parameter.
>
> Fix this by always checking ra_lifetime, regardless of the interface
> having public addresses or not.
>
> Fixes: #11930
> Fixes: 83e14f455817 ("router: advertise removed addresses as invalid in 3 consecutive RAs")
> Signed-off-by: Stijn Tintel <stijn at linux-ipv6.be>
Acked-by: Hans Dedecker <dedeckeh at gmail.com>
> ---
>  src/router.c | 19 ++++++++++++-------
>  1 file changed, 12 insertions(+), 7 deletions(-)
>
> diff --git a/src/router.c b/src/router.c
> index 1c11849..21674f6 100644
> --- a/src/router.c
> +++ b/src/router.c
> @@ -488,6 +488,14 @@ static int send_router_advert(struct interface *iface, const struct in6_addr *fr
>         valid_addr_cnt = (iface->timer_rs.cb /* if not shutdown */ ? iface->addr6_len : 0);
>         invalid_addr_cnt = iface->invalid_addr6_len;
>
> +       // check ra_default
> +       if (iface->default_router) {
> +               default_route = true;
> +
> +               if (iface->default_router > 1)
> +                       valid_prefix = true;
> +       }
> +
>         if (valid_addr_cnt + invalid_addr_cnt) {
>                 addrs = alloca(sizeof(*addrs) * (valid_addr_cnt + invalid_addr_cnt));
>
> @@ -495,13 +503,10 @@ static int send_router_advert(struct interface *iface, const struct in6_addr *fr
>                         memcpy(addrs, iface->addr6, sizeof(*addrs) * valid_addr_cnt);
>
>                         /* Check default route */
> -                       if (iface->default_router) {
> -                               default_route = true;
> -
> -                               if (iface->default_router > 1)
> -                                       valid_prefix = true;
> -                       } else if (parse_routes(addrs, valid_addr_cnt))
> -                               default_route = true;
> +                       if (!default_route) {
> +                               if (parse_routes(addrs, valid_addr_cnt))
> +                                       default_route = true;
Small remark merge both if statements into one if statement
> +                       }
>                 }
>
>                 if (invalid_addr_cnt) {
> --
> 2.39.1
>



More information about the openwrt-devel mailing list