mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-27 10:04:18 +00:00
bgpd, tests: fix route leaking from the default l3vrf
Leaked route from the l3VRF are installed with the loopback as the nexthop interface instead of the real interface. > B>* 10.0.0.0/30 [20/0] is directly connected, lo (vrf default), weight 1, 00:21:01 Routing of packet from a L3VRF to the default L3VRF destined to a leak prefix fails because of the default routing rules on Linux. > 0: from all lookup local > 1000: from all lookup [l3mdev-table] > 32766: from all lookup main > 32767: from all lookup default When the packet is received in the loopback interface, the local rules are checked without match, then the l3mdev-table says to route to the loopback. A routing loop occurs (TTL is decreasing). > 12:26:27.928748 ens37 In IP (tos 0x0, ttl 64, id 26402, offset 0, flags [DF], proto ICMP (1), length 84) > 10.0.0.2 > 10.0.1.2: ICMP echo request, id 47463, seq 1, length 64 > 12:26:27.928784 red Out IP (tos 0x0, ttl 63, id 26402, offset 0, flags [DF], proto ICMP (1), length 84) > 10.0.0.2 > 10.0.1.2: ICMP echo request, id 47463, seq 1, length 64 > 12:26:27.928797 ens38 Out IP (tos 0x0, ttl 63, id 26402, offset 0, flags [DF], proto ICMP (1), length 84) > 10.0.0.2 > 10.0.1.2: ICMP echo request, id 47463, seq 1, length 64 Do not set the lo interface as a nexthop interface. Keep the real interface where possible. Fixes:db7cf73a33
("bgpd: fix interface on leaks from redistribute connected") Fixes:067fbab4e4
("bgpd: fix interface on leaks from network statement") Fixes:8a02d9fe1e
("bgpd: Set nh ifindex to VRF's interface, not the real") Fixes: https://github.com/FRRouting/frr/issues/15909 Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
This commit is contained in:
parent
e3fceef597
commit
31fc89b230
@ -2240,8 +2240,9 @@ static void vpn_leak_to_vrf_update_onevrf(struct bgp *to_bgp, /* to */
|
|||||||
* Let the kernel to decide with double lookup the real next-hop
|
* Let the kernel to decide with double lookup the real next-hop
|
||||||
* interface when installing the route.
|
* interface when installing the route.
|
||||||
*/
|
*/
|
||||||
if (src_bgp || bpi_ultimate->sub_type == BGP_ROUTE_STATIC ||
|
if (src_vrf->vrf_id != VRF_DEFAULT &&
|
||||||
bpi_ultimate->sub_type == BGP_ROUTE_REDISTRIBUTE) {
|
(src_bgp || bpi_ultimate->sub_type == BGP_ROUTE_STATIC ||
|
||||||
|
bpi_ultimate->sub_type == BGP_ROUTE_REDISTRIBUTE)) {
|
||||||
ifp = if_get_vrf_loopback(src_vrf->vrf_id);
|
ifp = if_get_vrf_loopback(src_vrf->vrf_id);
|
||||||
if (ifp)
|
if (ifp)
|
||||||
static_attr.nh_ifindex = ifp->ifindex;
|
static_attr.nh_ifindex = ifp->ifindex;
|
||||||
|
@ -116,7 +116,7 @@ def test_vrf_route_leak_donna():
|
|||||||
"nexthops": [
|
"nexthops": [
|
||||||
{
|
{
|
||||||
"fib": True,
|
"fib": True,
|
||||||
"interfaceName": "lo",
|
"interfaceName": "dummy0",
|
||||||
"vrf": "default",
|
"vrf": "default",
|
||||||
"active": True,
|
"active": True,
|
||||||
},
|
},
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
VRF ray:
|
VRF ray:
|
||||||
B 10.0.1.0/24 [20/20] via 10.0.20.1, r2-eth1 (vrf default) inactive, weight 1, XX:XX:XX
|
B 10.0.1.0/24 [20/20] via 10.0.20.1, r2-eth1 (vrf default) inactive, weight 1, XX:XX:XX
|
||||||
B 10.0.2.0/24 [20/0] is directly connected, lo (vrf default) inactive, weight 1, XX:XX:XX
|
B 10.0.2.0/24 [20/0] is directly connected, r2-eth0 (vrf default) inactive, weight 1, XX:XX:XX
|
||||||
B>* 10.0.3.0/24 [20/20] via 10.0.20.1, r2-eth1 (vrf default), weight 1, XX:XX:XX
|
B>* 10.0.3.0/24 [20/20] via 10.0.20.1, r2-eth1 (vrf default), weight 1, XX:XX:XX
|
||||||
O>* 10.0.4.0/24 [110/20] via 10.0.40.4, r2-eth2, weight 1, XX:XX:XX
|
O>* 10.0.4.0/24 [110/20] via 10.0.40.4, r2-eth2, weight 1, XX:XX:XX
|
||||||
B 10.0.20.0/24 [20/0] is directly connected, lo (vrf default) inactive, weight 1, XX:XX:XX
|
B 10.0.20.0/24 [20/0] is directly connected, r2-eth1 (vrf default) inactive, weight 1, XX:XX:XX
|
||||||
B>* 10.0.30.0/24 [20/20] via 10.0.20.1, r2-eth1 (vrf default), weight 1, XX:XX:XX
|
B>* 10.0.30.0/24 [20/20] via 10.0.20.1, r2-eth1 (vrf default), weight 1, XX:XX:XX
|
||||||
O 10.0.40.0/24 [110/10] is directly connected, r2-eth2, weight 1, XX:XX:XX
|
O 10.0.40.0/24 [110/10] is directly connected, r2-eth2, weight 1, XX:XX:XX
|
||||||
C>* 10.0.40.0/24 is directly connected, r2-eth2, XX:XX:XX
|
C>* 10.0.40.0/24 is directly connected, r2-eth2, XX:XX:XX
|
||||||
|
Loading…
Reference in New Issue
Block a user