summaryrefslogtreecommitdiffstats
path: root/pkgsrc (unfollow)
Commit message (Collapse)AuthorFilesLines
2 daystopotests: bgp_vpnv4_noretain, check presence of locpref in adj-rib-outPhilippe Guibert2-0/+143
Add a test that check that the detailed command of show bgp advertised neighbors 10.125.0.2 displays the locpref value. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2 daystopotests: bgp_aggregate_address_topo1, add test for suppressed keywordPhilippe Guibert2-0/+60
Add a test that checks that the BGP route to 192.168.0.1 has all the necessary json outputs. This route is chosen because it is a suppressed route. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2 daysbgpd: fix add json attribute to reflect suppressed pathPhilippe Guibert1-0/+6
When aggregate is used, the suppressed information is not displayed in the json attributes of a given path. To illustrate, the dump of the 192.168.2.1/32 path in the bgp_aggregate_address_topo1 topotest: > # show bgp ipv4 > [..] > s> 192.168.2.1/32 10.0.0.2 0 65001 i > > # show bgp ipv4 detail > [..] > BGP routing table entry for 192.168.2.1/32, version 17 > Paths: (1 available, best #1, table default, vrf (null), Advertisements suppressed by an aggregate.) > Not advertised to any peer > 65001 <---- missing suppressed flag > 10.0.0.2 from 10.0.0.2 (10.254.254.3) > Origin IGP, valid, external, best (First path received) > Last update: Fri Jan 24 13:11:41 2025 > > # show bgp ipv4 detail json > [..] > ,"192.168.2.1/32": [{"aspath":{"string":"65001","segments":[{"type":"as-sequence","list":[65001]}],"length":1},"origin":"IGP","valid":true,"version":17, > "bestpath":{"overall":true,"selectionReason":"First path received"}, <---- missing suppressed flag > "lastUpdate":{"epoch":1737720700,"string":"Fri Jan 24 13:11:40 2025\n"}, > "nexthops":[{"ip":"10.0.0.2","afi":"ipv4","metric":0,"accessible":true,"used":true}], > "peer":{"peerId":"10.0.0.2","routerId":"10.254.254.3","type":"external"}}] Fix this by adding the json information. > # show bgp ipv4 detail > [..] > BGP routing table entry for 192.168.2.1/32, version 17 > Paths: (1 available, best #1, table default, vrf (null), Advertisements suppressed by an aggregate.) > Not advertised to any peer > 65001, (suppressed) > 10.0.0.2 from 10.0.0.2 (10.254.254.3) > Origin IGP, valid, external, best (First path received) > Last update: Fri Jan 24 13:11:41 2025 > > # show bgp ipv4 detail json > [..] > ,"192.168.2.1/32": [{"aspath":{"string":"65001","segments":[{"type":"as-sequence","list":[65001]}],"length":1},"suppressed":true,"origin":"IGP","valid":true,"version":17, > "bestpath":{"overall":true,"selectionReason":"First path received"}, > "lastUpdate":{"epoch":1737720991,"string":"Fri Jan 24 13:16:31 2025"}, > "nexthops":[{"ip":"10.0.0.2","afi":"ipv4","metric":0,"accessible":true,"used":true}],"peer":{"peerId":"10.0.0.2","routerId":"10.254.254.3","type":"external"}}] Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
4 daysRevert "bgpd: Handle Addpath capability using dynamic capabilities"Donatas Abraitis7-393/+56
This reverts commit 05cf9d03b345393b8d63ffe9345c42debd8362b6. TL;DR; Handling BGP AddPath capability is not trivial (possible) dynamically. When the sender is AddPath-capable and sends NLRIs encoded with AddPath ID, and at the same time the receiver sends AddPath capability "disable-addpath-rx" (flag update) via dynamic capabilities, both peers are out of sync about the AddPath state. The receiver thinks already he's not AddPath-capable anymore, hence it tries to parse NLRIs as non-AddPath, while they are actually encoded as AddPath. AddPath capability itself does not provide (in RFC) any mechanism on backward compatible way to handle NLRIs if they come mixed (AddPath + non-AddPath). This explains why we have failures in our CI periodically. Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
5 daysisisd: fix duplicate rfc8919 definesPhilippe Guibert1-6/+0
The application specific defines from rfc8919 were defined twice in the isis tlv headers. Remove the second one. Fixes: 5749ac83a8ad ("isisd: add ASLA support") Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 daysredhat: Specify minimum libyang version requirementMartin Winter1-0/+3
Version requirement from a BuildRequire get dropped and don't get reflected in Require's for the package. Specify it both ways for Libyang as we require >= 2.1.128 Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
6 daysbgpd: Fix bgp peer solo optionAlexander Skorichenko4-2/+160
Signed-off-by: Alexander Skorichenko <askorichenko@netgate.com>
7 dayszebra: Return error if v6 prefix is passed to show ip routePooja Jagadeesh Doijode1-0/+15
Return error if IPv6 address or prefix is passed as an argument to "show ip route" command. UT: r1# show ip route 2::3/128 % Cannot specify IPv6 address/prefix for IPv4 table r1# r1# show ip route 2::3 % Cannot specify IPv6 address/prefix for IPv4 table r1# Signed-off-by: Pooja Jagadeesh Doijode <pdoijode@nvidia.com>
7 daysbgpd: fix bfd with update-source in peer-groupLouis Scalbert1-0/+4
Fix BFD session not created when the peer is in update-group with the update-source option. Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
7 daystests: check bfd with update-source in peer-groupLouis Scalbert2-1/+35
Check bfd with update-source in peer-group. Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
8 daysbgpd: fix evpn path info get apiChirag Shah3-1/+15
EVPN imported routes AF is not AF_EVPN, in that case the path info extra with EVPN is nver created. In order to create evpn info under path extra, define new api which does not specifically check for AF_EVPN afi type. Signed-off-by: Chirag Shah <chirag@nvidia.com>
8 dayslib: fix coverity use after free issue: CID 1620101Christian Hopps1-0/+1
The code doesn't push more than one group (currently) so wouldn't hit the bug yet, nice catch by coverity. Signed-off-by: Christian Hopps <chopps@labn.net>
8 daysbgpd: fix do not send twice peer up/down messagesPhilippe Guibert1-1/+1
With recent BMP code, on a standard BMP config, the peer up and peer down messages related to a BGP peer are sent twice, whereas they should be send only once. Fix this by better controlling the condition. Fixes: f8a693311145 ("bgpd: bmp, handle imported bgp instances for peer up/down events") Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
8 daysbgpd: fix static analyzer issues around bgp pointerPhilippe Guibert1-7/+9
Some static analyzer issues can be observed in BGP code: > In file included from ./lib/zebra.h:13, > from lib/event.c:8: > ./lib/compiler.h:222:26: note: '#pragma message: Remove `clear thread cpu` command' > 222 | #define CPP_NOTICE(text) _Pragma(CPP_STR(message text)) > | ^~~~~~~ > lib/event.c:433:1: note: in expansion of macro 'CPP_NOTICE' > 433 | CPP_NOTICE("Remove `clear thread cpu` command") > | ^~~~~~~~~~ > bgpd/bgp_vty.c:1592:5: warning: Access to field 'as_pretty' results in a dereference of a null pointer (loaded from variable 'bgp') [core.NullDereference] > 1592 | bgp->as_pretty); > | ^~~~~~~~~~~~~~ > bgpd/bgp_vty.c:1599:5: warning: Access to field 'as_pretty' results in a dereference of a null pointer (loaded from variable 'bgp') [core.NullDereference] > 1599 | bgp->as_pretty); > | ^~~~~~~~~~~~~~ > bgpd/bgp_vty.c:1612:7: warning: Access to field 'flags' results in a dereference of a null pointer (loaded from variable 'bgp') [core.NullDereference] > 1612 | IS_BGP_INSTANCE_HIDDEN(bgp)) { > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ > ./bgpd/bgpd.h:2906:3: note: expanded from macro 'IS_BGP_INSTANCE_HIDDEN' > 2906 | (CHECK_FLAG(_bgp->flags, BGP_FLAG_INSTANCE_HIDDEN) && \ > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > ./lib/zebra.h:274:31: note: expanded from macro 'CHECK_FLAG' > 274 | #define CHECK_FLAG(V,F) ((V) & (F)) > | ^~~ > bgpd/bgp_vty.c:1614:4: warning: Access to field 'flags' results in a dereference of a null pointer (loaded from variable 'bgp') [core.NullDereference] > 1614 | UNSET_FLAG(bgp->flags, BGP_FLAG_INSTANCE_HIDDEN); > | ^ ~~~ > ./lib/zebra.h:276:34: note: expanded from macro 'UNSET_FLAG' > 276 | #define UNSET_FLAG(V,F) (V) &= ~(F) > | ~ ^ > 4 warnings generated. > Static Analysis warning summary compared to base: Fix those issues by protecting the bgp pointer. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
8 daysbgpd: fix import vrf creates multiple bgp instancesPhilippe Guibert3-2/+3
The more the vrf green is referenced in the import bgp command, the more there are instances created. The below configuration shows that the vrf green is referenced twice, and two BGP instances of vrf green are created. The below configuration: > router bgp 99 > [..] > import vrf green > exit > router bgp 99 vrf blue > [..] > import vrf green > exit > router bgp 99 vrf green > [..] > exit > > r4# show bgp vrfs > Type Id routerId #PeersCfg #PeersEstb Name > L3-VNI RouterMAC Interface > DFLT 0 10.0.3.4 0 0 default > 0 00:00:00:00:00:00 unknown > VRF 5 10.0.40.4 0 0 blue > 0 00:00:00:00:00:00 unknown > VRF 6 0.0.0.0 0 0 green > 0 00:00:00:00:00:00 unknown > VRF 6 10.0.94.4 0 0 green > 0 00:00:00:00:00:00 unknown Fix this at import command, by looking at an already present bgp instance. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
8 daysbgpd: fix duplicate BGP instance created with unified configPhilippe Guibert3-23/+27
When running the bgp_evpn_rt5 setup with unified config, memory leak about a non deleted BGP instance happens. > root@ubuntu2204hwe:~/frr/tests/topotests/bgp_evpn_rt5# cat /tmp/topotests/bgp_evpn_rt5.test_bgp_evpn/r1.asan.bgpd.1164105 > > ================================================================= > ==1164105==ERROR: LeakSanitizer: detected memory leaks > > Indirect leak of 12496 byte(s) in 1 object(s) allocated from: > #0 0x7f358eeb4a57 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:154 > #1 0x7f358e877233 in qcalloc lib/memory.c:106 > #2 0x55d06c95680a in bgp_create bgpd/bgpd.c:3405 > #3 0x55d06c95a7b3 in bgp_get bgpd/bgpd.c:3805 > #4 0x55d06c87a9b5 in bgp_get_vty bgpd/bgp_vty.c:603 > #5 0x55d06c68dc71 in bgp_evpn_local_l3vni_add bgpd/bgp_evpn.c:7032 > #6 0x55d06c92989b in bgp_zebra_process_local_l3vni bgpd/bgp_zebra.c:3204 > #7 0x7f358e9e3feb in zclient_read lib/zclient.c:4626 > #8 0x7f358e98082d in event_call lib/event.c:1996 > #9 0x7f358e848931 in frr_run lib/libfrr.c:1232 > #10 0x55d06c60eae1 in main bgpd/bgp_main.c:557 > #11 0x7f358e229d8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58 Actually, a BGP VRF Instance is created in auto mode when creating the global BGP instance for the L3 VNI. And again, an other BGP VRF instance is created. Fix this by ensuring that a non existing BGP instance is not present. If it is present, and with auto mode or in hidden mode, then override the AS value. Fixes: f153b9a9b636 ("bgpd: Ignore auto created VRF BGP instances") Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
8 daysbgpd: fix bgp evpn memory leaks when adj-rib-in is disabledPhilippe Guibert1-11/+17
Some bgp evpn memory contexts are not freed at the end of the bgp process. > ================================================================= > ==1208677==ERROR: LeakSanitizer: detected memory leaks > > Direct leak of 96 byte(s) in 2 object(s) allocated from: > #0 0x7f93ad4b4a57 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:154 > #1 0x7f93ace77233 in qcalloc lib/memory.c:106 > #2 0x563bb68f4df1 in process_type5_route bgpd/bgp_evpn.c:5084 > #3 0x563bb68fb663 in bgp_nlri_parse_evpn bgpd/bgp_evpn.c:6302 > #4 0x563bb69ea2a9 in bgp_nlri_parse bgpd/bgp_packet.c:347 > #5 0x563bb69f7716 in bgp_update_receive bgpd/bgp_packet.c:2482 > #6 0x563bb6a04d3b in bgp_process_packet bgpd/bgp_packet.c:4091 > #7 0x7f93acf8082d in event_call lib/event.c:1996 > #8 0x7f93ace48931 in frr_run lib/libfrr.c:1232 > #9 0x563bb6880ae1 in main bgpd/bgp_main.c:557 > #10 0x7f93ac829d8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58 Actually, the bgp evpn context may noy be used if adj rib in is unused. This may lead to memory leaks. Fix this by freeing the context in those corner cases. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
8 daystopotests: add unified configurationPhilippe Guibert8-66/+49
Replace the various per-daemon config files with a unique frr.conf configuration file. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
8 daystopotests: bgp_evpn_rt5, configure route_distinguisherPhilippe Guibert6-12/+18
When not configuring a route distinguisher, neither route-target, the derived rd settings differ if config load applies with frr.conf or not. For instance, the forged rd with frr.conf: > # show bgp l2vpn evpn json > "192.168.101.41:3":{ > "rd":"192.168.101.41:3", and without: > "192.168.101.41:2":{ > "rd":"192.168.101.41:2", The defined rts also are impacted. Temporay fix this by using an hardset configuration for all route distinguisher and route target of the setups. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
8 daystopotests: bgp_evpn_rt5, add test with match evpn vni commandPhilippe Guibert4-10/+91
Add a test that ensures that the 'match evpn vni' command works with bgp evpn rt5 updates. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
9 daystests: remove table version check in bgp rpki topo1Louis Scalbert1-3/+0
Remove table version check in bgp rpki topo1. Fixes: 5f50b98f8e ("tests: add bgp rpki topo1 rpkiValidationState") Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
9 daysbgpd: Fix for local interface MAC cache issue in 'bgp mac hash' tableKrishnasamy R1-2/+5
Issue: During FRR restart, we fail to add some of the local interface's MAC to the 'bgp mac hash'. Not having local MAC in the hash table can cause lookup issues while receiving EVPN RT-2. Currently, we have code to add local MAC(bgp_mac_add_mac_entry) while handling interface add/up events in BGP(bgp_ifp_up/bgp_ifp_create). But the code 'bgp_mac_add_mac_entry' in bgp_ifp_create is not getting invoked as it is placed under a specific check(vrf->bgp link check). Fix: We can skip this check 'vrf->bgp link existence' as the tenant VRF might not have BGP instance but still we want to cache the tenant VRF local MACs. So keeping this check in bgp_ifp_create inline with bgp_ifp_up. Ticket: #4204154 Signed-off-by: Krishnasamy R <krishnasamyr@nvidia.com>
10 daystopotests: bgp_ipv6_rtadv, add control over bgp updatesPhilippe Guibert3-0/+109
Add a test to control the json values of the incoming BGP update received by an unnumbered BGP. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
10 daysbgpd: fix display json value of interface for BGP unnumberedPhilippe Guibert1-0/+3
The 'show bgp ipv[4,6] json' command does not display the interface value of the nexthop, when BGP sessions are unnumbered, whereas the non json output displays it correctly. The below example indicates 'r1-eth0' wheras in json, the value is not displayed. > r1# show bgp ipv4 > BGP table version is 3, local router ID is 10.254.254.1, vrf id 0 > Default local pref 100, local AS 101 > Status codes: s suppressed, d damped, h history, u unsorted, * valid, > best, = multipath, > i internal, r RIB-failure, S Stale, R Removed > Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self > Origin codes: i - IGP, e - EGP, ? - incomplete > RPKI validation codes: V valid, I invalid, N Not found > > Network Next Hop Metric LocPrf Weight Path > *> 10.254.254.1/32 0.0.0.0 0 32768 ? > *> 10.254.254.2/32 r1-eth0 0 0 102 ? > > Displayed 2 routes and 2 total paths Fix this by adding an 'interface' keyword in the json attributes. > "nexthops":[{"ip":"2001:db8:1::2","hostname":"r2","afi":"ipv6", > "scope":"global"},{"interface":"r1-eth0","ip":"fe80::1868:d7ff:fe66:45ae", > "hostname":"r2","afi":"ipv6","scope":"link-local","used":true}]}] Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
10 daystools: fix regression in gen_northbound_callback toolChristian Hopps1-12/+8
When support for new style `get()` was added inadvertently stopped generating other callbacks and prototypes. Fix this. Signed-off-by: Christian Hopps <chopps@labn.net>
11 dayslib: fix dnode_create to use correct libyang function.Christian Hopps1-7/+18
The previous use of `lyd_new_path()` returns the first node created, rather than the xpath target node. The code is lucky in the sense that it is normally only creating a single node rather than a branch. Fix this to use `lyd_new_path2()` which returns the target node to actually implement the semantics expected by callers of `dnode_create()` (i.e., returning the newly created target node). Signed-off-by: Christian Hopps <chopps@labn.net>
11 daystests: Fix test_bgp_dynamic_capability_enhe topotestDonatas Abraitis1-27/+1
Drop redundant function (duplicate), and reset counters for r2 instead of r1. We check received capabilities on r2, hence we need to flush the counters on r2 too. Fixes: d1cfd730601e5063d126ca1e78be5695fe909a77 ("tests: Check if ENHE capability can be handled dynamically") Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
11 daysdoc: add misplaced doc change for mgmtd developmentChristian Hopps1-4/+9
Signed-off-by: Christian Hopps <chopps@labn.net>
11 daysyang: lint cleanup of test moduleChristian Hopps1-3/+22
Signed-off-by: Christian Hopps <chopps@labn.net>
11 daystests: split notify test to regular and datastore notify testsChristian Hopps2-99/+240
Signed-off-by: Christian Hopps <chopps@labn.net>
11 daysmgmtd: testc: add listen for datastore notificationsChristian Hopps2-11/+100
Signed-off-by: Christian Hopps <chopps@labn.net>
11 dayslib: improve error handling for datastore notificationsChristian Hopps1-61/+87
Signed-off-by: Christian Hopps <chopps@labn.net>
11 dayslib: mgmtd: only send notify selectors to backends that provide.Christian Hopps1-18/+28
- Previously we sent selectors to all backends when a replace was done, improve this to only send them to backends that provide the selected state. Signed-off-by: Christian Hopps <chopps@labn.net>
11 dayslib: mgmt_be_client handles datastore notification using CBsChristian Hopps3-11/+39
Signed-off-by: Christian Hopps <chopps@labn.net>
11 dayslib: yang: add yang_parse_data functionChristian Hopps2-0/+73
This is similar to notify and RPC parsers, but this is for normal datastore data. This is initially used in handling datastore notifications being sent to another backend client[s]. Signed-off-by: Christian Hopps <chopps@labn.net>
12 daysdoc: Add support for SRv6 static sid CLIYuqing Zhao1-0/+49
Add the srv6 static sids configuration and show running-config sections in static.rst. Signed-off-by: Yuqing Zhao <galadriel.zyq@alibaba-inc.com>
12 daystests: Add topotest for SRv6 static SIDsYuqing Zhao5-0/+219
Signed-off-by: Yuqing Zhao <galadriel.zyq@alibaba-inc.com>
12 daysvtysh: Add SRv6 static SIDs CLI to vtyshYuqing Zhao1-5/+33
Signed-off-by: Yuqing Zhao <galadriel.zyq@alibaba-inc.com>
12 daysstaticd: Add CLIs to show SRv6 static SIDsYuqing Zhao1-2/+96
Signed-off-by: Yuqing Zhao <galadriel.zyq@alibaba-inc.com>
12 daysstaticd: Add CLI for SRv6 static SIDsYuqing Zhao2-0/+221
Signed-off-by: Yuqing Zhao <galadriel.zyq@alibaba-inc.com>
12 dayslib: Add CLI node for SRv6 static SIDsYuqing Zhao1-0/+1
Signed-off-by: Yuqing Zhao <galadriel.zyq@alibaba-inc.com>
12 daysstaticd: Add Northbound APIs for SRv6Yuqing Zhao3-0/+281
Add Northbound APIs to create/modify/destroy an SRv6 SID Signed-off-by: Yuqing Zhao <galadriel.zyq@alibaba-inc.com>
12 daysstaticd: Initialize/cleanup SRv6Yuqing Zhao1-0/+8
Signed-off-by: Yuqing Zhao <galadriel.zyq@alibaba-inc.com>
12 daysstaticd: Install SIDs when a dependent interface goes up/downYuqing Zhao3-0/+53
Signed-off-by: Yuqing Zhao <galadriel.zyq@alibaba-inc.com>
12 daysstaticd: Request/Release SIDs to SID ManagerYuqing Zhao2-0/+663
Signed-off-by: Yuqing Zhao <galadriel.zyq@alibaba-inc.com>
12 dayslib, isisd: Move DEFAULT_SRV6_IFNAME to global srv6.h headerYuqing Zhao3-3/+4
This commit moves DEFAULT_SRV6_IFNAME from isis_srv6.h to srv6.h because there are other daemons that might want to use it (e.g. staticd). Signed-off-by: Yuqing Zhao <galadriel.zyq@alibaba-inc.com>
12 daysstaticd: Add infrastructure for SRv6Yuqing Zhao3-0/+235
This commit adds datastructures and helper functions required to support SRv6 in staticd. * List of locators * List of SIDs * Data structure to represent an SRv6 SID * Functions to allocate/deallocate an SRv6 SID * Functions to allocate, deallocate and lookup a locator * Function to initialize/Cleanup SRv6 Signed-off-by: Yuqing Zhao <galadriel.zyq@alibaba-inc.com>
12 dayslib: Add a function to print SRv6 Endpoint Behavior CodepointsYuqing Zhao1-0/+36
Signed-off-by: Yuqing Zhao <galadriel.zyq@alibaba-inc.com>
12 daysstaticd: Add debug option for SRv6Yuqing Zhao3-8/+12
Signed-off-by: Yuqing Zhao <galadriel.zyq@alibaba-inc.com>
12 daysyang: Add SRv6 to frr-staticd YANG modelYuqing Zhao1-1/+101
Signed-off-by: Yuqing Zhao <galadriel.zyq@alibaba-inc.com>