Commit Graph

7905 Commits

Author SHA1 Message Date
Russ White
add56c61dd
Merge pull request #15259 from dmytroshytyi-6WIND/nexthop_resolution
zebra: add LSP entry to nexthop via recursive (part 2)
2024-09-10 10:04:08 -04:00
sri-mohan1
bbfbf3e6b9 bgpd: changes for code maintainability
these changes are for improving the code maintainability and readability

Signed-off-by: sri-mohan1 <sri.mohan@samsung.com>
2024-09-10 10:37:04 +05:30
Donatas Abraitis
7779937850
Merge pull request #16756 from sri-mohan1/srib-24-frr-a
bgpd: changes for code maintainability
2024-09-08 20:42:59 +03:00
Donald Sharp
4ec2f482d1
Merge pull request #16721 from opensourcerouting/fix/drop_not_used_rmap_types
bgpd: Drop unused route-map types
2024-09-06 13:54:34 -04:00
Donald Sharp
bb78f73fa6 bgpd: Reduce # of iterations when doing llgr
Code was scanning a table then identifying a prefix
that needed to be modified then calling code that
reran bestpath on the entire table again.

If you had multiple items that needed processing
you would end up scanning and setting the entire
table to be scanned multiple times.  No bueno.

a) We do not need to reprocess items that are not
being modified.

b) We do not need to walk the entire table multiple
times, we have the data that is needed already.

Modify the code to just call bgp_process on the
interesting nodes.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-09-06 10:39:41 -04:00
sri-mohan1
4406e0058c bgpd: changes for code maintainability
these changes are for improving the code maintainability and readability

Signed-off-by: sri-mohan1 <sri.mohan@samsung.com>
2024-09-06 16:06:52 +05:30
Donald Sharp
340d51fc3a
Merge pull request #16751 from opensourcerouting/fix/solo_peer-group
bgpd: Some peer-groups related changes/fixes
2024-09-05 17:42:20 -04:00
Russ White
5d9ddcce7c
Merge pull request #15676 from cscarpitta/bgp-srv6-sid-manager
bgpd: Extend BGP to communicate with the SRv6 SID Manager to allocate/release SRv6 SIDs
2024-09-05 11:40:48 -04:00
Donatas Abraitis
9de74cf0be bgpd: Show what is the real type of the peer-group
```
ton# sh ip bgp peer-group

BGP peer-group pg-a
  Peer-group type is auto
  Configured address-families: IPv4 Unicast;

BGP peer-group pg-e, remote AS 0
  Peer-group type is external
  Configured address-families: IPv4 Unicast;

BGP peer-group pg-i, remote AS 65001
  Peer-group type is internal
  Configured address-families: IPv4 Unicast;
ton#
```

`auto` should be handled accordingly.

Fixes: 0dfe25697f ("bgpd: Implement neighbor X remote-as auto")

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-09-05 15:48:14 +03:00
Donatas Abraitis
b9d4191a51 bgpd: Allow using solo for peer-groups
Inherit solo flag for peer-group members also.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-09-05 15:16:05 +03:00
Donatas Abraitis
befffb2d51 bgpd: Retry connecting to label manager if failed
Fixes: https://github.com/FRRouting/frr/issues/16747

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-09-05 12:35:51 +03:00
Philippe Guibert
f686609386 bgpd: add locator name in sid notify messages
In the near future, some daemons may only register SIDs. This may be
the case for the pathd daemon when creating SRv6 binding SIDs.

When a locator is getting deleted at ZEBRA level, the daemon may have
an easy way to find out the SIds to unregister to.

