bgpd: EVPN rd all option for route outputTicket: #4992460
Testing:
Before fix:
btor-11# show bgp l2vpn evpn route rd all prefix 2060:1:1:110::/64
% Malformed Route Distinguisher
After fix:
btor-11# show bgp l2vpn evpn route rd all prefix 2060:1:1:110::/64
Route Distinguisher: 144.1.1.6:9
BGP routing table entry for 144.1.1.6:9:[5]:[0]:[64]:[2060:1:1:110::]
Paths: (1 available, best #1)
Not advertised to any peer
Route [5]:[0]...
bgpd: Add command to display EVPN type-5 per-prefixAdd support for command
show bgp l2vpn evpn route rd <rd> prefix <prefix> [json]
This is currently a Cumulus-specific change. Multiple of the EVPN operational
commands need to be unified with upstream changes which have now caught up
to display most of the needed information of the global EVPN table but differ
in some aspects from existing Cumulus commands. The unification also needs
to handle...
tests: staticd: add topotest for static route metric featureAdd test_static_route_metric.py to tests/topotests/static_route_distance/
covering 7 scenarios × IPv4+IPv6 (14 test functions):
1. Metric replacement: changing a nexthop's metric removes the old-metric
RIB entry and installs a new one at the new metric — no stale duplicate
is left behind.
2. ECMP at same metric: two nexthops with identical metric are installed
as a single ZAPI ADD wit...
tests: staticd: add topotests for per-route distance and tagAdd tests/topotests/static_route_distance/ covering:
- Per-path administrative distance: AD replacement, ECMP with mixed
ADs, lazy deletion keyed on nexthop identity, running-config
correctness after each operation.
- Per-path tag: basic tag assignment, independent tags per path,
tag change in place, combined AD+tag change in one command,
max-value-wins recalculation on deletion (delete...
tests: staticd: add topotests for apply_finish batching behaviorCover the four scenarios introduced by the apply_finish commit:
1. Tag + metric combined change in one transaction (tag_modify and
metric_modify both fire, then apply_finish once).
2. Distance + metric combined change (distance_modify and metric_modify,
then apply_finish once).
3. Tag + distance + metric all three in one transaction (all three
per-leaf callbacks, then appl...
doc: staticd: document administrative distance, metric, and tagAdd two new sections to doc/user/static.rst:
1. Administrative Distance and Metric: explains that static routes are
grouped by (table-id, distance, metric) into path groups; nexthops
sharing the same tuple form an ECMP set. Covers floating static
routes (nexthops with different (distance, metric) tuples form separate
path groups; all groups present in the RIB with the best-prefere...
staticd: add per-route metric as a non-key path-list attributeAdd metric as a non-key leaf attribute on the flat path-list entry,
mirroring how distance is already handled after the schema refactoring.
YANG
----
Add a metric leaf (uint32, default 0) to the staticd-prefix-attributes
grouping. Metric is not part of the nexthop-identity key; changing it
on an existing nexthop triggers a leaf MODIFY rather than a
DESTROY+CREATE.
Internal path grouping
----...
zebra: support metric as identity key for static routesAdd metric to the ZEBRA_ROUTE_STATIC identity checks in zebra so that
two static routes at the same distance but different metrics are treated
as distinct route_entries:
- rib_compare_routes(): add a ZEBRA_ROUTE_STATIC metric check so that an
incoming static route at a different metric is not treated as an update
to the existing entry.
- process_subq_early_route_delete(): extend the existi...
tests: grpc: update path-list xpath and JSON fixtures to flat schemaThe staticd path-list key changed from (table-id, distance) to nexthop
identity (table-id, nh-type, vrf, gateway, interface), with distance
and metric as non-key attributes.
Update test_grpc.cpp:
- xpath predicate: replace path-list[table-id][distance]/frr-nexthops/
nexthop[nh-type]... with flat path-list[table-id][nh-type]...
- Restructure all 13 path-list JSON blocks from the nested
frr-...
tests: mgmt: update path-list xpaths to flat schemaThe staticd path-list key changed from (table-id, distance) to nexthop
identity (table-id, nh-type, vrf, gateway, interface), with distance
becoming a non-key attribute.
Update the hard-coded mgmt set-config xpaths in test_yang_mgmt.py:
remove '[distance=1]/frr-nexthops/nexthop[' from each path-list
predicate — nh-type, vrf, gateway, and interface are now direct keys
on the path-list entry its...
staticd: use nexthop identity as key in YANG schemaMotivation
----------
Static routes for a prefix can have multiple nexthops, but each nexthop
must be unique for that prefix. The nexthop — identified by the
combination of (table-id, nh-type, vrf, gateway, interface) — should
therefore be the natural key in the YANG schema for static routes.
The previous schema keyed path-list on [table-id, distance] with a
nexthop-list nested below. Since ...
bgpd: set mp_nexthop_len consistently in subgroup_default_originate()d33a1dd19f added bgp_attr_set(&attr, BGP_ATTR_NEXT_HOP) to the IPv4
else branch of subgroup_default_originate(), but bgp_attr_default_set()
still initializes mp_nexthop_len to IPV6_MAX_BYTELEN. For the IPv4
default-originate path, mp_nexthop_len should be IPV4_MAX_BYTELEN.
This has no behavioral effect: every code path that consults mp_nexthop_len
(BGP_ATTR_NEXTHOP_AFI_IP6, BGP_NEXTHOP_AFI_FRO...
tests: Add a zebra gr testTest the -K option for zebra and ensure that zebra
reads routes in on startup again and works properly.
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
zebra: Remove extra unneeded lock of proto owned NHGWhen reading a NHG from the kernel on startup, it is
not necessary to lock the proto owned NHG one more time.
This causes problems on rib_sweep events.
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
zebra: Create an explicit end of read signalCreate an explicit end of read signal that can come from
the dplane instead of having it be assumed all work is done.
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
zebra: Fixup some startup issuesCurrently on startup we do this:
a) Initiate reads from netlink. This creates dplane ctx's in some situations
b) After reads from netlink signal startup is done and start rib sweep code
c) Convert dplane ctx's over to metaQ items
d) Process some metaQ items
e) rib_sweep code is run.
f) Finish processing metaQ items from initial read in.
This can leave items in the rib that should have been c...
zebra: Move intf startup variable to a generic variable for the ctxWhether or not zebra is in startup is a bit of data that
is not specific to interface startup. In fact we need to know
this for routes and nexthops as well( at the very least ).
Let's move the startup value to outside of the interface scope.
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
tests: Fix invalid escape warning in bgp_link_state test modulePytest reports a DeprecationWarning during collection of
tests/topotests/bgp_link_state/test_bgp_link_state.py due to an
invalid escape sequence in the module docstring.
```
test_bgp_link_state.py:6
/home/user/frr/tests/topotests/bgp_link_state/test_bgp_link_state.py:6: DeprecationWarning: invalid escape sequence '\ '
"""
```
Fix this by converting the module docstring to a raw string l...
tests: Fix invalid ISIS max-lsp-lifetime in bgp_link_state configsThe bgp_link_state topotest ISIS configs set:
max-lsp-lifetime 20
FRR accepts max-lsp-lifetime only in range 350-65535, so value 20
triggers warnings while loading the configs.
Update r1/r2/r3/r4 configs to use:
max-lsp-lifetime 350
Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
bgpd: Treat malformed BGP-LS TLV as NLRI discard per RFC 9552RFC 9552 Section 5.1 states that when a malformed TLV is detected in
a BGP-LS attribute, the router MUST handle the affected NLRI(s) as
NLRI discard. The BGP session MUST NOT be reset.
bgp_attr_ls() currently returns BGP_ATTR_PARSE_ERROR on TLV parse
failure, which causes the caller (bgp_packet.c) to return BGP_Stop and
reset the session.
This behavior creates a remote BGP-session-reset vecto...
bgpd: Reject BGP-LS node/link names containing non-printable charactersparse_node_name() and parse_link_name() accept arbitrary bytes from the
wire, including embedded NUL bytes and control characters. A malicious
peer can inject names such as "good\0bad", which:
- Are silently truncated by strcmp/printf (only "good" is visible),
allowing two distinct TLV values to appear identical in logs and VTY
output (log spoofing).
- Can bypass NLRI deduplication: bg...
mgmtd: add periodic notify mode with mode/mode_data and FE support - Added mode/mode_data to native NOTIFY_SELECT message.
- Defined periodic vs on-change notify semantics in FE path.
- Track periodic selectors separately from on-change selectors per session.
- Added per-session periodic timer lifecycle for sampled oper snapshots.
- Keep backend notify-select subscriptions on-change only.
- Update FE client API/topotest encoding and docs for mode s...
Merge pull request #21769 from donaldsharp/rnh_problems_with_quick_interface_flappingzebra: Allow quick flaps of interfaces to be handled properly in next…
zebra: Allow quick flaps of interfaces to be handled properly in nexthop trackingCurrently if you have a quick series of events:
interface down
interface up
This can end up resolving to no changes in the nexthop tracking if zebra
is extremely busy.
Modify zebra to notice that the connected/local/kernel routes have been
removed and re-added and allow nexthop trackign to send a nexthop withdraw
then a add to make things keep working.
Signed-off-by: Donald Sharp <sharpd@nv...
tests: add test verifying aggregate->count with bgp suppress-fib-pendingAdd a topotest verifying that aggregate->count is correctly maintained
when bgp suppress-fib-pending is enabled.
Topology: r2 (AS 65002) --- r1 (AS 65001)
r2 advertises 10.0.0.0/24 to r1. r1 has suppress-fib-pending enabled
and aggregate-address 10.0.0.0/8 configured.
The bug fixed (bgpd: fix aggregate->count errors in ZAPI route
notifications): ZAPI_ROUTE_INSTALLED called bgp_aggregate_inc...
bgpd: fix aggregate->count errors in ZAPI route notificationsAggregate counting tracks BGP RIB presence, not FIB installation state.
bgp_aggregate_increment/decrement() must be called when routes enter or
leave the BGP RIB — not in response to FIB events from zebra. When
"bgp suppress-fib-pending" is configured, BGP registers for route
notifications (ZEBRA_ROUTE_NOTIFY_REQUEST), and the ZAPI notification
handlers violated this principle, causing two bug...
tests: bgp_community_change_update: use receivedPrefixDup counterReplace the grep-based duplicate-update detection with the
receivedPrefixDup counter from "show bgp neighbors json". This
avoids reliance on log file content.
Also explicitly enable bgp suppress-duplicates in x1/bgpd.conf, and
disable debug bgp updates in both c1 and x1 configs.
Signed-off-by: Enke Chen <enchen@paloaltonetworks.com>
bgpd: Fix possible NULL deref in capability extended-nexthopSA is warning that peer as returned by peer_and_group_lookup_vty
can be NULL. As such deref'ing the peer in bgp_capability_send
is a no go. This used to work because the peer was checked
for null in bgp_capability_send.
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
bgpd: bgp_packet.c and bgp_fsm.c were using peer->connection in some wrong placesSimplify the code to fully make sure that the function is really
connection oriented. Find and fix the places where peer->connection
was being used on connection oriented functions
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
bgpd: Modify functions to use `struct peer_connection`Modify functions in:
bgp_packet.c
bgp_attr.c
bgp_open.c
bgp_fsm.c
bgp_ls.c
to take a `struct peer_connection` vs a `struct peer`. Just more
cleanup of the functions in what they are doing.
Signed-off-by: Donald Sharp <sharpd@nvidia.com>