Commit Graph

5212 Commits

Author SHA1 Message Date
Igor Ryzhov
6a09e0a34a
Merge pull request #9038 from donaldsharp/realloc_bgp
bgpd: XREALLOC handles NULL properly
2021-07-16 13:17:47 +03:00
Donald Sharp
0f8de6a8d8
Merge pull request #9055 from ton31337/fix/show_pfxsnt_even_when_default_route_originated
bgpd: Reflect changes to pfxSnt when using default-originate
2021-07-15 15:54:01 -04:00
Donatas Abraitis
fea96c555b bgpd: Increase sent prefix count per subgrp when originating default route
Before we didn't count default-originate to pfxSnt.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-07-14 23:55:20 +03:00
Rafael Zalamena
373de4b5b0 bgpd: fix crash during configuration removal
Test the BFD config pointer before trying to free the session as it
might not exist.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2021-07-14 14:42:48 -03:00
Donatas Abraitis
558fbe6fac
Merge pull request #8893 from qlyoung/bgp-condadv-timer
bgpd: add knob to config cond-adv scanner period
2021-07-14 08:04:16 +03:00
Donald Sharp
6e95e6419c
Merge pull request #9039 from ton31337/fix/no_need_to_check_for_null_in_cmp_functions
bgpd: Do not check for NULL values for vni_hash_cmp()
2021-07-13 16:42:23 -04:00
Quentin Young
389e4f92d6 bgpd: add knob to config cond-adv scanner period
Adds a knob that sets the time between loc-rib scans for conditional
advertisement.

I chose the range (5-240) because 1 second seems dumb and too easy to
hurt yourself at even moderate scale, 5 seconds you can still hurt
yourself but I could see a use case for it, and 4 minutes should be
enough for anyone (tm)

Signed-off-by: Quentin Young <qlyoung@nvidia.com>
2021-07-13 13:19:14 -04:00
Donald Sharp
4c91056c86
Merge pull request #8961 from pguibert6WIND/bgp_unnumbered_config_find_nexthop
bgpd: associate correct nexthop when using peer link-local
2021-07-13 11:55:14 -04:00
Russ White
92eca6eb13
Merge pull request #9015 from Prerana-GB/GR
bgpd: Inconsistency in Local BGP GR state.
2021-07-13 11:39:31 -04:00
Donatas Abraitis
fab8462cca
Merge pull request #9036 from donaldsharp/hash_cmp_stuff
bgpd: hash compare functions never receive null values
2021-07-13 16:27:27 +03:00
Russ White
171b5527b9
Merge pull request #8734 from imzyxwvu/paf-deactivate
bgpd: Do not delete peer_af structure when deactivating peer-group from an address-family.
2021-07-13 06:35:30 -04:00
Donatas Abraitis
ce40c6279a bgpd: Do not check for NULL values for vni_hash_cmp()
There is no need to test for null values in the hash compare
function as that we are guaranteed to send in data in
the hash compare functions.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-07-13 08:46:52 +03:00
Donald Sharp
0b04fa0e78 bgpd: XREALLOC handles NULL properly
the realloc man page:

If ptr is NULL, then the call is equivalent to malloc(size)

This should be sufficient for our needs to not have to have
XMALLOC and XREALLOC

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-07-12 19:32:42 -04:00
Donald Sharp
63245a641a bgpd: hash compare functions never receive null values
There is no need to test for null values in the hash compare
function as that we are guaranteed to send in data in
the hash compare functions.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-07-12 14:23:51 -04:00
Philippe Guibert
abe6805421 bgpd: associate correct nexthop when using peer link-local
When setting bgp configuration using peers referencing link local
ipv6 addresses, the bgp should be able to handle incoming bgp
connections, and find out the appropriate interface where the
connection comes from.

ipv6 link local sessions work by using bgp unnumbered interfaces
config, but it does not work if we have a shared media with
multiple potential link local ipv6 addresses on the network.

The fix consists in finding out the appropriate interface, when
the local configuration references a link local ipv6 addresses,
and the source address used references an interface. below
configuration illustrates what can be done then:

neighbor fe80::4113:5bba:2b61:b20c remote-as 55
neighbor fe80::4113:5bba:2b61:b20c update-source eth0

note: this change does not solve the ability for such config to
create an outgoing connection to remote peer (as the link local
ipv6 address config does not indicate which interface to use).

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2021-07-12 09:23:22 +02:00
Donatas Abraitis
70d9b134f6 bgpd: Don't forget bgp_dest_unlock_node for bgp_static_set()
Before returning an error, unlock bgp dest which is locked by
bgp_node_lookup().

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-07-11 23:39:53 +03:00
prerana
3f98a750c2 bgpd: Inconsistency in Local BGP GR state.
Problem: Sometimes the configured Local GR state is not reflected in
show command and peer node. This is causing failures in few of the
BGP-GR topotests.

RCA: This problem is seen when the configuration of local GR state
happens when the BGP session is in OpenSent state and  moves to
Established after the configuration is complete.
When the session gets established, we move the GR state value from stub peer
to the config peer. This will result in overriding the GR state to
previous value.