This commit proposes to add the locator name to the SID_SRV6_NOTIFY
message whenever possible. Only case when an allocation failure happens,
the locator will not be present. In all other places, the notify API
at procol levels has the locator name extra-parameter.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
2024-09-05 10:59:59 +02:00
Carmine Scarpitta
8227268b8c bgpd: Cleanup related to SRv6
Remove unused SRv6 code.

Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
2024-09-05 10:59:59 +02:00
Carmine Scarpitta
7a2e64e663 bgpd: Receive SRv6 SIDs notification from zebra
Zebra sends a `SRV6_SID_NOTIFY` notification to inform clients about the
result of a SID alloc/release operation.  This commit adds a handler to
process a `SRV6_SID_NOTIFY` notification received from zebra.

If the notification indicates that a SID allocation operation was
successful, then it stores the allocated SID in the SRv6 database,
installs the SID into the RIB, and advertises the SID to the other BGP
routers.

If the notification indicates that an operation has failed, it logs the
error.

Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
2024-09-05 10:59:59 +02:00
Carmine Scarpitta
7a9f26c794 bgpd: Make sid_register() non-static
Make the `sid_register()` function non-static to allow other BGP modules
(e.g. bgp_zebra.c) to register SIDs.

Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
2024-09-05 10:59:59 +02:00
Carmine Scarpitta
2ed0ebdb02 bgpd: Request SRv6 SIDs to SID Manager
Currently, BGP allocates SIDs without interacting with Zebra.

Recently, the SRv6 implementation has been improved. Now, the daemons
need to interact with Zebra through ZAPI to obtain and release SIDs.

This commit extends BGP to request SIDs from Zebra instead of allocating
the SIDs on its own.

Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
2024-09-05 10:59:59 +02:00
Carmine Scarpitta
831b825b89 bgpd: Release SIDs when disabling SRv6 in BGP
When SRv6 VPN is unconfigured in BGP, BGP needs to interact with SID Manager to
release the SID and make it available to other daemons

Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
2024-09-05 10:59:59 +02:00
Carmine Scarpitta
b0be30bbef bgpd: Add API to get/release SRv6 SIDs
Add an API to get/release SRv6 SIDs through the SRv6 SID Manager.

Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
2024-09-05 10:59:59 +02:00
Carmine Scarpitta
8b0fb91865 bgpd: Receive SRv6 locator info from zebra
This commit extends BGP to process locator information received from
SRv6 Manager (zebra) and save the locator info in the SRv6 database.

Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
2024-09-05 10:59:59 +02:00
Carmine Scarpitta
fe5037b703 bgpd: Deal with SRv6 locator instead of chunk
Currently, when SRv6 is enabled in BGP, BGP requests a locator chunk
from Zebra. Zebra assigns a locator chunk to BGP, and then BGP can
allocate SIDs from the locator chunk.

Recently, the implementation of SRv6 in Zebra has been improved, and a
new API has been introduced for obtaining/releasing the SIDs.

Now, the daemons no longer need to request a chunk.

Instead, the daemons interact with Zebra to obtain information about the
locator and subsequently to allocate/release the SIDs.

This commit extends BGP to use the new SRv6 API. In particular, it
removes the chunk throughout the BGP code and modifies BGP to
request/save/advertise the locator instead of the chunk.

Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
2024-09-05 10:59:59 +02:00
Carmine Scarpitta
c50b4b9afc bgpd: Add API to get SRv6 locator info
Add an API to request information from the SRv6 SID Manager (zebra)
regarding a specific SRv6 locator.

Signed-off-by: Carmine Scarpitta <cscarpit@cisco.com>
2024-09-05 10:59:59 +02:00
Loïc Sang
d173522bbf bgpd: remove redundant loopback check in label update
The "if_is_vrf" check is unnecessary because it’s already handled by
"if_get_vrf_loopback". Additionally, it ignores the default loopback and
could introduce potential bugs.

Fixes: 8b81f32e97 ("bgpd: fix label lost when vrf loopback comes back")
Signed-off-by: Loïc Sang <loic.sang@6wind.com>
2024-09-04 09:37:08 +02:00
Donatas Abraitis
40a47a92f4
Merge pull request #16736 from mjstapp/fix_bgp_evpn_if_clause
bgpd: fix duplicated test clause
2024-09-04 08:12:26 +03:00
Mark Stapp
0b10720b61 bgpd: fix duplicated test clause
Fix a duplicated test clause - cut-and-paste mistake, maybe?

