Commit Graph

40 Commits

Author SHA1 Message Date
Russ White
619a77da10
Merge pull request #7781 from chiragshah6/evpn_dev
[yang,bgpd]  convert neighbor prefix-list and route-map to transactional clis
2021-01-19 11:26:34 -05:00
Emanuele Di Pascale
c576dc6a4f bgpd: fix removal of rd vpn export
a missing '!' operator meant that correct rd strings were being
rejected in the destroy callback, making it impossible to remove
once configured.

Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
2021-01-11 10:15:18 +01:00
Emanuele Di Pascale
174c5be33c bgpd: fix unsetting of multipath as-set
in the nortbound callback for the boolean leaf multi-path-as-set, the
actual value of the leaf was being ignored. As a result, going from
as-set to no-as-set was having no effect.

Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
2021-01-11 10:15:18 +01:00
Chirag Shah
c668557533 bgpd: convert nbr rmap transactional cli
- Move vtysh handler to DEFPY
- Convert neighbor route-map command to transactional cli.
- After nb conversion, remove not used apis.
- Implement NB callbacks for afi-safis

Signed-off-by: Chirag Shah <chirag@nvidia.com>
2021-01-09 23:06:02 -08:00
Chirag Shah
f4eac84c5a yang: nbr plist nb conversion for more afi-safis
Signed-off-by: Chirag Shah <chirag@nvidia.com>
2021-01-09 23:06:02 -08:00
Chirag Shah
d9986d26c0 bgpd: convert neighbor plist to transactional cli
- Move vtysh handler to DEFPY
- Convert neighbor prefix-list command to transactional cli.
- After nb conversion, remove not used apis.
- implement NB apis for ipv4 afi-safis

Signed-off-by: Chirag Shah <chirag@nvidia.com>
2021-01-09 23:06:01 -08:00
Russ White
ee117a8bd6
Merge pull request #7507 from ton31337/fix/bgpd_do_not_send_update_if_path_really_did_not_change
bgpd: Do not send BGP UPDATE if the route actually not changed
2021-01-05 10:26:18 -05:00
Donald Sharp
e80bc08944 bgpd: Prevent null deref
There exists a path where we could possibly have a NULL deref
of a pointer.  Prevent this from happening.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-01-04 07:56:47 -05:00
Donatas Abraitis
3a6290bdd1 *: Replace s_addr check agains 0 with INADDR_ANY
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2020-12-14 21:03:38 +02:00
Donatas Abraitis
2adac2562a bgpd: Do not send BGP UPDATE if the route actually not changed
Reference: https://www.cmand.org/communityexploration

                     --y2--
                    /  |   \
  c1 ---- x1 ---- y1   |   z1
                    \  |   /
                     --y3--

1. z1 announces 192.168.255.254/32 to y2, y3.
2. y2 and y3 tags this prefix at ingress with appropriate
communities 65004:2 (y2) and 65004:3 (y3).
3. x1 filters all communities at the egress to c1.
4. Shutdown the link between y1 and y2.
5. y1 will generate a BGP UPDATE message regarding the next-hop change.
6. x1 will generate a BGP UPDATE message regarding community change.

To avoid sending duplicate BGP UPDATE messages we should make sure
we send only actual route updates. In this example, x1 will skip
BGP UPDATE to c1 because the actual route is the same
(filtered communities - nothing changes).

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2020-12-11 14:51:05 +02:00
David Schweizer
6c537a18cf
bgpd: RFC 4271 DelayOpenTimer
Changes implement the DelayOpenTimer functionality proposed in RFC 4271.

Signed-off-by: David Schweizer <dschweizer@opensourcerouting.org>
2020-10-20 16:49:58 +02:00
Donald Sharp
db2e92360c
Merge pull request #7467 from ton31337/fix/bgpd_null_dereference
bgpd: Check if peer is not NULL before calling peer_as_change()
2020-11-18 18:13:04 -05:00
Donatas Abraitis
7c98d487b8 *: Replace typo (supress => suppress)
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2020-11-17 12:13:38 +02:00
Donald Sharp
76bd07b688 bgpd: Respect -e X value for multipath
When entering values for maximum-path if the user
has entered a value to respect from the bgp cli `-e X`
that is the maximum value we should use when accepting
values from the user.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2020-11-12 16:45:28 -05:00
Pat Ruddy
1bfd9dccd6 bgpd: withdraw any exported routes when deleting a vrf
When a BGP vrf instance is deleted, the routes it exported into the
main VPN table are not deleted and they remain as stale routes
attached to an unknown bgp instance. When the new vrf instance comes
along, it imports these routes from the main table and thus we see
duplicatesalongside its own identical routes.
The solution is to call the unexport logic when a BGP vrf instance is
being deleted.

