Merge pull request #21532 from opensourcerouting/fix/bgp_confederation_equal_bgp_externalbgpd: Do not reject the route if confederation AS matches peer AS
Merge pull request #21430 from karthikeyav/kmuppalla/upstream-advertisement-delaybgpd: add advertisement-delay to hold route advertisements after startup
Merge pull request #21400 from sougatahitcs/sougatab/_static-route-bfd-admin-down-state-handling-improvementsstatic route bfd admin down state handling improvements
tests: Add BGP-LS BGP-only fabric topotestThe BGP-only fabric draft (draft-ietf-idr-bgp-ls-bgp-only-fabric)
defines advertising topology and reachability via BGP-LS NLRIs.
Add a topotest topology with rr (AS65000) collecting BGP-LS from four
routers (r1-r4) using mixed iBGP/eBGP peerings and link-state AF.
The test verifies baseline Node/Link/Prefix NLRI output against an
expected JSON snapshot, and validates originate/withdraw behav...
bgpd: Add per-neighbor route-map commands under BGP-LS AFEnable per-neighbor route-map configuration under address-family
link-state:
```
router bgp <asn>
address-family link-state link-state
neighbor <peer> route-map <rmap-name>
```
This wires neighbor_route_map_cmd and no_neighbor_route_map_cmd into
BGP_LS_NODE so route-map policy can be applied to BGP-LS neighbors
consistently with other address families.
Signed-off-by: Carmine Scarpitta <cs...
bgpd: Add per-neighbor BGP-LS local/remote link-id CLIsAdd per-neighbor CLI knobs to set BGP-LS link identifiers:
```
router bgp <asn
neighbor <peer> local-link-id <1-4294967295>
neighbor <peer> remote-link-id <1-4294967295>
```
These values let operators control link descriptor identifiers for
BGP-LS Link NLRIs. If distribution is active, changing or removing
either value triggers a withdraw/re-originate cycle so exported
topology stays consis...
bgpd: Add CLI to enable BGP-LS distribution for BGP-only fabricsIntroduce a new router-mode command to control BGP-LS export for
BGP-only fabrics:
```
router bgp 65001
address-family link-state link-state
distribute bgp-fabric-link-state [instance-id WORD]
```
When enabled, bgpd exports the current topology as BGP-LS
Node/Link/Prefix NLRIs. When disabled, bgpd withdraws all NLRIs
originated through this feature. If the instance-id changes while
distrib...
bgpd: Trigger BGP-LS link originate/withdraw on peer state eventsThe BGP-only fabric draft (draft-ietf-idr-bgp-ls-bgp-only-fabric)
defines advertising BGP session topology as BGP-LS Link NLRIs.
When a peer session is established, call bgp_ls_originate_bgp_link()
to originate the corresponding BGP-LS Link NLRI.
When a peer session goes down, call bgp_ls_withdraw_bgp_link()
to withdraw the corresponding BGP-LS Link NLRI.
Signed-off-by: Carmine Scarpitta <cs...
bgpd: Re-export BGP-LS topology on router-id and instance eventsThe BGP-only fabric draft (draft-ietf-idr-bgp-ls-bgp-only-fabric)
defines topology advertisement using BGP-LS Node and Link NLRIs.
When the local router-id changes, withdraw all BGP-LS NLRIs and
re-export topology with the new router-id.
When a BGP instance is created, call bgp_ls_originate_bgp_node()
to originate the corresponding BGP-LS Node NLRI.
Signed-off-by: Carmine Scarpitta <cscarpit...
bgpd: Trigger BGP-LS prefix originate/withdraw on route eventsThe BGP-only fabric draft (draft-ietf-idr-bgp-ls-bgp-only-fabric)
defines advertising unicast prefix reachability as BGP-LS Prefix NLRIs.
When a unicast route is added or updated, call
bgp_ls_originate_bgp_prefix() to originate the corresponding BGP-LS
Prefix NLRI.
When a unicast route is deleted, call
bgp_ls_withdraw_bgp_prefix() to withdraw the corresponding BGP-LS
Prefix NLRI.
Signed-off-...
tests: add topotest for bgp advertisement-delayAdd topotest exercising the advertisement-delay feature with a simple
r1--r2--r3 topology where r2 is the UUT.
Test cases:
- Initial convergence without any delay configured
- show bgp router json / show bgp summary json show configured value
- advertisement-delay in progress: peers Established, pfxSnt=0
- RIB is populated during delay (only advertisements are held)
- delay completes: pfxSnt>0...
doc: add advertisement-delay documentation to bgp user guideDocument the bgp advertisement-delay CLI (global and per-vrf).
Clarify that the delay applies to all AFI/SAFI, re-triggers on
clear ip bgp *, and is unrelated to the per-neighbor
advertisement-interval.
Signed-off-by: Karthikeya Venkat Muppalla <kmuppalla@nvidia.com>
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
bgpd: Add BGP-LS originate/withdraw functions for BGP-only fabricAdd functions to originate and withdraw BGP-LS NLRIs representing the
local BGP topology for BGP-only fabrics, per
draft-ietf-idr-bgp-ls-bgp-only-fabric:
- bgp_ls_originate_bgp_node(): originate a Node NLRI for the local
BGP router.
- bgp_ls_originate_bgp_link(): originate a Link NLRI for a BGP
session to a peer.
- bgp_ls_originate_bgp_prefix(): originate a Prefix NLRI for a BGP
unicast ...
bgpd: Add BGP Route Type TLV support to BGP-LS prefix descriptorImplement support for BGP Route Type TLV in BGP-LS prefix descriptors as
specified in draft-ietf-idr-bgp-ls-bgp-only-fabric. This includes:
- Encoding/decoding of BGP Route Type TLV (1 byte value)
- Support for 5 route type values: Local, Attached, External/Internal BGP, Redistributed
- Hash key generation and descriptor comparison
- Display and JSON output formatting
Signed-off-by: Carmine Sc...
bgpd: Add BGP Router-ID (TLV 516) support to BGP-LS node descriptorAdd full support for the BGP Router-ID sub-TLV (TLV 516) in BGP-LS
node descriptors, as required by
draft-ietf-idr-bgp-ls-bgp-only-fabric.
- Define TLV 516 constant, bit flag, size macro, and add
bgp_router_id field to struct bgp_ls_node_descriptor
- Encode and decode BGP Router-ID TLV with length validation
- Relax NLRI validation to accept BGP Router-ID in place of
IGP Router-ID for Node...
tests: Update pytestmark value in scriptsNoticed while examining a test today that the pytest marks were
not 100% correct. Wrote a script that compared what was loaded
via configuration -vs- what the pytestmark values where, then
I adjusted all the pytestmark values to be more accurate. There
still might be a few that are `wrong` but we are much closer now.
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
bgpd: add advertisement-delay to hold route advertisements after startupAdd advertisement-delay CLI and logic that holds route advertisements to
peers for a configured number of seconds after the first peer reaches
Established state.
- Global: bgp advertisement-delay (1-3600)
- Per-instance: advertisement-delay (1-3600)
- With update-delay: both timers start at T0 (first peer Established).
Advertisements released at max(time_FIB_ready, T0 + A).
- Without update-...
bgpd: honor 'no activate' for dynamic neighbors in peer-groupWhen a dynamic peer connects via 'bgp listen range', peer_create()
activates IPv4 unicast by default. peer_create_bind_dynamic_neighbor()
then applies the group's AF config but only activates AFIs the group
has enabled -- it never deactivates AFIs the group has disabled.
This causes 'no neighbor <group> activate' under an address-family
to be ignored for dynamic peers.
Add peer_deactivate() f...
bgpd: Simplify BGP-LS NLRI TLV encoding by inlining helper functionsRemove the TLV encoding helper functions (stream_put_tlv_hdr, stream_put_tlv,
and stream_putf_tlv) and inline their logic directly into the encoder
functions. This improves code clarity and consistency by:
- Consolidating stream writeable checks before encoding each TLV
- Eliminating the confusion of split writeable checks between helpers
and callers
The encoder functions now directly call ...
lib: mgmt: use SOMAXCONN for mgmtd socket listen backlogThe mgmtd frontend and backend UNIX sockets pass a compile-time
constant of 32 to listen(2) as the accept-queue backlog. Under
fan-in from multiple concurrent clients (vtysh sessions, test
harnesses, external controllers) the kernel accept queue
saturates and new connect(2) attempts fail with EAGAIN before
the msg_server handler runs. This is observable as a hard
ceiling: at roughly 1000 concur...
tests: bgp_suppress_fib was not stable before testingbgp_suppress fib is bringing up peers and then ensuring
that the peers are established and then immediately changing
some configuration that should not cause changes in prefixes
being sent or received. Under heavy load you can have peerings
but not fully passed prefixes, thus leaving a timing window
where things are still changing. Ensure that nothing has
changed for 10 seconds before preceed...
isisd: Reject SRv6 Locator TLV with Loc-Size of zeroRFC 9352 Section 7.1 requires Loc-Size to be in the range 1-128.
A value of zero is invalid and must cause the entire TLV to be
ignored. The existing check only rejects values greater than 128,
allowing zero through and producing a zero-length prefix that can
confuse downstream consumers.
Fix this by extending the condition to also reject zero:
if (rv->prefix.prefixlen == 0 || rv->prefix.pr...
tests: Remove `show running bgpd` from the topotestsIn the future bgp is going to transition to using mgmtd and
the `show running-config bgpd` command is going to dissapear.
Let's facilitate this by going ahead and removing this special
case code for the future.
Signed-off-by: Donald Sharp <sharpd@nvidia.com>