From d7115a046f3d491290391c0662b5f4f0302e9f57 Mon Sep 17 00:00:00 2001 From: Ivan Pepelnjak Date: Wed, 6 Aug 2025 08:29:35 +0200 Subject: [PATCH] Set 'rr_client' and 'next_hop_self' attributes on BGP neighbor data The BGP neighbor 'rr_client' and 'next_hop_self' attributes will make the configuration templates much cleaner as we'll avoid all the crazy logic that is repeated in every template. Note that the existing attributes are not changed, so there's no rush to migrate the templates to the new attributes. That can be done at any time we feel like cleaning them up. Also: refactor and cleanup the IBGP session generation logic to avoid duplicate code --- netsim/modules/bgp.py | 59 +++++++++---------- tests/topology/expected/6pe.yml | 2 + .../expected/addressing-ipv6-only.yml | 12 ++++ .../expected/addressing-ipv6-prefix.yml | 12 ++++ tests/topology/expected/bgp-anycast.yml | 2 + tests/topology/expected/bgp-autogroup.yml | 15 +++++ tests/topology/expected/bgp-community.yml | 6 ++ tests/topology/expected/bgp-ibgp.yml | 14 +++++ tests/topology/expected/bgp-members.yml | 14 +++++ tests/topology/expected/bgp-sessions.yml | 2 + tests/topology/expected/bgp.yml | 14 +++++ tests/topology/expected/components.yml | 26 ++++++++ tests/topology/expected/ebgp.utils.yml | 3 + .../expected/evpn-asymmetric-irb-ospf.yml | 2 + tests/topology/expected/evpn-hub-spoke.yml | 2 + tests/topology/expected/evpn-l3vni-only.yml | 2 + tests/topology/expected/evpn-vxlan.yml | 6 ++ tests/topology/expected/fabric-ebgp.yml | 2 + tests/topology/expected/groups-node-data.yml | 12 ++++ tests/topology/expected/module-reorder.yml | 6 ++ tests/topology/expected/mpls-vpn-simple.yml | 2 + tests/topology/expected/mpls.yml | 6 ++ tests/topology/expected/null-vrfs.yml | 2 + tests/topology/expected/vrf-igp.yml | 2 + tests/topology/expected/vrf-links.yml | 6 ++ .../topology/expected/vrf-routing-blocks.yml | 2 + 26 files changed, 202 insertions(+), 31 deletions(-) diff --git a/netsim/modules/bgp.py b/netsim/modules/bgp.py index 7d5c8bce77..9c56117ebd 100644 --- a/netsim/modules/bgp.py +++ b/netsim/modules/bgp.py @@ -178,38 +178,32 @@ def get_remote_ibgp_endpoint(n: Box) -> Box: * Other nodes need IBGP sessions with all RRs in the same AS """ def build_ibgp_sessions(node: Box, sessions: Box, topology: Box) -> None: - rrlist = find_bgp_rr(node.bgp.get("as"),topology) - has_ibgp = False # Assume we have no IBGP sessions (yet) - - # If we don't have route reflectors, or if the current node is a route - # reflector, we need BGP sessions to all other nodes in the same AS - if not(rrlist) or node.bgp.get("rr",None): - for name,n in topology.nodes.items(): - if "bgp" in n: - if n.bgp.get("as") == node.bgp.get("as") and n.name != node.name: - n_intf = get_remote_ibgp_endpoint(n) - neighbor_data = bgp_neighbor(n,n_intf,'ibgp',sessions,get_neighbor_rr(n)) - if not neighbor_data is None: - if 'loopback' in node: - neighbor_data._source_intf = node.loopback - node.bgp.neighbors.append(neighbor_data) - has_ibgp = True - - # - # The node is not a route reflector, and we have a non-empty RR list - # We need BGP sessions with the route reflectors + node_as = node.bgp['as'] # Set up variables that will come handy, starting with node AS + is_rr = node.bgp.get("rr",None) # Is this node an RR? + bgp_nhs = node.bgp.get("next_hop_self",None) # Do we have to set next hop on IBGP sessions? + rrlist = [] if is_rr else find_bgp_rr(node_as,topology) + + if is_rr or not rrlist: # If the current node is RR or we have a full mesh + ibgp_ngb_list = [ # ... we need IBGP sessions to all nodes in the AS + ngb for ngb in topology.nodes.values() # ... but while building the node list + if ngb.name != node.name and # ... skip current node + ngb.get('bgp.as',None) == node_as] # ... and everyone not in the current AS (or not running BGP) else: - for n in rrlist: - if n.name != node.name: - n_intf = get_remote_ibgp_endpoint(n) - neighbor_data = bgp_neighbor(n,n_intf,'ibgp',sessions,get_neighbor_rr(n)) - if not neighbor_data is None: - if 'loopback' in node: - neighbor_data._source_intf = node.loopback - node.bgp.neighbors.append(neighbor_data) - has_ibgp = True - - if not has_ibgp: + ibgp_ngb_list = rrlist + + for n in ibgp_ngb_list: + n_intf = get_remote_ibgp_endpoint(n) + neighbor_data = bgp_neighbor(n,n_intf,'ibgp',sessions,get_neighbor_rr(n)) + if not neighbor_data is None: + if 'loopback' in node: + neighbor_data._source_intf = node.loopback + if bgp_nhs: + neighbor_data.next_hop_self = True + if is_rr and not 'rr' in neighbor_data: + neighbor_data.rr_client = True + node.bgp.neighbors.append(neighbor_data) + + if not ibgp_ngb_list: return # Do we have to warn the user that IBGP sessions work better with IGP? @@ -387,6 +381,9 @@ def build_ebgp_sessions(node: Box, sessions: Box, topology: Box) -> None: ebgp_data = bgp_neighbor(neighbor,ngb_ifdata,session_type,sessions,extra_data) if not ebgp_data is None: ebgp_data['as'] = neighbor_local_as + if session_type == 'localas_ibgp': + ebgp_data.rr_client = True + ebgp_data.next_hop_self = 'all' if intf_vrf : # VRF neighbor if node.vrfs[l.vrf].bgp is False: # Is BGP disabled for this VRF? continue # ... yeah, move on diff --git a/tests/topology/expected/6pe.yml b/tests/topology/expected/6pe.yml index 7a95896e13..b0e8687a06 100644 --- a/tests/topology/expected/6pe.yml +++ b/tests/topology/expected/6pe.yml @@ -358,6 +358,7 @@ nodes: as: 65000 ipv4: 10.0.0.2 name: pe2 + next_hop_self: true type: ibgp - activate: ipv4: true @@ -473,6 +474,7 @@ nodes: as: 65000 ipv4: 10.0.0.1 name: pe1 + next_hop_self: true type: ibgp - activate: ipv4: true diff --git a/tests/topology/expected/addressing-ipv6-only.yml b/tests/topology/expected/addressing-ipv6-only.yml index ceb1e2dbe9..0911dc0cb9 100644 --- a/tests/topology/expected/addressing-ipv6-only.yml +++ b/tests/topology/expected/addressing-ipv6-only.yml @@ -136,6 +136,7 @@ nodes: as: 65000 ipv6: 2001:db8:0:15::1 name: r2 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -151,6 +152,7 @@ nodes: as: 65000 ipv6: 2001:db8:0:2a::1 name: r3 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -166,6 +168,7 @@ nodes: as: 65000 ipv6: 2001:db8:0:1::1 name: r4 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.7 @@ -291,6 +294,7 @@ nodes: as: 65000 ipv6: 2001:db8:0:7::1 name: r1 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -306,6 +310,7 @@ nodes: as: 65000 ipv6: 2001:db8:0:2a::1 name: r3 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -321,6 +326,7 @@ nodes: as: 65000 ipv6: 2001:db8:0:1::1 name: r4 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.21 @@ -443,6 +449,7 @@ nodes: as: 65000 ipv6: 2001:db8:0:7::1 name: r1 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -458,6 +465,7 @@ nodes: as: 65000 ipv6: 2001:db8:0:15::1 name: r2 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -473,6 +481,7 @@ nodes: as: 65000 ipv6: 2001:db8:0:1::1 name: r4 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.42 @@ -573,6 +582,7 @@ nodes: as: 65000 ipv6: 2001:db8:0:7::1 name: r1 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -588,6 +598,7 @@ nodes: as: 65000 ipv6: 2001:db8:0:15::1 name: r2 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -603,6 +614,7 @@ nodes: as: 65000 ipv6: 2001:db8:0:2a::1 name: r3 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.1 diff --git a/tests/topology/expected/addressing-ipv6-prefix.yml b/tests/topology/expected/addressing-ipv6-prefix.yml index b244c09ed5..e9d72fc2d7 100644 --- a/tests/topology/expected/addressing-ipv6-prefix.yml +++ b/tests/topology/expected/addressing-ipv6-prefix.yml @@ -112,6 +112,7 @@ nodes: as: 65000 ipv6: 2001:db8::15 name: r2 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -127,6 +128,7 @@ nodes: as: 65000 ipv6: 2001:db8::2a name: r3 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -142,6 +144,7 @@ nodes: as: 65000 ipv6: 2001:db8::1 name: r4 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.7 @@ -236,6 +239,7 @@ nodes: as: 65000 ipv6: 2001:db8::7 name: r1 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -251,6 +255,7 @@ nodes: as: 65000 ipv6: 2001:db8::2a name: r3 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -266,6 +271,7 @@ nodes: as: 65000 ipv6: 2001:db8::1 name: r4 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.21 @@ -373,6 +379,7 @@ nodes: as: 65000 ipv6: 2001:db8::7 name: r1 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -388,6 +395,7 @@ nodes: as: 65000 ipv6: 2001:db8::15 name: r2 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -403,6 +411,7 @@ nodes: as: 65000 ipv6: 2001:db8::1 name: r4 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.42 @@ -495,6 +504,7 @@ nodes: as: 65000 ipv6: 2001:db8::7 name: r1 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -508,6 +518,7 @@ nodes: as: 65000 ipv6: 2001:db8::15 name: r2 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -521,6 +532,7 @@ nodes: as: 65000 ipv6: 2001:db8::2a name: r3 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.1 diff --git a/tests/topology/expected/bgp-anycast.yml b/tests/topology/expected/bgp-anycast.yml index f583ba2783..5304593ed9 100644 --- a/tests/topology/expected/bgp-anycast.yml +++ b/tests/topology/expected/bgp-anycast.yml @@ -69,6 +69,7 @@ nodes: as: 65000 ipv4: 10.0.0.2 name: l2 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.1 @@ -147,6 +148,7 @@ nodes: as: 65000 ipv4: 10.0.0.1 name: l1 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.2 diff --git a/tests/topology/expected/bgp-autogroup.yml b/tests/topology/expected/bgp-autogroup.yml index 68c46c2e59..eee1a55374 100644 --- a/tests/topology/expected/bgp-autogroup.yml +++ b/tests/topology/expected/bgp-autogroup.yml @@ -171,6 +171,7 @@ nodes: as: 65101 ipv4: 10.0.0.6 name: a2 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -186,6 +187,7 @@ nodes: as: 65101 ipv4: 10.0.0.7 name: a3 + next_hop_self: true type: ibgp - activate: ipv4: true @@ -259,6 +261,7 @@ nodes: as: 65101 ipv4: 10.0.0.5 name: a1 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -274,6 +277,7 @@ nodes: as: 65101 ipv4: 10.0.0.7 name: a3 + next_hop_self: true type: ibgp - activate: ipv4: true @@ -347,6 +351,7 @@ nodes: as: 65101 ipv4: 10.0.0.5 name: a1 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -362,6 +367,7 @@ nodes: as: 65101 ipv4: 10.0.0.6 name: a2 + next_hop_self: true type: ibgp - activate: ipv4: true @@ -436,6 +442,7 @@ nodes: as: 65000 ipv4: 10.0.0.4 name: s1 + next_hop_self: true rr: true type: ibgp next_hop_self: true @@ -514,6 +521,7 @@ nodes: as: 65000 ipv4: 10.0.0.4 name: s1 + next_hop_self: true rr: true type: ibgp - activate: @@ -628,6 +636,7 @@ nodes: as: 65000 ipv4: 10.0.0.4 name: s1 + next_hop_self: true rr: true type: ibgp - activate: @@ -724,6 +733,8 @@ nodes: as: 65000 ipv4: 10.0.0.1 name: l1 + next_hop_self: true + rr_client: true type: ibgp - _source_intf: ifindex: 0 @@ -740,6 +751,8 @@ nodes: as: 65000 ipv4: 10.0.0.2 name: l2 + next_hop_self: true + rr_client: true type: ibgp - _source_intf: ifindex: 0 @@ -756,6 +769,8 @@ nodes: as: 65000 ipv4: 10.0.0.3 name: l3 + next_hop_self: true + rr_client: true type: ibgp next_hop_self: true router_id: 10.0.0.4 diff --git a/tests/topology/expected/bgp-community.yml b/tests/topology/expected/bgp-community.yml index d64c446948..03ca0fb5e1 100644 --- a/tests/topology/expected/bgp-community.yml +++ b/tests/topology/expected/bgp-community.yml @@ -84,6 +84,7 @@ nodes: as: 4259840001 ipv4: 10.0.0.2 name: r2 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -97,6 +98,7 @@ nodes: as: 4259840001 ipv4: 10.0.0.3 name: r3 + next_hop_self: true type: ibgp - activate: ipv4: true @@ -169,6 +171,7 @@ nodes: as: 4259840001 ipv4: 10.0.0.1 name: r1 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -182,6 +185,7 @@ nodes: as: 4259840001 ipv4: 10.0.0.3 name: r3 + next_hop_self: true type: ibgp - activate: ipv4: true @@ -257,6 +261,7 @@ nodes: as: 4259840001 ipv4: 10.0.0.1 name: r1 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -270,6 +275,7 @@ nodes: as: 4259840001 ipv4: 10.0.0.2 name: r2 + next_hop_self: true type: ibgp - activate: ipv4: true diff --git a/tests/topology/expected/bgp-ibgp.yml b/tests/topology/expected/bgp-ibgp.yml index 4dd2bbb12e..ede2663e15 100644 --- a/tests/topology/expected/bgp-ibgp.yml +++ b/tests/topology/expected/bgp-ibgp.yml @@ -109,6 +109,7 @@ nodes: as: 65000 ipv4: 10.0.0.3 name: s1 + next_hop_self: true rr: true type: ibgp - _source_intf: @@ -123,6 +124,7 @@ nodes: as: 65000 ipv4: 10.0.0.4 name: s2 + next_hop_self: true rr: true type: ibgp next_hop_self: true @@ -226,6 +228,7 @@ nodes: as: 65000 ipv4: 10.0.0.3 name: s1 + next_hop_self: true rr: true type: ibgp - _source_intf: @@ -240,6 +243,7 @@ nodes: as: 65000 ipv4: 10.0.0.4 name: s2 + next_hop_self: true rr: true type: ibgp next_hop_self: true @@ -334,6 +338,8 @@ nodes: as: 65000 ipv4: 10.0.0.1 name: l1 + next_hop_self: true + rr_client: true type: ibgp - _source_intf: ifindex: 0 @@ -347,6 +353,8 @@ nodes: as: 65000 ipv4: 10.0.0.2 name: l2 + next_hop_self: true + rr_client: true type: ibgp - _source_intf: ifindex: 0 @@ -360,6 +368,7 @@ nodes: as: 65000 ipv4: 10.0.0.4 name: s2 + next_hop_self: true rr: true type: ibgp next_hop_self: true @@ -456,6 +465,8 @@ nodes: as: 65000 ipv4: 10.0.0.1 name: l1 + next_hop_self: true + rr_client: true type: ibgp - _source_intf: ifindex: 0 @@ -469,6 +480,8 @@ nodes: as: 65000 ipv4: 10.0.0.2 name: l2 + next_hop_self: true + rr_client: true type: ibgp - _source_intf: ifindex: 0 @@ -482,6 +495,7 @@ nodes: as: 65000 ipv4: 10.0.0.3 name: s1 + next_hop_self: true rr: true type: ibgp next_hop_self: true diff --git a/tests/topology/expected/bgp-members.yml b/tests/topology/expected/bgp-members.yml index 94b412fe93..793c204a80 100644 --- a/tests/topology/expected/bgp-members.yml +++ b/tests/topology/expected/bgp-members.yml @@ -274,6 +274,7 @@ nodes: as: 65000 ipv4: 10.0.0.1 name: rr1 + next_hop_self: true rr: true type: ibgp - _source_intf: @@ -288,6 +289,7 @@ nodes: as: 65000 ipv4: 10.0.0.2 name: rr2 + next_hop_self: true rr: true type: ibgp - activate: @@ -378,6 +380,7 @@ nodes: as: 65000 ipv4: 10.0.0.1 name: rr1 + next_hop_self: true rr: true type: ibgp - _source_intf: @@ -392,6 +395,7 @@ nodes: as: 65000 ipv4: 10.0.0.2 name: rr2 + next_hop_self: true rr: true type: ibgp - activate: @@ -482,6 +486,7 @@ nodes: as: 65000 ipv4: 10.0.0.2 name: rr2 + next_hop_self: true rr: true type: ibgp - _source_intf: @@ -496,6 +501,8 @@ nodes: as: 65000 ipv4: 10.0.0.3 name: pe1 + next_hop_self: true + rr_client: true type: ibgp - _source_intf: ifindex: 0 @@ -509,6 +516,8 @@ nodes: as: 65000 ipv4: 10.0.0.4 name: pe2 + next_hop_self: true + rr_client: true type: ibgp next_hop_self: true router_id: 10.0.0.1 @@ -582,6 +591,7 @@ nodes: as: 65000 ipv4: 10.0.0.1 name: rr1 + next_hop_self: true rr: true type: ibgp - _source_intf: @@ -596,6 +606,8 @@ nodes: as: 65000 ipv4: 10.0.0.3 name: pe1 + next_hop_self: true + rr_client: true type: ibgp - _source_intf: ifindex: 0 @@ -609,6 +621,8 @@ nodes: as: 65000 ipv4: 10.0.0.4 name: pe2 + next_hop_self: true + rr_client: true type: ibgp next_hop_self: true router_id: 10.0.0.2 diff --git a/tests/topology/expected/bgp-sessions.yml b/tests/topology/expected/bgp-sessions.yml index 34bf2ef0ae..71d1294291 100644 --- a/tests/topology/expected/bgp-sessions.yml +++ b/tests/topology/expected/bgp-sessions.yml @@ -108,6 +108,7 @@ nodes: as: 65000 ipv6: 2001:db8:0:3::1 name: r2 + next_hop_self: true type: ibgp - activate: ipv4: true @@ -225,6 +226,7 @@ nodes: as: 65000 ipv6: 2001:db8:0:2::1 name: r1 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.3 diff --git a/tests/topology/expected/bgp.yml b/tests/topology/expected/bgp.yml index 170f149b24..5d7712cb0a 100644 --- a/tests/topology/expected/bgp.yml +++ b/tests/topology/expected/bgp.yml @@ -455,6 +455,7 @@ nodes: ipv4: 10.0.0.1 ipv6: 2001:db8:0:1::1 name: rr1 + next_hop_self: true rr: true type: ibgp - _source_intf: @@ -472,6 +473,7 @@ nodes: ipv4: 10.0.0.2 ipv6: 2001:db8:0:2::1 name: rr2 + next_hop_self: true rr: true type: ibgp - activate: @@ -590,6 +592,7 @@ nodes: ipv4: 10.0.0.1 ipv6: 2001:db8:0:1::1 name: rr1 + next_hop_self: true rr: true type: ibgp - _source_intf: @@ -607,6 +610,7 @@ nodes: ipv4: 10.0.0.2 ipv6: 2001:db8:0:2::1 name: rr2 + next_hop_self: true rr: true type: ibgp - activate: @@ -725,6 +729,7 @@ nodes: ipv4: 10.0.0.2 ipv6: 2001:db8:0:2::1 name: rr2 + next_hop_self: true rr: true type: ibgp - _source_intf: @@ -742,6 +747,8 @@ nodes: ipv4: 10.0.0.3 ipv6: 2001:db8:0:3::1 name: pe1 + next_hop_self: true + rr_client: true type: ibgp - _source_intf: ifindex: 0 @@ -758,6 +765,8 @@ nodes: ipv4: 10.0.0.4 ipv6: 2001:db8:0:4::1 name: pe2 + next_hop_self: true + rr_client: true type: ibgp next_hop_self: true router_id: 10.0.0.1 @@ -859,6 +868,7 @@ nodes: ipv4: 10.0.0.1 ipv6: 2001:db8:0:1::1 name: rr1 + next_hop_self: true rr: true type: ibgp - _source_intf: @@ -876,6 +886,8 @@ nodes: ipv4: 10.0.0.3 ipv6: 2001:db8:0:3::1 name: pe1 + next_hop_self: true + rr_client: true type: ibgp - _source_intf: ifindex: 0 @@ -892,6 +904,8 @@ nodes: ipv4: 10.0.0.4 ipv6: 2001:db8:0:4::1 name: pe2 + next_hop_self: true + rr_client: true type: ibgp next_hop_self: true router_id: 10.0.0.2 diff --git a/tests/topology/expected/components.yml b/tests/topology/expected/components.yml index f844e969cd..81bfc5e1ae 100644 --- a/tests/topology/expected/components.yml +++ b/tests/topology/expected/components.yml @@ -365,6 +365,7 @@ nodes: as: 65100 ipv4: 10.0.0.2 name: c2 + next_hop_self: true type: ibgp - activate: ipv4: true @@ -452,6 +453,7 @@ nodes: as: 65100 ipv4: 10.0.0.1 name: c1 + next_hop_self: true type: ibgp - activate: ipv4: true @@ -542,6 +544,7 @@ nodes: as: 65101 ipv4: 10.0.0.6 name: pod_1_l2_leaf + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -558,6 +561,7 @@ nodes: as: 65101 ipv4: 10.0.0.7 name: pod_1_s1 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -574,6 +578,7 @@ nodes: as: 65101 ipv4: 10.0.0.8 name: pod_1_s2 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.4 @@ -743,6 +748,7 @@ nodes: as: 65101 ipv4: 10.0.0.4 name: pod_1_l1_leaf + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -759,6 +765,7 @@ nodes: as: 65101 ipv4: 10.0.0.7 name: pod_1_s1 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -775,6 +782,7 @@ nodes: as: 65101 ipv4: 10.0.0.8 name: pod_1_s2 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.6 @@ -944,6 +952,7 @@ nodes: as: 65101 ipv4: 10.0.0.4 name: pod_1_l1_leaf + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -960,6 +969,7 @@ nodes: as: 65101 ipv4: 10.0.0.6 name: pod_1_l2_leaf + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -976,6 +986,7 @@ nodes: as: 65101 ipv4: 10.0.0.8 name: pod_1_s2 + next_hop_self: true type: ibgp - activate: ipv4: true @@ -1085,6 +1096,7 @@ nodes: as: 65101 ipv4: 10.0.0.4 name: pod_1_l1_leaf + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -1101,6 +1113,7 @@ nodes: as: 65101 ipv4: 10.0.0.6 name: pod_1_l2_leaf + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -1117,6 +1130,7 @@ nodes: as: 65101 ipv4: 10.0.0.7 name: pod_1_s1 + next_hop_self: true type: ibgp - activate: ipv4: true @@ -1226,6 +1240,7 @@ nodes: as: 65102 ipv4: 10.0.0.12 name: pod_2_l2_leaf + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -1242,6 +1257,7 @@ nodes: as: 65102 ipv4: 10.0.0.13 name: pod_2_s1 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -1258,6 +1274,7 @@ nodes: as: 65102 ipv4: 10.0.0.14 name: pod_2_s2 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.10 @@ -1427,6 +1444,7 @@ nodes: as: 65102 ipv4: 10.0.0.10 name: pod_2_l1_leaf + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -1443,6 +1461,7 @@ nodes: as: 65102 ipv4: 10.0.0.13 name: pod_2_s1 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -1459,6 +1478,7 @@ nodes: as: 65102 ipv4: 10.0.0.14 name: pod_2_s2 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.12 @@ -1628,6 +1648,7 @@ nodes: as: 65102 ipv4: 10.0.0.10 name: pod_2_l1_leaf + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -1644,6 +1665,7 @@ nodes: as: 65102 ipv4: 10.0.0.12 name: pod_2_l2_leaf + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -1660,6 +1682,7 @@ nodes: as: 65102 ipv4: 10.0.0.14 name: pod_2_s2 + next_hop_self: true type: ibgp - activate: ipv4: true @@ -1769,6 +1792,7 @@ nodes: as: 65102 ipv4: 10.0.0.10 name: pod_2_l1_leaf + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -1785,6 +1809,7 @@ nodes: as: 65102 ipv4: 10.0.0.12 name: pod_2_l2_leaf + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -1801,6 +1826,7 @@ nodes: as: 65102 ipv4: 10.0.0.13 name: pod_2_s1 + next_hop_self: true type: ibgp - activate: ipv4: true diff --git a/tests/topology/expected/ebgp.utils.yml b/tests/topology/expected/ebgp.utils.yml index 2b87b6c5fd..31cf01fd0d 100644 --- a/tests/topology/expected/ebgp.utils.yml +++ b/tests/topology/expected/ebgp.utils.yml @@ -173,6 +173,7 @@ nodes: as: 65001 ipv4: 10.0.0.4 name: rr + next_hop_self: true password: Secret rr: true type: ibgp @@ -614,7 +615,9 @@ nodes: as: 65001 ipv4: 10.0.0.1 name: r1 + next_hop_self: true password: Secret + rr_client: true timers: hold: 10 keepalive: 3 diff --git a/tests/topology/expected/evpn-asymmetric-irb-ospf.yml b/tests/topology/expected/evpn-asymmetric-irb-ospf.yml index dc4c7e66a8..317128957e 100644 --- a/tests/topology/expected/evpn-asymmetric-irb-ospf.yml +++ b/tests/topology/expected/evpn-asymmetric-irb-ospf.yml @@ -410,6 +410,7 @@ nodes: evpn: true ipv4: 10.0.0.2 name: s2 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.1 @@ -737,6 +738,7 @@ nodes: evpn: true ipv4: 10.0.0.1 name: s1 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.2 diff --git a/tests/topology/expected/evpn-hub-spoke.yml b/tests/topology/expected/evpn-hub-spoke.yml index 6dff57bd86..874caf8fb5 100644 --- a/tests/topology/expected/evpn-hub-spoke.yml +++ b/tests/topology/expected/evpn-hub-spoke.yml @@ -77,6 +77,7 @@ nodes: evpn: true ipv4: 10.0.0.2 name: r2 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.1 @@ -172,6 +173,7 @@ nodes: evpn: true ipv4: 10.0.0.1 name: r1 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.2 diff --git a/tests/topology/expected/evpn-l3vni-only.yml b/tests/topology/expected/evpn-l3vni-only.yml index 2781cd13b1..c1ffb0e2e0 100644 --- a/tests/topology/expected/evpn-l3vni-only.yml +++ b/tests/topology/expected/evpn-l3vni-only.yml @@ -105,6 +105,7 @@ nodes: evpn: true ipv4: 10.0.0.2 name: r2 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.1 @@ -231,6 +232,7 @@ nodes: evpn: true ipv4: 10.0.0.1 name: r1 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.2 diff --git a/tests/topology/expected/evpn-vxlan.yml b/tests/topology/expected/evpn-vxlan.yml index 8cc073da31..99b1fe4bbb 100644 --- a/tests/topology/expected/evpn-vxlan.yml +++ b/tests/topology/expected/evpn-vxlan.yml @@ -390,6 +390,7 @@ nodes: evpn: true ipv4: 10.0.0.2 name: s2 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -407,6 +408,7 @@ nodes: evpn: true ipv4: 10.0.0.3 name: s3 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.1 @@ -601,6 +603,7 @@ nodes: evpn: true ipv4: 10.0.0.1 name: s1 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -618,6 +621,7 @@ nodes: evpn: true ipv4: 10.0.0.3 name: s3 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.2 @@ -759,6 +763,7 @@ nodes: evpn: true ipv4: 10.0.0.1 name: s1 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -776,6 +781,7 @@ nodes: evpn: true ipv4: 10.0.0.2 name: s2 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.3 diff --git a/tests/topology/expected/fabric-ebgp.yml b/tests/topology/expected/fabric-ebgp.yml index f54b2437f8..abc4385afe 100644 --- a/tests/topology/expected/fabric-ebgp.yml +++ b/tests/topology/expected/fabric-ebgp.yml @@ -257,6 +257,7 @@ nodes: as: 65100 ipv4: 10.0.0.6 name: S2 + next_hop_self: true type: ibgp - activate: ipv4: true @@ -384,6 +385,7 @@ nodes: as: 65100 ipv4: 10.0.0.5 name: S1 + next_hop_self: true type: ibgp - activate: ipv4: true diff --git a/tests/topology/expected/groups-node-data.yml b/tests/topology/expected/groups-node-data.yml index b082a33c9e..9385d5f9e0 100644 --- a/tests/topology/expected/groups-node-data.yml +++ b/tests/topology/expected/groups-node-data.yml @@ -85,6 +85,7 @@ nodes: as: 65000 ipv4: 10.0.0.2 name: b + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -98,6 +99,7 @@ nodes: as: 65000 ipv4: 10.0.0.3 name: c + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.1 @@ -152,6 +154,7 @@ nodes: as: 65000 ipv4: 10.0.0.1 name: a + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -165,6 +168,7 @@ nodes: as: 65000 ipv4: 10.0.0.3 name: c + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.2 @@ -219,6 +223,7 @@ nodes: as: 65000 ipv4: 10.0.0.1 name: a + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -232,6 +237,7 @@ nodes: as: 65000 ipv4: 10.0.0.2 name: b + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.3 @@ -286,6 +292,7 @@ nodes: as: 65001 ipv4: 10.0.0.5 name: e + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -299,6 +306,7 @@ nodes: as: 65001 ipv4: 10.0.0.6 name: f + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.4 @@ -353,6 +361,7 @@ nodes: as: 65001 ipv4: 10.0.0.4 name: d + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -366,6 +375,7 @@ nodes: as: 65001 ipv4: 10.0.0.6 name: f + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.5 @@ -420,6 +430,7 @@ nodes: as: 65001 ipv4: 10.0.0.4 name: d + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -433,6 +444,7 @@ nodes: as: 65001 ipv4: 10.0.0.5 name: e + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.6 diff --git a/tests/topology/expected/module-reorder.yml b/tests/topology/expected/module-reorder.yml index fd9ed2bb05..39f37ffb42 100644 --- a/tests/topology/expected/module-reorder.yml +++ b/tests/topology/expected/module-reorder.yml @@ -116,6 +116,7 @@ nodes: as: 65000 ipv4: 10.0.0.3 name: e1 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -129,6 +130,7 @@ nodes: as: 65000 ipv4: 10.0.0.4 name: e2 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.1 @@ -280,6 +282,7 @@ nodes: as: 65000 ipv4: 10.0.0.1 name: c1 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -293,6 +296,7 @@ nodes: as: 65000 ipv4: 10.0.0.4 name: e2 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.3 @@ -394,6 +398,7 @@ nodes: as: 65000 ipv4: 10.0.0.1 name: c1 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -409,6 +414,7 @@ nodes: as: 65000 ipv4: 10.0.0.3 name: e1 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.4 diff --git a/tests/topology/expected/mpls-vpn-simple.yml b/tests/topology/expected/mpls-vpn-simple.yml index 0ffcf0a69b..b6a2136232 100644 --- a/tests/topology/expected/mpls-vpn-simple.yml +++ b/tests/topology/expected/mpls-vpn-simple.yml @@ -104,6 +104,7 @@ nodes: as: 65001 ipv4: 10.0.0.2 name: r2 + next_hop_self: true type: ibgp vpnv4: 10.0.0.2 next_hop_self: true @@ -238,6 +239,7 @@ nodes: as: 65001 ipv4: 10.0.0.1 name: r1 + next_hop_self: true type: ibgp vpnv4: 10.0.0.1 next_hop_self: true diff --git a/tests/topology/expected/mpls.yml b/tests/topology/expected/mpls.yml index 6ce6df8307..56b660c000 100644 --- a/tests/topology/expected/mpls.yml +++ b/tests/topology/expected/mpls.yml @@ -406,6 +406,7 @@ nodes: ipv6: 2001:db8:0:2::1 ipv6_label: true name: pe2 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -424,6 +425,7 @@ nodes: ipv6: 2001:db8:0:4::1 ipv6_label: true name: rr + next_hop_self: true type: ibgp - activate: ipv4: true @@ -546,6 +548,7 @@ nodes: ipv6: 2001:db8:0:1::1 ipv6_label: true name: pe1 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -564,6 +567,7 @@ nodes: ipv6: 2001:db8:0:4::1 ipv6_label: true name: rr + next_hop_self: true type: ibgp - activate: ipv4: true @@ -683,6 +687,7 @@ nodes: ipv4_label: true ipv6: 2001:db8:0:1::1 name: pe1 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -700,6 +705,7 @@ nodes: ipv4_label: true ipv6: 2001:db8:0:2::1 name: pe2 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.4 diff --git a/tests/topology/expected/null-vrfs.yml b/tests/topology/expected/null-vrfs.yml index ce1af35789..9d18be4157 100644 --- a/tests/topology/expected/null-vrfs.yml +++ b/tests/topology/expected/null-vrfs.yml @@ -73,6 +73,7 @@ nodes: evpn: true ipv4: 10.0.0.2 name: n2 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.1 @@ -159,6 +160,7 @@ nodes: evpn: true ipv4: 10.0.0.1 name: n1 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.2 diff --git a/tests/topology/expected/vrf-igp.yml b/tests/topology/expected/vrf-igp.yml index 8b4807be0c..a5c1d97c99 100644 --- a/tests/topology/expected/vrf-igp.yml +++ b/tests/topology/expected/vrf-igp.yml @@ -156,6 +156,7 @@ nodes: as: 65000 ipv4: 10.0.0.2 name: pe2 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.1 @@ -413,6 +414,7 @@ nodes: as: 65000 ipv4: 10.0.0.1 name: pe1 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.2 diff --git a/tests/topology/expected/vrf-links.yml b/tests/topology/expected/vrf-links.yml index 9bb26fcee8..9c75caedfb 100644 --- a/tests/topology/expected/vrf-links.yml +++ b/tests/topology/expected/vrf-links.yml @@ -134,6 +134,7 @@ nodes: as: 65000 ipv4: 10.0.0.2 name: r2 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -147,6 +148,7 @@ nodes: as: 65000 ipv4: 10.0.0.3 name: r3 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.1 @@ -368,6 +370,7 @@ nodes: as: 65000 ipv4: 10.0.0.1 name: r1 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -381,6 +384,7 @@ nodes: as: 65000 ipv4: 10.0.0.3 name: r3 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.2 @@ -548,6 +552,7 @@ nodes: as: 65000 ipv4: 10.0.0.1 name: r1 + next_hop_self: true type: ibgp - _source_intf: ifindex: 0 @@ -561,6 +566,7 @@ nodes: as: 65000 ipv4: 10.0.0.2 name: r2 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.3 diff --git a/tests/topology/expected/vrf-routing-blocks.yml b/tests/topology/expected/vrf-routing-blocks.yml index 66f110a664..0e5d769345 100644 --- a/tests/topology/expected/vrf-routing-blocks.yml +++ b/tests/topology/expected/vrf-routing-blocks.yml @@ -222,6 +222,7 @@ nodes: as: 65000 ipv4: 10.0.0.2 name: r2 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.1 @@ -685,6 +686,7 @@ nodes: as: 65000 ipv4: 10.0.0.1 name: r1 + next_hop_self: true type: ibgp next_hop_self: true router_id: 10.0.0.2