Commit Graph

6094 Commits

Author SHA1 Message Date
sri-mohan1
a10c287292 bgpd: changes for code maintainability
these changes are for improving the code maintainability

Signed-off-by: sri-mohan1 <sri.mohan@samsung.com>
2022-09-02 00:31:40 +05:30
Russ White
fdbff7d1a8
Merge pull request #11805 from opensourcerouting/fix/treat_as_withdraw_if_as_set
bgpd: Treat as withdraw if we receive as path with AS_SET / AS_CONFED_SET
2022-08-16 11:17:41 -04:00
Donatas Abraitis
606d49a4ca bgpd: Change warning message when BGP community-list is not found
Before:

```
donatas-laptop# show bgp ipv4 unicast community-list testas
% testas is not a valid community-list name
donatas-laptop# con
donatas-laptop(config)# bgp community-list standard testas permit internet
donatas-laptop(config)# do show bgp ipv4 unicast community-list testas
donatas-laptop(config)#
```

`is not a valid community-list name` is a misleading warning message.

Doing the same for filter-list, access-list, prefix-list, route-map.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-08-16 09:32:36 +03:00
Donatas Abraitis
1bd367634e bgpd: Treat as withdraw if we receive as path with AS_SET / AS_CONFED_SET
For now, only if the knob is enabled. Later this gonna be (most likely) removed
and routes with AS_SET / AS_CONFED_SET will be denied by default.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-08-15 21:41:15 +03:00
Donald Sharp
3e140309a3 bgpd: Ensure bgp_vrf is non-null
When calling VTY_GET_CONTEXT to get the bgp pointer,
FRR needs to ensure that the pointer is valid.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-15 11:24:42 -04:00
Donatas Abraitis
0b1fb52c2a bgpd: Convert some int functions to void
The output is not checked, we can have void instead.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-08-12 13:26:38 +03:00
Quentin Young
0655090c6e bgpd: don't adv conditionally withdrawn routes
If we have conditional advertisement enabled, and conditionally withdrew
some prefixes, and then we do a 'clear bgp', those routes were getting
advertised again, and then withdrawn the next time the conditional
advertisement scanner executed.

When we go to advertise check the prefix against the conditional
advertisement status so we don't do that.

Signed-off-by: Quentin Young <qlyoung@nvidia.com>
2022-08-11 10:58:17 -04:00
Quentin Young
f373ce6cfc bgpd: apply cond-adv policy to update group
The new outbound filter to apply conditional advertisement policy was
not working properly due to complications with update groups. The two
routemaps were properly copied into the update group peer filter but not
the conditional advertisement state.

Signed-off-by: Quentin Young <qlyoung@nvidia.com>
Signed-off-by: Mark Stapp <mstapp@nvidia.com>
2022-08-11 10:58:17 -04:00
Russ White
8eb2b1e8ea
Merge pull request #11752 from opensourcerouting/fix/update_policy_on_filters
bgpd: Handle ORF remove-all events correctly and update ORF prefix-list on changes
2022-08-09 08:32:33 -04:00
Donatas Abraitis
6595c22971 bgpd: When specifying listen address for bgpd we shouldn't imply no fib flag
When `-l` is used, then no routes are exported to the kernel.

```
$ grep bgpd_options /etc/frr/daemons
bgpd_options="   -A 127.0.0.1 -l 127.0.0.2"
```

Before:

```
donatas-pc# sh run | include no-rib
bgp no-rib
donatas-pc#
```

After:

```
donatas-pc# sh run | include no-rib
donatas-pc#
```

Signed-off-by: Kris Shannon <k.shannon@amaze.com.au>
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-08-08 21:30:14 +03:00
Donatas Abraitis
40f04448cc
Merge pull request #11623 from taspelund/prefer_mp_nexthop
bgpd: ignore NEXT_HOP for MP_REACH_NLRI
2022-08-08 10:18:57 +03:00
Donatas Abraitis
f1aa49293a bgpd: Send route update when modifying access/aspath/prefix lists
Handle ORF REMOVE_ALL events as well, because now we just silently return, and
a stale dynamic prefix-list is used instead of the new one.

Before this, soft clear/route refresh was needed. Don't know the reason, but
we didn't send updates when modifying the filters.

