diff options
author | Alexander Chernavin <achernavin@netgate.com> | 2021-10-21 08:29:11 +0000 |
---|---|---|
committer | Matthew Smith <mgsmith@netgate.com> | 2022-03-04 15:58:42 +0000 |
commit | bc91e86674d446e024a957318d42a3bbd3280bf1 (patch) | |
tree | e38f274b50483096b8beab2a5605fa2de9d4c0d4 /src/plugins/linux-cp/lcp_router.c | |
parent | 81e74d8e22365166043de40666f324df0533ccef (diff) |
linux-cp: ignore neighbors if ip addr is multicast
Type: improvement
When dump of neighbors is requested, the replies will also include
neighbor entries for IPv6 multicast addresses:
GigabitEthernet0/8/0 S ff02::16 33:33:00:00:00:16
GigabitEthernet0/8/0 S ff02::1:ff76:7135 33:33:ff:76:71:35
GigabitEthernet0/8/0 S ff02::2 33:33:00:00:00:02
Such entries are not reported in netlink notification messages and
VPP is unlikely to use these.
With this change, ignore neighbor entries when the IP address is a
multicast address.
Signed-off-by: Alexander Chernavin <achernavin@netgate.com>
Change-Id: Ic712aa4904f1d559f31fd89ff4541268e2340f84
Diffstat (limited to 'src/plugins/linux-cp/lcp_router.c')
-rw-r--r-- | src/plugins/linux-cp/lcp_router.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/plugins/linux-cp/lcp_router.c b/src/plugins/linux-cp/lcp_router.c index 6392e2a16f4..7542aa06614 100644 --- a/src/plugins/linux-cp/lcp_router.c +++ b/src/plugins/linux-cp/lcp_router.c @@ -557,6 +557,14 @@ lcp_router_neigh_del (struct rtnl_neigh *rn) lcp_router_mk_addr (rtnl_neigh_get_dst (rn), &nh); + if (ip46_address_is_multicast (&ip_addr_46 (&nh))) + { + LCP_ROUTER_DBG ("ignore neighbor del: %U %U", format_ip_address, &nh, + format_vnet_sw_if_index_name, vnet_get_main (), + sw_if_index); + return; + } + rv = ip_neighbor_del (&nh, sw_if_index); if (rv) @@ -597,6 +605,15 @@ lcp_router_neigh_add (struct rtnl_neigh *rn) int state; lcp_router_mk_addr (rtnl_neigh_get_dst (rn), &nh); + + if (ip46_address_is_multicast (&ip_addr_46 (&nh))) + { + LCP_ROUTER_DBG ("ignore neighbor add: %U %U", format_ip_address, &nh, + format_vnet_sw_if_index_name, vnet_get_main (), + sw_if_index); + return; + } + ll = rtnl_neigh_get_lladdr (rn); state = rtnl_neigh_get_state (rn); |