problem example
---------------
volta1# sh bgp vrf VRF-a ipv4 unicast
BGP table version is 4, local router ID is 18.0.0.1, vrf id 5
Default local pref 100, local AS 567
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
   Network          Next Hop            Metric LocPrf Weight Path
*> 7.0.0.6/32       7.0.0.5@0<              10    100      0 ?
*> 7.0.0.8/32       18.0.0.8                 0             0 111 ?
*> 18.0.0.0/24      18.0.0.8                 0             0 111 ?
*> 56.0.0.0/24      7.0.0.5@0<               0    100      0 ?
Displayed  4 routes and 4 total paths
volta1# conf t
volta1(config)# no router bgp 567 vrf VRF-a
volta1(config)#
volta1(config)# router bgp 567 vrf VRF-a
volta1(config-router)#  bgp router-id 18.0.0.1
volta1(config-router)#  no bgp ebgp-requires-policy
volta1(config-router)#  no bgp network import-check
volta1(config-router)#  neighbor 18.0.0.8 remote-as 111
volta1(config-router)#  !
volta1(config-router)#  address-family ipv4 unicast
volta1(config-router-af)#   label vpn export 12345
volta1(config-router-af)#   rd vpn export 567:111
volta1(config-router-af)#   rt vpn both 567:100
volta1(config-router-af)#   export vpn
volta1(config-router-af)#   import vpn
volta1(config-router-af)#  exit-address-family
volta1(config-router)# !
volta1(config-router)# end
volta1# sh bgp vrf VRF-a ipv4 unicast
BGP table version is 4, local router ID is 18.0.0.1, vrf id 5
Default local pref 100, local AS 567
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
   Network          Next Hop            Metric LocPrf Weight Path
*> 7.0.0.6/32       7.0.0.5@0<              10    100      0 ?
*  7.0.0.8/32       18.0.0.8                 0             0 111 ?
*>                  18.0.0.8@-<              0             0 111 ?
*  18.0.0.0/24      18.0.0.8                 0             0 111 ?
*>                  18.0.0.8@-<              0             0 111 ?
*> 56.0.0.0/24      7.0.0.5@0<               0    100      0 ?
Displayed  4 routes and 6 total paths

@- routes indicating unknown bgp instance are imported

Signed-off-by: Pat Ruddy <pat@voltanet.io>
2020-11-11 15:10:22 +00:00
Donatas Abraitis
7a68370285 bgpd: Check if peer is not NULL before calling peer_as_change()
Prevents NULL possible dereference.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2020-11-09 18:03:44 +02:00
Donatas Abraitis
6084908ec8
Merge pull request #7477 from chiragshah6/yang_dev
bgpd: fix compiler warnings in nbr cmd
2020-11-07 17:25:37 +02:00
Chirag Shah
555c8ab7ad bgpd: fix compiler warnings in nbr cmd
Addressed the gcc-10 buffer overflow warnings.
Put a sanity check of not using prefix for
neighbor update-source with interface option.

Signed-off-by: Chirag Shah <chirag@nvidia.com>
2020-11-06 11:43:36 -08:00
Donald Sharp
e5209541f2 bgpd: Actually return the group peer
The code is returning the group peer data structure, which
is what is happening but we should not have assignment statements
in this return statement for a `struct peer *` return.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2020-11-05 20:44:31 -05:00
Chirag Shah
7c54def292 bgpd: default originate transactional callbacks
Signed-off-by: Chirag Shah <chirag@nvidia.com>
2020-10-27 11:39:41 -07:00
Chirag Shah
cc4440c317 bgpd: shorten names for default originate nb callbacks
Signed-off-by: Chirag Shah <chirag@nvidia.com>
2020-10-27 11:29:16 -07:00
Chirag Shah
8611c7f3b6 bgpd: convert neighbor peer config to transactional
Signed-off-by: Chirag Shah <chirag@nvidia.com>
2020-10-27 11:28:17 -07:00
Chirag Shah
04261decb9 bgpd: convert max prefix clis to transactional
Signed-off-by: Chirag Shah <chirag@nvidia.com>
2020-10-27 11:27:53 -07:00
Chirag Shah
afe03f6094 *: shorten name of prefix-limit options
shorten prefix-limit's option name in yang model.
change restart timer to uint16.
Stubbed northbound callbacks with above changes.

Signed-off-by: Chirag Shah <chirag@nvidia.com>
2020-10-27 11:27:49 -07:00
Chirag Shah
f4b8ec0721 bgpd: neighbor peergrp config to transactional cli
Signed-off-by: Chirag Shah <chirag@nvidia.com>
2020-10-27 11:27:03 -07:00
Chirag Shah
90e21f3535 bgpd: add nb support for suppress-map in aggregate cmd
Signed-off-by: Chirag Shah <chirag@nvidia.com>
2020-10-26 08:57:15 -07:00
Chirag Shah
fa423774ff bgpd: add match-med nb support in aggregate cmd
Signed-off-by: Chirag Shah <chirag@nvidia.com>
2020-10-26 08:57:15 -07:00
Chirag Shah
37a87b8f98 bgpd: convert addr-family clis to transactional clis
Convert IPv4 and IPv6 unicast address family clis
to transactional clis and implementation of
northbound callbacks.