Probably due to a massive change of filters and to avoid automatic updates :/

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-08-05 15:06:00 +03:00
Donatas Abraitis
b84e087e28
Merge pull request #11741 from Pdoijode/bgp-evpn-flood-op-chg-master
bgpd: addition of vxlanFlooding field in show output
2022-08-05 14:41:17 +03:00
Trey Aspelund
7226bc40d6 bgpd: ignore NEXT_HOP for MP_REACH_NLRI
RFC 4760 states we SHOULD ignore the NEXT_HOP attribute for BGP Update
messages carrying only MP_REACH_NLRI attributes. Thus we should use the
Network Address of Next Hop field of the MP_REACH_NLRI as the nexthop.

Instead of always looking for BGP_ATTR_NEXT_HOP, this commit ensures:
1) we set mp_nexthop_len to BGP_ATTR_NHLEN_IPV4 for v4 bgp_static routes
2) we check mp_nexthop_len when choosing the nexthop to use for nht
3) we check mp_nexthop_len when choosing the nexthop to send to zebra
4) we check mp_nexthop_len when picking the nexthop to shown by vtysh

Reported-by: Binon Gorbutt <binon@aervivo.com>
Signed-off-by: Trey Aspelund <taspelund@nvidia.com>
2022-08-04 20:36:49 +00:00
Pdoijode
02dd2dd6c3 bgpd: addition of vxlanFlooding field to show output
Instead of changing the value of 'BUM flooding' field in
'show bgp l2vpn evpn vni' vty and JSON command from
'Head-end replication' to 'enabled', adding a new field named
'vxlanFlooding' to 'show bgp l2vpn evpn vni' vty and JSON output.

This is done to maintain backward compatibility.'BUM flooding' field
in vty and JSON output will be deprecated later.

Signed-off-by: Pooja Doijode <pdoijode@nvidia.com>
2022-08-04 11:28:33 -07:00
Trey Aspelund
109153dde8 bgpd: add BGP_ATTR_MP_NEXTHOP_LEN_IP6 macro
Move the logic to check the mp_nexthop_len against v6 lengths into its
own macro so we can apply that logic elsewhere on its own without always
checking for presence of BGP_ATTR_NEXT_HOP.

Signed-off-by: Trey Aspelund <taspelund@nvidia.com>
2022-08-04 17:54:42 +00:00
Donald Sharp
06479e6658
Merge pull request #11739 from opensourcerouting/fix/bgp_best_path_select_defer
bgpd: bgp_best_path_select_defer never returns negative
2022-08-04 07:18:47 -04:00
Trey Aspelund
8923315db4 bgpd: fix show bgp l2vpn evpn route rd crashes
bgpd was crashing every time `show bgp l2vpn evpn route rd` was issued
with an RD that didn't match "all".  This was introduced by 9b01d28988
which changed how argv_find() is handled in various vtysh commands, but
the new changes forgot a "!".  So let's re-add the "!".

Before:
```
ub20# show bgp l2vpn evpn route rd 399672:100
vtysh: error reading from bgpd: Resource temporarily unavailable (11)Warning: closing connection to bgpd because of an I/O error!
ub20#

ub20# show bgp l2vpn evpn route rd 399672:100 mac 11:11:11:11:11:11
vtysh: error reading from bgpd: Resource temporarily unavailable (11)Warning: closing connection to bgpd because of an I/O error!
ub20#
```

After:
```
ub20# show bgp l2vpn evpn route rd 399672:100
ub20#

ub20# show bgp l2vpn evpn route rd 399672:100 mac 11:11:11:11:11:11
% Network not in table
ub20#
```

Signed-off-by: Trey Aspelund <taspelund@nvidia.com>
2022-08-04 01:50:54 +00:00
Donatas Abraitis
42c9383767 bgpd: bgp_best_path_select_defer never returns negative
Just drop the test and convert to void.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-08-03 18:43:01 +03:00
Donatas Abraitis
ed12638288 bgpd: Add show bgp access-list command to filter routes by ACL
The same as with prefix-list/route-maps/etc.

