[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