Fix: The local GR state is modified only through CLI configuration and
does not change during BGP FSM transition. In this case it is not necessary
to transfer the GR state value from stub peer to config peer. This way we
can ensure that always the most recent config value is present in peer
datastructure.

Signed-off-by: Prerana-GB <prerana@vmware.com>
2021-07-09 00:20:15 -07:00
Donald Sharp
75e8e36b4d
Merge pull request #8945 from ton31337/fix/check_only_ebgp_peer
bgpd: Parse as withdrawal if AS-PATH contains 0 within the path
2021-07-06 16:06:54 -04:00
Donald Sharp
acb4c44ef8
Merge pull request #8942 from ton31337/fix/cleanups_2
Another round of cleanup
2021-07-06 09:47:41 -04:00
Donald Sharp
4afc321825
Merge pull request #8972 from ton31337/fix/bgp_extended_msg_support
bgpd: Extended message support potential fixes
2021-07-06 09:41:45 -04:00
zyxwvu Shi
3057d1e45a bgpd: Do not delete peer_af when deactivating peer-group.
There is no peer_af allocated in `peer_activate`. Trying to delete
the structure just results in an no-op and a error return value.
The error message "couldn't delete af structure for peer" is
unexpected.

Signed-off-by: zyxwvu Shi <shiyuchen.syc@bytedance.com>
2021-07-06 19:51:39 +08:00
Donatas Abraitis
56fd30a303
Merge pull request #8958 from pguibert6WIND/choose_ipv6_linklocal_nht
bgpd: nht unresolved with global address next-hop
2021-07-06 14:27:15 +03:00
Patrick Ruddy
9c8b904960
Merge pull request #8976 from ton31337/fix/bgp_dest_unlock_node
bgpd: Unlock bgp_dest for bgp_distance_unset if distance does not match
2021-07-06 09:03:40 +01:00
Quentin Young
71bae95e4a
Merge pull request #8888 from dlqs/lua-call 2021-07-05 04:13:20 +00:00
Donatas Abraitis
89f4bd87dd bgpd: Unlock bgp_dest for bgp_distance_unset if distance does not match
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-07-03 22:16:31 +03:00
Donatas Abraitis
0997ee2611 bgpd: Show max packet size per update-group
```
exit1-debian-9# sh ip bgp update-groups
Update-group 2:
  Created: Fri Jul  2 20:47:23 2021
  MRAI value (seconds): 0

  Update-subgroup 2:
    Created: Fri Jul  2 20:47:23 2021
    Join events: 1
    Prune events: 0
    Merge events: 0
    Split events: 0
    Update group switch events: 0
    Peer refreshes combined: 0
    Merge checks triggered: 0
    Coalesce Time: 1200
    Version: 14
    Packet queue length: 0
    Total packets enqueued: 8
    Packet queue high watermark: 1
    Adj-out list count: 11
    Advertise list: empty
    Flags:
    Max packet size: 65535
    Peers:
      - eth1
Update-group 3:
  Created: Fri Jul  2 20:47:43 2021
  MRAI value (seconds): 0

  Update-subgroup 3:
    Created: Fri Jul  2 20:47:43 2021
    Join events: 1
    Prune events: 0
    Merge events: 0
    Split events: 0
    Update group switch events: 0
    Peer refreshes combined: 0
    Merge checks triggered: 0
    Coalesce Time: 1200
    Version: 14
    Packet queue length: 0
    Total packets enqueued: 8
    Packet queue high watermark: 1
    Adj-out list count: 11
    Advertise list: empty
    Flags:
    Max packet size: 4096
    Peers:
      - 192.168.10.17
```

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-07-03 11:17:37 +03:00
Donatas Abraitis
0db06e3785 bgpd: Set 4096 instead of 65535 as new max packet size for a new peer
New peers should be initialized with a usual max packet size and later
determined on OPEN messages.

Testing with different peers supporting/not supporting extended support.