```
donatas-pc# show ip access-list spine
ZEBRA:
Zebra IP access list spine
    seq 5 permit 200.200.200.200/32
BGP:
Zebra IP access list spine
    seq 5 permit 200.200.200.200/32
PIM:
Zebra IP access list spine
    seq 5 permit 200.200.200.200/32
BABELD:
Zebra IP access list spine
    seq 5 permit 200.200.200.200/32
donatas-pc# show bgp ipv4 unicast access-list
  ACCESSLIST_NAME  Access-list name
     spine
donatas-pc# show bgp ipv4 unicast access-list spine
BGP table version is 9, local router ID is 172.17.0.3, vrf id 0
Default local pref 100, local AS 1
Status codes:  s suppressed, d damped, h history, * 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
*> 200.200.200.200/32
                    enp3s0                   0             0 65000 3456 ?

Displayed  1 routes and 10 total paths
donatas-pc#
```

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-08-03 12:58:14 +03:00
Pooja
6f086a7f35 bgpd: BUM flooding display change
Changed BUM flooding output in 'show bgp l2vpn evpn vni'
command from 'Head-end replication' to 'Enabled'

Signed-off-by: Pooja Doijode <pdoijode@nvidia.com>
2022-08-02 15:16:14 -07:00
Russ White
084ad13530
Merge pull request #11684 from donaldsharp/cleanup_for_dev_builds
Cleanup for dev builds
2022-08-02 09:02:55 -04:00
Donald Sharp
ad9b47e65e
Merge pull request #11691 from mxyns/bmp-vpnv4monupd-fix
bgpd: fixed bmp vpnv4 monitoring sending withdraws instead of updates
2022-08-01 07:49:18 -04:00
Donald Sharp
102aeba008
Merge pull request #11692 from opensourcerouting/fix/bgpd_as_override
bgpd: Override ASN without checking if an entire as-path is from a single ASN
2022-08-01 07:19:11 -04:00
Donald Sharp
7b6cee8975 bgpd: use pI4
The bgp_path_info_to_ipv6_nexthop will correctly set
the nexthop value. There is no need to test this to
display something that won't be used in debug

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-07-29 18:31:58 -04:00
mxyns
e7e1561fbb bgpd: fixed bmp vpnv4 monitoring are withdraws instead of updates
fixes the recent support bmp monitor of VPNv4 afi/safi
the bmp updates messages (MP_REACH_NLRI) are never sent for VPNv4 and bmp withdraws (MP_UNREACH_NRLI) are sent instead
this is caused by bgp_node_lookup which fails to find VPNv4 bgp_node in the rib which results in NULL path info attributes passed to bmp_monitor
using bgp_afi_node_lookup instead of bgp_node_lookup solves the problem

Signed-off-by: Maxence Younsi <mx.yns@outlook.fr>
2022-07-29 20:07:21 +02:00
Donatas Abraitis
9bbdb4572d bgpd: Do not check if the whole as-path has target ASN when using as-override
as-override didn't work if the entire as-path is not a single ASN (as a target).

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-07-29 20:43:22 +03:00
Donald Sharp
f609bcd6a6 bgpd: Safi can be SAFI_MAX which would allow a write beyond alloced
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-07-28 18:01:09 -04:00
Donatas Abraitis
8ff746efcb
Merge pull request #11695 from donaldsharp/afi_max
bgpd: Ensure we are not using AFI_MAX
2022-07-28 18:32:24 +03:00
Donald Sharp
dda5a082af
Merge pull request #11693 from opensourcerouting/fix/unlock_bgp_dest
bgpd: Unlock bgp_node after bgp_node_lookup
2022-07-28 11:30:11 -04:00
Donatas Abraitis
a25ae82fd4 bgpd: Unlock bgp_node after bgp_node_lookup
bgp_node_lookup increments lock, we should decrement it after use.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-07-28 14:36:38 +03:00
Donald Sharp
7622259e3c bgpd: Improve indentation in bgp_updgrp_adv.c
This file was hard to read due to heavy indentation.
Let's fix it up some.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-07-27 12:17:16 -04:00
Donald Sharp
d880a643d7 bgpd: Ensure we are not using AFI_MAX
When using bgp_vty_afi_from_str it can
return AFI_MAX( but in practice never will with
our cli ).  In bgp_default_afi_safi_cmd the code
directly references:
	bgp->default_afi[afi][safi] = TRUE;

and if afi is AFI_MAX FRRR would be accessing
memory where it should not be.