Signed-off-by: Mark Stapp <mjs@cisco.com>
2024-09-03 16:11:17 -04:00
Russ White
7ba895f685
Merge pull request #16712 from opensourcerouting/fix/do_not_send_route_refresh_if_no_capability
bgpd: Do not send route-refresh if it wasn't negotiated in capabilities
2024-09-03 10:57:09 -04:00
Donald Sharp
1e32a3098c
Merge pull request #16713 from opensourcerouting/fix/bgpd_parse_received_err
bgpd: Print errors as error not as information when parsing OPEN message
2024-09-03 10:36:16 -04:00
Russ White
8287c0b316
Merge pull request #15605 from donaldsharp/evpn_local_table_warning
bgpd: Ensure evpn local table display shows route send status
2024-09-03 10:19:34 -04:00
Sindhu Parvathi Gopinathan
40c0b891e3 bgpd: fix proper json format for unicast statistics for non exists vrf
Ticket: #4060069

show bgp vrf afi unicast statistics json output is not return in json
format for non exists vrf.

Fix:
Json output is formatted for non exists vrf cases.

Command supported:

```
show bgp vrf <VRFNAME> ipv4/ipv6 unicast statistics json
show bgp vrf <VRFNAME> l2vpn evpn statistics json
```

Before Fix:

```
leaf11#
leaf11# show bgp vrf test ipv4 unicast statistics json
View/Vrf test is unknown
leaf11#
leaf11#
leaf11# show bgp vrf test ipv6 unicast statistics json
View/Vrf test is unknown
leaf11#
leaf11#
leaf11# show bgp vrf default1 l2vpn evpn statistics json
View/Vrf default1 is unknown
leaf11#

```

After Fix:

```
leaf11#
leaf11# show bgp vrf test ipv4 unicast statistics json
{
  "warning":"View/Vrf is unknown"
}
leaf11#
leaf11#
leaf11# show bgp vrf test ipv6 unicast statistics json
{
  "warning":"View/Vrf is unknown"
}
leaf11#
leaf11# show bgp vrf default1 l2vpn evpn statistics json
{
  "warning":"View/Vrf is unknown"
}
leaf11#
```

Ticket: #4060069

Signed-off-by: Sindhu Parvathi Gopinathan's <sgopinathan@nvidia.com>
2024-09-02 17:22:01 -07:00
Donatas Abraitis
4788206b16 bgpd: Drop unused route-map types
When applying the route-map, we always set rmap_type to know who triggered
this action. PEER_RMAP_TYPE_IMPORT/EXPORT was used as a dead-code, and
PEER_RMAP_TYPE_NOSET not used at all.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-09-02 15:32:00 +03:00
Donatas Abraitis
b120c4f1aa bgpd: Print errors as error not as information when parsing OPEN message
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-09-01 22:42:54 +03:00
Donatas Abraitis
19a85c68bf bgpd: Do not send route-refresh if it wasn't negotiated in capabilities
Fixes: 04dfcb14ff ("bgpd: Deprecate Prestandard Route Refresh capability (128)")

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-09-01 22:35:22 +03:00
Donald Sharp
d97c535c1e *: Create termtable specific temp memory
When trying to track down a MTYPE_TMP memory leak
it's harder to search for it when you happen to
have some usage of ttable_dump.  Let's just give
it it's own memory type so that we can avoid
confusion in the future.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-09-01 13:07:46 -04:00
Donald Sharp
4dd9d1176f bgpd: Ensure evpn local table display shows route send status
evpn has a concept of `local` tables where the evpn routes
are actually converted into underlying routes/neighbor
table entries( or vice versa ).  Then this local route
is propagated to the global evpn l2vpn table and sent
to the peers.  Certain show commands in evpn look
operate on the local table but make the output look
like the data has not been sent to the peer.  This
is confusing for the operator.  Modify the code
such that local tables get a `Local BGP table not advertised`
in the place where the code talks about whom has received
the data or not.

