[OpenWrt-Devel] [PATCH] interface: add IPv6 addresses without IFA_F_NOPREFIXROUTE
Alin Năstac
alin.nastac at gmail.com
Mon Feb 3 10:29:55 EST 2020
On Wed, Dec 18, 2019 at 11:44 AM Alin Nastac <alin.nastac at gmail.com> wrote:
>
> When netifd manages the prefix route directly, it will remove it
> the moment prefix gets deprecated. This will make it impossible
> for the target to send ICMPv6 errors back to LAN devices still
> using the deprecated prefix, thus breaking the L-14 requirement
> of RFC 7084.
>
> Signed-off-by: Alin Nastac <alin.nastac at gmail.com>
> ---
> interface-ip.c | 18 +-----------------
> 1 file changed, 1 insertion(+), 17 deletions(-)
>
> diff --git a/interface-ip.c b/interface-ip.c
> index c159e09..0958fcb 100644
> --- a/interface-ip.c
> +++ b/interface-ip.c
> @@ -905,20 +905,14 @@ interface_set_prefix_address(struct device_prefix_assignment *assignment,
> struct device *l3_downlink = iface->l3_dev.dev;
>
> struct device_addr addr;
> - struct device_route route;
> memset(&addr, 0, sizeof(addr));
> - memset(&route, 0, sizeof(route));
>
> addr.addr.in6 = assignment->addr;
> addr.mask = assignment->length;
> - addr.flags = DEVADDR_INET6 | DEVADDR_OFFLINK;
> + addr.flags = DEVADDR_INET6;
> addr.preferred_until = prefix->preferred_until;
> addr.valid_until = prefix->valid_until;
>
> - route.flags = DEVADDR_INET6;
> - route.mask = addr.mask < 64 ? 64 : addr.mask;
> - route.addr = addr.addr;
> -
> if (!add && assignment->enabled) {
> time_t now = system_get_rtime();
>
> @@ -939,10 +933,6 @@ interface_set_prefix_address(struct device_prefix_assignment *assignment,
> addr.mask, 0, iface, "unreachable", true);
> }
>
> - clear_if_addr(&route.addr, route.mask);
> - interface_set_route_info(iface, &route);
> -
> - system_del_route(l3_downlink, &route);
> system_add_address(l3_downlink, &addr);
>
> assignment->addr = in6addr_any;
> @@ -955,7 +945,6 @@ interface_set_prefix_address(struct device_prefix_assignment *assignment,
> return;
>
> assignment->addr = addr.addr.in6;
> - route.addr = addr.addr;
> }
>
> if (system_add_address(l3_downlink, &addr))
> @@ -976,11 +965,6 @@ interface_set_prefix_address(struct device_prefix_assignment *assignment,
> }
> }
>
> - clear_if_addr(&route.addr, route.mask);
> - interface_set_route_info(iface, &route);
> -
> - system_add_route(l3_downlink, &route);
> -
> if (uplink && uplink->l3_dev.dev && !(l3_downlink->settings.flags & DEV_OPT_MTU6)) {
> int mtu = system_update_ipv6_mtu(uplink->l3_dev.dev, 0);
> int mtu_old = system_update_ipv6_mtu(l3_downlink, 0);
> --
> 2.7.4
>
This patch has been superseded by https://patchwork.ozlabs.org/patch/1232885/ .
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list