Let's just provide some assurances for coverity
that this never happens.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-07-27 09:36:17 -04:00
Donatas Abraitis
c41e93720a bgpd: Reset BGP sessions when changing the port
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-07-27 11:44:07 +03:00
Donatas Abraitis
a3aecc99d5 bgpd: Allow setting custom port for BGP unnumbered peers
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-07-27 11:36:15 +03:00
Donatas Abraitis
4a16d62977
Merge pull request #11678 from donaldsharp/valgrind_me
Valgrind me
2022-07-27 10:29:29 +03:00
Donald Sharp
62bf6b4200 bgpd: Fixup pbr rule changes that were missed
In commit: d70a31a3ef

the Zapi ZEBRA_RULE_ADD message was modified but
the bgp version was not updated appropriately and
when zebra received the message it did not properly
read it.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-07-26 12:41:11 -04:00
Donald Sharp
1af6e82b81 bgpd: Remove newlines from zlog, they are not allowed
commit: a486300b26
introduced newlines in zlog_XX messaging.  Not allowed.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-07-26 10:06:38 -04:00
Russ White
2ade1c0059
Merge pull request #11582 from liwg06/master
bgpd: Fixup some MAC address token cli syntax
2022-07-26 09:20:45 -04:00
Russ White
3bf3144517
Merge pull request #11523 from pguibert6WIND/bgp_no_retain
Bgp no retain
2022-07-26 08:50:59 -04:00
Donald Sharp
749cf3c23d
Merge pull request #11674 from opensourcerouting/fix/cleanup_subgrpoup_hash_on_update_group_delete
bgpd: Cleanup subgroup hash when we delete/merge a subgroup
2022-07-25 16:50:03 -04:00
Donatas Abraitis
4d28080cb1 bgpd: Rename baa_new/baa_free/etc functions to be human-readable
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-07-25 16:45:06 +03:00
Donatas Abraitis
e92cf867a6 bgpd: Cleanup subgroup hash when we delete/merge a subgroup
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-07-25 10:20:28 +03:00
Donald Sharp
9c24c1580a
Merge pull request #11666 from opensourcerouting/fix/memory_leak_for_regexp_bgp_aspath
bgpd: Free memory for as-path filter if regexp is wrong
2022-07-23 07:40:30 -04:00
Donatas Abraitis
8fc5cba9f8
Merge pull request #11661 from donaldsharp/bnc_debugs
bgpd: LL peers need bnc's per peer
2022-07-23 13:11:32 +03:00
Donald Sharp
ff6db1027f bgpd: Make sure hdr length is at a minimum of what is expected
Ensure that if the capability length specified is enough data.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-07-22 13:56:54 -04:00
Donatas Abraitis
e88307cf3c bgpd: Free memory for as-path filter if regexp is wrong
Before:

```
$ vtysh -c 'sh memory bgpd | include Temporary'; echo ; for x in $(seq 1 1000); do vtysh -c 'conf' -c 'bgp as-path access-list belekas permit wrong' >/dev/null; done; vtysh -c 'sh memory bgpd | include Temporary'
Temporary memory              :       19 variable       504       22       656
Temporary memory              :     1019 variable     24504     1023     24656
```

After:

```
$ vtysh -c 'sh memory bgpd | include Temporary'; echo ; for x in $(seq 1 1000); do vtysh -c 'conf' -c 'bgp as-path access-list belekas permit wrong' >/dev/null; done; vtysh -c 'sh memory bgpd | include Temporary'
Temporary memory              :       19 variable       504       22       656
Temporary memory              :       19 variable       504       24       680
```

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-07-22 17:43:45 +03:00
Donald Sharp
35aae5c9bc bgpd: LL peers need bnc's per peer
FRR should create a bnc per peer.  Not have
one's that write over others.  Currently when
FRR has multiple Interface based peering, BGP wa
creating a single BNC.  This is insufficient in that
we were accidently overwriting the one LL with other
data.  This causes issues when there are multiple and
there is weird starting issues with those interfaces
that you are peering over.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-07-22 09:09:39 -04:00
Donatas Abraitis
f709b31b88 bgpd: Call a hook when as-path filter is replaced
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-07-22 14:16:02 +03:00
Donatas Abraitis
eed5b70f94
Merge pull request #11657 from donaldsharp/why_timer
convert thread_cancel to THREAD_OFF
2022-07-22 08:26:08 +03:00