Signed-off-by: Chirag Shah <chirag@nvidia.com>
2020-10-26 08:57:15 -07:00
Chirag Shah
3b66fcef58 yang: update bgp module afi-safi parameters
add vnc-direct route-type.

Signed-off-by: Chirag Shah <chirag@nvidia.com>
2020-10-26 08:57:14 -07:00
Mark Stapp
5047884528 *: unify thread/event cancel macros
Replace all lib/thread cancel macros, use thread_cancel()
everywhere. Only the THREAD_OFF macro and thread_cancel() api are
supported. Also adjust thread_cancel_async() to NULL caller's pointer (if
present).

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-10-23 12:16:52 -04:00
Chirag Shah
bdaadb91e8 bgpd: use common api in bgp_get
Use consolidate api in bgp_get and bgp northbound
create callback.

Signed-off-by: Chirag Shah <chirag@nvidia.com>
2020-10-12 16:41:39 -07:00
Chirag Shah
a5ab756f24 bgpd: fix crash in bgp instance creation
In bgp global commands northbound local-as modify callback
check for backend db for checking existing bgp instance.

In an instance where no router bgp with old ASN cleaned up
followed by new bgp instance with new AS is created,
the nb_running_get_entry in validation phase returns stale
bgp reference, which leads to rejection of the router bgp command.

Uncovered via:
toptotest evpn_type5_test_topo1/test_evpn_type5_topo1.py
test_bgp_attributes_for_evpn_address_family_p1

Signed-off-by: Chirag Shah <chirag@nvidia.com>
2020-10-12 16:13:59 -07:00
Chirag Shah
feded4118b bgpd: rename router bgp callbacks
Avoid similar name function as bgp_crate()

Signed-off-by: Chirag Shah <chirag@nvidia.com>
2020-10-12 16:13:59 -07:00
Mark Stapp
082de39e71 bgpd: fix SA warnings in bgp northbound
Fix a couple of new SA warnings in the new bgp northbound.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-10-06 08:18:59 -04:00
Chirag Shah
5e42cb2fb0 bgpd: move router bgp nb callback
move `router bgp` nb callback at `bgp` node level
to have access to bgp context at neighbor and peer-group
level and align create/destroy callbacks call during
no router bgp.

Earlier `no router bgp` is performed first global destroy
callback is called which essentially removes `bgp context`
then it calls to remove (parallel nodes) neighbor and peer-group
which does not have access to bgp context.
Moving router bgp at bgp solves this destroy callback ordering issue.

Signed-off-by: Chirag Shah <chirag@nvidia.com>
2020-10-03 11:25:38 -07:00
Chirag Shah
87ce25646b bgpd: correct bgp global context
Move bgp (router bgp) context at "bgp" node
level from (instead of) "global" level.
This change allows access of bgp context at neighbor
and peer-group node levels.

    +--rw bgp   <--- (store `struct bgp` at bgp node xpath)
       +--rw global!
       |    ...
       |  +--rw afi-safis
       |    ...
       +--rw neighbors
       |  +--rw neighbor* [remote-address]
       |    ...
       |  |  +--rw afi-safis
       |    ...
       |  +--rw unnumbered-neighbor* [interface]
       |    ...
       +--rw peer-groups
          +--rw peer-group* [peer-group-name]
            ...

Signed-off-by: Chirag Shah <chirag@nvidia.com>
2020-10-03 11:25:38 -07:00
Chirag Shah
906ebeec98 bgpd: shorten northbound callback names
Omit routing protocol augment name from callbacks name.

(Omitted: routing_control_plane_protocols_control_plane_protocol_)

Signed-off-by: Chirag Shah <chirag@nvidia.com>
2020-10-03 11:25:38 -07:00
Chirag Shah
374069da83 bgpd: register nb routing hook
On bgpd bootstrap register routing hook which ensures
only single bgp named instance created per vrf routing
hierarchy.

Signed-off-by: Chirag Shah <chirag@nvidia.com>
2020-10-03 11:25:37 -07:00
Chirag Shah
ff8a8a7ac1 bgpd: convert global config to transactional cli
Convert global congigurations clis to transactional
clis using northbound plugin callbacks.

Signed-off-by: Chirag Shah <chirag@nvidia.com>
2020-10-03 11:25:37 -07:00
Chirag Shah
a1950c80a5 bgpd: bgp northbound callbacks prototypes
This commit contains splitting of auto-generated bgp northbound callbacks
into separate files.
Include the files into bgp makefile.

Signed-off-by: Chirag Shah <chirag@nvidia.com>
2020-10-03 11:25:37 -07:00