2021/07/02 13:48:00 BGP: [WEV7K-2GAQ5] u2:s2 send UPDATE len 8991 (max message len: 65535) numpfx 1788
2021/07/02 13:48:03 BGP: [WEV7K-2GAQ5] u3:s3 send UPDATE len 4096 (max message len: 4096) numpfx 809
2021/07/02 13:48:03 BGP: [WEV7K-2GAQ5] u3:s3 send UPDATE len 4096 (max message len: 4096) numpfx 809

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-07-03 11:17:37 +03:00
Donatas Abraitis
cecd7358f9 bgpd: Create another update-group depending on max bgp packet size
This should be garuanteed that we create a separate update-group if
bgp max packet size differs.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-07-03 11:17:37 +03:00
Mark Stapp
0a9fcd96d1
Merge pull request #8970 from ton31337/fix/use_IPV6_MAX_BITLEN
*: Do not use 32/128 numbers for prefixlen
2021-07-02 07:52:22 -04:00
Donatas Abraitis
8643c2e5f7 *: Replace 4/16 integers to IPV4_MAX_BYTELEN/IPV6_MAX_BYTELEN
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-07-01 23:54:39 +03:00
Donatas Abraitis
12256b84a5 *: Convert numeric 32 into IPV4_MAX_BITLEN for prefixlen
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-07-01 23:50:39 +03:00
Igor Ryzhov
5a1b002b60
Merge pull request #8962 from donaldsharp/bgp_ll_must_be_there
bgpd: Ensure v6 LL address is available before establishing peering
2021-07-01 20:20:23 +03:00
Donatas Abraitis
13ccce6e7e *: Convert numeric 128 into IPV6_MAX_BITLEN for prefixlen
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-07-01 17:53:21 +03:00
Donatas Abraitis
936fbaef47 *: Replace IPV4_MAX_PREFIXLEN to IPV4_MAX_BITLEN
Just drop IPV4_MAX_PREFIXLEN at all, no need keeping both.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-07-01 17:44:09 +03:00
Donatas Abraitis
f4d81e5507 *: Replace IPV6_MAX_PREFIXLEN to IPV6_MAX_BITLEN
Just drop IPV6_MAX_PREFIXLEN at all, no need keeping both.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-07-01 17:41:09 +03:00
Donatas Abraitis
3036004116 bgpd: Convert numeric 32 into IPV4_MAX_BITLEN for prefixlen
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-07-01 17:37:04 +03:00
Donatas Abraitis
135e9bdb69 bgpd: Convert numeric 128 into IPV6_MAX_BITLEN for prefixlen
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-07-01 17:35:02 +03:00
Philippe Guibert
17ef5a9343 bgpd: nht unresolved with global address next-hop
When bgp peers with ipv6 link local addresses, it may receive a
BGP update with next-hop containing both LL and GA information.
By default, nexthop tracking applies to GA, and ignores presence
of LL, when both addresses are present. This is a problem for
resolving GA as next-hop as the next-hop information can be solved
by using the LL address only.

The solution consists in defaulting the nexthop ipv6 choice to LL
when available, and moving back to GA if a route-map is locally
configured at inbound.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2021-07-01 16:21:54 +02:00
Donald Sharp
306dc5d495
Merge pull request #8965 from idryzhov/bgp-coverity
bgpd: fix coverity warning
2021-06-30 21:23:17 -04:00
Igor Ryzhov
a09811ff67 bgpd: fix coverity warning
`oly` is already dereferenced two lines earlier and is always passed to
the function.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-06-30 22:37:33 +03:00
Renato Westphal
8b0ab1f8a0
Merge pull request #8780 from idryzhov/fix-zebra-coverity
zebra: fix a couple of coverity warnings
2021-06-30 16:08:35 -03:00
Donald Lee
b16a58fc77 bgpd: Restore bgp_routemap logic
Signed-off-by: Donald Lee <dlqs@gmx.com>
2021-06-30 23:55:40 +08:00
Donald Sharp
dac42f2ef5 bgpd: Ensure v6 LL address is available before establishing peering
There are startup situations where we will attempt to connect to a remote
peer before bgp has received the v6 LL address.  If we do not have this address
we must not allow the connection to come up until we have one available to use
in those situations where we must have a v6 LL address.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-06-30 10:33:21 -04:00
Donatas Abraitis
e702605d80 *: Do not check for XMALLOC/XCALLOC against NULLs
We don't check this pattern anywhere in the code basically, so let's
unify the code.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-06-29 22:27:50 +03:00
Donatas Abraitis
4953391b45 bgpd: Avoid more assignments within checks (round 2)
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-06-29 22:27:50 +03:00
Donatas Abraitis
d4980edf47 bgpd: No need casting to boolean for boolean
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-06-29 22:27:50 +03:00
Igor Ryzhov
b08dcc3f3f *: unify prefix copying
There are a few places in the code where we use PREFIX_COPY(_IPV4/IPV6)
macro to copy a prefix. Let's always use prefix_copy function for this.

This should fix CID 1482142 and 1504610.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-06-29 16:11:47 +03:00
Donatas Abraitis
88cc0ce4e8 bgpd: Parse as withdrawal if AS-PATH contains 0 within the path
Process this a bit later instead of bgp_attr_parse() which is causing
the session to be shutdown upon receiving a prefix with AS number 0 inside.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-06-29 16:10:50 +03:00
Donatas Abraitis
11dbcdd35c bgpd: Avoid using assignments within checks
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-06-29 14:40:14 +03:00
Trey Aspelund
38d11af5e8 bgpd: Expand 'bgp default <afi>-<safi>' cmds
Adds new commands to allow a user to default 'default' address-families
to be inherited by all new peers.  Previously this was limited to just
ipv4/ipv6 unicast, now the full list is:
---
ipv4-unicast
ipv4-multicast
ipv4-vpn
ipv4-labeled-unicast
ipv4-flowspec
ipv6-unicast
ipv6-multicast
ipv6-vpn
ipv6-labeled-unicast
ipv6-flowspec
l2vpn-evpn
---

Signed-off-by: Trey Aspelund <taspelund@nvidia.com>
2021-06-28 20:55:59 +00:00