Example:
torm11# show bgp l2vpn evpn route vni 1000 mac 8a:a1:cc:73:a3:ac ip 45.0.0.5
BGP routing table entry for [2]:[0]:[48]:[8a:a1:cc:73:a3:ac]:[32]:[45.0.0.5]
Paths: (2 available, best #2)
  Local BGP table not advertised
  Route [2]:[0]:[48]:[8a:a1:cc:73:a3:ac]:[32]:[45.0.0.5] VNI 1000
  Imported from 192.168.100.18:2:[2]:[0]:[48]:[8a:a1:cc:73:a3:ac]:[32]:[45.0.0.5], VNI 1000
  65101 65005
    192.168.100.18(leaf2) from leaf2(192.168.5.1) (192.168.100.14)
      Origin IGP, valid, external
      Extended Community: RT:65005:1000 ET:8
      Last update: Thu Mar 21 14:29:04 2024
  Route [2]:[0]:[48]:[8a:a1:cc:73:a3:ac]:[32]:[45.0.0.5] VNI 1000
  Imported from 192.168.100.18:2:[2]:[0]:[48]:[8a:a1:cc:73:a3:ac]:[32]:[45.0.0.5], VNI 1000
  65101 65005
    192.168.100.18(leaf1) from leaf1(192.168.1.1) (192.168.100.13)
      Origin IGP, valid, external, bestpath-from-AS 65101, best (Router ID)
      Extended Community: RT:65005:1000 ET:8
      Last update: Thu Mar 21 14:29:04 2024

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-08-30 16:23:20 -04:00
Donatas Abraitis
3d2c589766
Merge pull request #16655 from louis-6wind/fix-bmp-bpi-extra
bgpd: fix labels static-analyser
2024-08-27 22:14:13 +03:00
Donald Sharp
ae49b992ae
Merge pull request #16651 from opensourcerouting/fix/blackhole_community_bgpd
bgpd: Respect BLACKHOLE community for internal BGP peering also
2024-08-27 15:11:00 -04:00
Russ White
3150d963e6
Merge pull request #16652 from opensourcerouting/fix/prefix_sid_handling
bgpd: Filter Prefix-SID, Encap, PMSI Tunnel
2024-08-27 10:57:44 -04:00
Donatas Abraitis
7a461479a0 bgpd: Respect BLACKHOLE community for internal BGP peering also
rfc7999 does not define to use this technique ONLY for EBGP sessions.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-08-27 10:08:54 +03:00
Louis Scalbert
a152692f5a bgpd: fix labels static-analyser
Fix static-analyser warnings with BGP labels:

> $ scan-build make -j12
> bgpd/bgp_updgrp_packet.c:819:10: warning: Access to field 'extra' results in a dereference of a null pointer (loaded from variable 'path') [core.NullDereference]
>                                                 ? &path->extra->labels->label[0]
>                                                    ^~~~~~~~~

Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2024-08-26 10:29:12 +02:00
Donatas Abraitis
d84cae2db7 bgpd: Set encap attribute if received and parsed
It's not used much in the code, but we should have it set when everything is fine.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-08-25 19:15:10 +03:00
Donatas Abraitis
b713df85bd bgpd: Allow filtering Encap attribute
Filtering this attribute via `path-attribute discard/treat-as-widthraw`.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-08-25 19:11:01 +03:00
Donatas Abraitis
f0bb2626ef bgpd: Allow filtering PMSI Tunnel attribute
Filtering this attribute via `path-attribute discard/treat-as-widthraw`.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-08-25 19:05:53 +03:00
Donatas Abraitis
f390253ca7 bgpd: Allow filtering Prefix-SID attribute
Filtering this attribute via `path-attribute discard/treat-as-widthraw`.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-08-25 19:03:05 +03:00
Donald Sharp
f85dfb3f1a
Merge pull request #16649 from opensourcerouting/fix/free_memory_on_return
bgpd: Free epvn_overlay memory on error
2024-08-24 15:30:45 -04:00
Donatas Abraitis
5eb80edf97 bgpd: Free epvn_overlay memory on error
When parsing EVPN NLRIs, and an error occurred, do no forget to free the memory.

Fixes: 4ace11d010 ("bgpd: Move evpn_overlay to a pointer")

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-08-24 11:58:48 +03:00
Donatas Abraitis
8d4c70697b
Merge pull request #16631 from pguibert6WIND/imported_from_l3nhg_json
bgpd: add json support for BGP L3NHG values
2024-08-24 09:32:49 +03:00
Philippe Guibert
3c2273178d bgpd: add json support for BGP L3NHG values
Some json attributes are missing for L3NHG values.

> PE1# show bgp vrf all detail
> [..]
> Instance vrf-purple:
> BGP table version is 1, local router ID is 27.3.0.85, vrf id 7
> Default local pref 100, local AS 65000
> BGP routing table entry for fe80::4620:ff:feff:ff01/128, version 1
> Paths: (1 available, best #1, vrf vrf-purple)
>   Not advertised to any peer
>   Imported from 10.30.30.30:5:[2]:[0]:[48]:[44:20:00:ff:ff:01]:[128]:[fe80::4620:ff:feff:ff01], VNI 4000  Local
>     ::ffff:a1e:1e1e (metric 20) from 10.30.30.30 (10.30.30.30) announce-nh-self
>       Origin IGP, localpref 100, valid, internal, best (First path received)
>       Extended Community: RT:65000:4000 ET:8
>       Last update: Thu Aug 22 18:23:38 2024
>
> Displayed 1 routes and 1 total paths

> PE1# show bgp vrf all json detail
> {
> "vrf-purple":{
>  "vrfId": 7,
>  "vrfName": "vrf-purple",
>  "tableVersion": 1,
>  "routerId": "27.3.0.85",
>  "defaultLocPrf": 100,
>  "localAS": 65000,
>  "routes": { "fe80::4620:ff:feff:ff01/128": [{"importedFrom":"10.30.30.30:5","l3nhg":false,"l3nhgActive":false, "vni": "4000",
> "aspath":{"string":"Local","segments":[],"length":0},"announceNexthopSelf":true,"origin":"IGP","locPrf":100,
> "valid":true,"version":1,"bestpath":{"overall":true,"selectionReason":"First path received"},
> "extendedCommunity":{"string":"RT:65000:4000 ET:8"},"lastUpdate":{"epoch":1724343817,
> "string":"Thu Aug 22 18:23:37 2024\n"},
> "nexthops":[{"ip":"::ffff:a1e:1e1e","hostname":"PE2","afi":"ipv6",
> "scope":"global","metric":20,"accessible":true,"used":true}],
> "peer":{"peerId":"10.30.30.30","routerId":"10.30.30.30","hostname":"PE2","type":"internal"}}]
>  }  }
> }

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2024-08-23 10:37:51 +02:00
Jafar Al-Gharaibeh
8f6c7c39e7
Merge pull request #16632 from donaldsharp/SA_warnings_from_upstream
Sa warnings from upstream
2024-08-22 18:25:11 -04:00
Donald Sharp
3d8ccdb115
Merge pull request #16615 from Jafaral/revert-v4-v6-bgp
Revert ipv4-mapped ipv6 and 6vpe nexthop in BGP
2024-08-22 17:57:38 -04:00
Donald Sharp
4344ac1d28 bgpd: global_gr_mode does not need to be set twice
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-08-22 13:32:20 -04:00
Jafar Al-Gharaibeh
741c030395 Revert "Merge pull request #15368 from louis-6wind/fix-6pe"
This reverts commit df98e88368, reversing
changes made to b652119235.
2024-08-22 10:38:09 -05:00