aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/linux-cp
diff options
context:
space:
mode:
authorVladimir Ratnikov <vratnikov@netgate.com>2022-03-02 10:31:42 +0000
committerMatthew Smith <mgsmith@netgate.com>2022-03-02 22:24:17 +0000
commit53f8a272a63444b61b700690a2f438fa5066f37b (patch)
tree3bed8ae54f1e98d7347b4a8cbce8d75816b710ad /src/plugins/linux-cp
parentfe6d8a37062a28f28ee63c3e9177d18c10ed96e1 (diff)
linux-cp: lcp fib fixes
Some possible side effects for multicast routes appears to be in lcp_router_table_add_or_lock. so ff00/8 route will be processed for ospf purposes the right way Ignore IPv6 kernel routes Skip adding auto routes into FIB Type: fix Signed-off-by: Vladimir Ratnikov <vratnikov@netgate.com> Change-Id: I35f73d629a7fffca7f7d4547adc2549b72c2048f
Diffstat (limited to 'src/plugins/linux-cp')
-rw-r--r--src/plugins/linux-cp/lcp_router.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/plugins/linux-cp/lcp_router.c b/src/plugins/linux-cp/lcp_router.c
index 598fb13e979..c70acfff1be 100644
--- a/src/plugins/linux-cp/lcp_router.c
+++ b/src/plugins/linux-cp/lcp_router.c
@@ -941,10 +941,12 @@ lcp_router_route_add (struct rtnl_route *rr)
lcp_router_route_mk_prefix (rr, &pfx);
entry_flags = lcp_router_route_mk_entry_flags (rtype, table_id, rproto);
- /* link local IPv6 */
- if (FIB_PROTOCOL_IP6 == pfx.fp_proto &&
- (ip6_address_is_multicast (&pfx.fp_addr.ip6) ||
- ip6_address_is_link_local_unicast (&pfx.fp_addr.ip6)))
+ nlt = lcp_router_table_add_or_lock (table_id, pfx.fp_proto);
+ /* Skip any kernel routes and IPv6 LL or multicast routes */
+ if (rproto == RTPROT_KERNEL ||
+ (FIB_PROTOCOL_IP6 == pfx.fp_proto &&
+ (ip6_address_is_multicast (&pfx.fp_addr.ip6) ||
+ ip6_address_is_link_local_unicast (&pfx.fp_addr.ip6))))
{
LCP_ROUTER_DBG ("route skip: %d:%U %U", rtnl_route_get_table (rr),
format_fib_prefix, &pfx, format_fib_entry_flags,
@@ -968,7 +970,6 @@ lcp_router_route_add (struct rtnl_route *rr)
if (0 != vec_len (np.paths))
{
- nlt = lcp_router_table_add_or_lock (table_id, pfx.fp_proto);
if (rtype == RTN_MULTICAST)
{
/* it's not clear to me how linux expresses the RPF paramters