Commit Graph

6187 Commits

Author SHA1 Message Date
anlan_cs
f714e57a32 bgpd: cosmetic function address
No mistake, just to unify style for the parameter of function address - remove
ampersand.  In current code, only this one place of `hook_register()`s needs
to be made.

Signed-off-by: anlan_cs <vic.lan@pica8.com>
2022-10-08 06:11:52 -04:00
Russ White
a00621d8b9
Merge pull request #12034 from opensourcerouting/fix/gr_hard_notification
bgpd: Do not send Deconfig/Shutdown message when restarting
2022-10-06 10:05:11 -04:00
Russ White
bfc8e5855c
Merge pull request #12038 from pguibert6WIND/show_bgp_nexthop_better
bgpd: improve 'show bgp nexthop' command
2022-10-06 10:04:49 -04:00
Russ White
a8ef436639
Merge pull request #12040 from opensourcerouting/fix/bgp_local_as_remote_as
bgpd: Allow using remote-as the same as local-as
2022-10-06 10:03:26 -04:00
mobash-rasool
632041aec4
Merge pull request #12054 from opensourcerouting/feature/show_that_route_is_not_advertised
bgpd: Show why the prefix is inaccessible in show commands
2022-10-06 15:23:21 +05:30
Donatas Abraitis
5640afc641
Merge pull request #11983 from maduri111/bgpd-cond-adv-debug
bgpd: adding debug command for conditional advertisement
2022-10-06 12:42:28 +03:00
Madhuri Kuruganti
e85e4a8d16 bgpd: conditional advertisement code cleanup
Signed-off-by: Madhuri Kuruganti <maduri111@gmail.com>
2022-10-06 12:43:05 +05:30
Donatas Abraitis
b022cf7352
Merge pull request #11838 from Pdoijode/v6-gua-nh-bgp-update
bgpd: BGP does not update next-hop when global V6 address is configured
2022-10-06 10:04:37 +03:00
Madhuri Kuruganti
8093d7999c bgpd: adding debug command for conditional advertisement
Signed-off-by: Madhuri Kuruganti <maduri111@gmail.com>
2022-10-06 12:17:27 +05:30
Philippe Guibert
8c6a164f40 bgpd: improve 'show bgp nexthop' command
- for a given IP nexthop, dump all NH entries, including
colored entries, or entries with an ifindex.
- when a given IP nexthop is requested, the path is displayed.
For better readibility, remove the carriage return between
'Last update' and 'Paths', because ctime() function already
performs carriage return.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2022-10-05 11:12:59 +02:00
Michal Ruprich
dcab90125f bgpd: show ip bgp neighbors graceful-restart typo
Noticed a typo in the definition of
show_ip_bgp_neighbors_graceful_restart function.

Signed-off-by: Michal Ruprich <mruprich@redhat.com>
2022-10-04 15:14:48 +02:00
Russ White
4b72a7be69
Merge pull request #12047 from donaldsharp/bgp_nexthop_individual
bgpd: Fix `show bgp nexthop A.B.C.D`
2022-10-04 07:41:58 -04:00
Donatas Abraitis
95ba22d531 bgpd: Show why the prefix is inaccessible in show commands
```
donatas-pc# show ip bgp 100.100.100.0/24 longer-prefixes
BGP table version is 13, local router ID is 10.10.10.10, vrf id 0
Default local pref 100, local AS 65000
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
   100.100.100.0/24 0.0.0.0                  0         32768 i

Displayed  1 routes and 15 total paths
donatas-pc# show ip bgp 100.100.100.0/24
BGP routing table entry for 100.100.100.0/24, version 0
Paths: (1 available, no best path)
  Not advertised to any peer
  Local
    0.0.0.0 (inaccessible, import-check enabled) from 0.0.0.0 (10.10.10.10)
      Origin IGP, metric 0, weight 32768, invalid, sourced, local
      Last update: Tue Oct  4 11:31:44 2022
donatas-pc# show ip bgp 100.100.100.0/24 json
{
  "prefix":"100.100.100.0\/24",
  "version":0,
  "paths":[
    {
      "aspath":{
        "string":"Local",
        "segments":[
        ],
        "length":0
      },
      "origin":"IGP",
      "metric":0,
      "weight":32768,
      "valid":false,
      "version":0,
      "sourced":true,
      "local":true,
      "lastUpdate":{
        "epoch":1664872304,
        "string":"Tue Oct  4 11:31:44 2022\n"
      },
      "nexthops":[
        {
          "ip":"0.0.0.0",
          "hostname":"donatas-pc",
          "afi":"ipv4",
          "accessible":false,
          "importCheckEnabled":true,
          "used":true
        }
      ],
      "peer":{
        "peerId":"0.0.0.0",
        "routerId":"10.10.10.10"
      }
    }
  ]
}
donatas-pc#
```

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-10-04 11:32:39 +03:00
Donald Sharp
a8cc325f59 bgpd: Fix show bgp nexthop A.B.C.D
The issuing of `show bgp nexthop A.B.C.D` fails even if that
nexthop exists:

eva# show bgp nexthop 192.168.119.120
specified nexthop does not have entry

Fixed:

eva# show bgp nexthop 192.168.119.120
 192.168.119.120 valid [IGP metric 0], #paths 0, peer 192.168.119.120
  if enp39s0
  Last update: Fri Sep 30 14:55:13 2022

  Paths:

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-09-30 14:58:21 -04:00
Donald Sharp
1117baca3c bgpd: Ensure FRR has enough data to read 2 bytes in bgp_open_option_parse
In bgp_open_option_parse the code is checking that the
stream has at least 2 bytes to read ( the opt_type and
the opt_length).  However if BGP_OPEN_EXT_OPT_PARAMS_CAPABLE(peer)
is configured then FRR is reading 3 bytes.  Which is not good
since the packet could be badly formateed.  Ensure that
FRR has the appropriate data length to read the data.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-09-30 09:00:02 -04:00
Donald Sharp
3e46b43e37 bgpd: Ensure FRR has enough data to read 2 bytes in peek_for_as4_capability
In peek_for_as4_capability the code is checking that the
stream has at least 2 bytes to read ( the opt_type and the
opt_length ).  However if BGP_OPEN_EXT_OPT_PARAMS_CAPABLE(peer)
is configured then FRR is reading 3 bytes.  Which is not good
since the packet could be badly formated.  Ensure that
FRR has the appropriate data length to read the data.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-09-30 08:59:52 -04:00
Donatas Abraitis
95098d9611 bgpd: Do not send Deconfig/Shutdown message when restarting
We might disable sending unconfig/shutdown notifications when
Graceful-Restart is enabled and negotiated.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-09-30 09:50:21 +03:00
Pdoijode
bc6d1b151f bgpd: BGP does not update next-hop when global V6 address is configured
When primary global v6 unicast address is configured on an
unnumbered interface, BGP does not re-advertise updates out
with the new global v6 address as the nexthop

Signed-off-by: Pdoijode <pdoijode@nvidia.com>
2022-09-29 15:28:38 -07:00
Donatas Abraitis
d6b0327c35 bgpd: Allow using remote-as the same as local-as
As an example, Arista EOS allows this behavior.

Configuration something like:

```
 neighbor PG peer-group
 neighbor PG remote-as 65001
 neighbor PG local-as 65001
 neighbor 192.168.10.124 peer-group PG
```

Or without peer-group.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-09-29 21:13:40 +03:00
Russ White
df779878fb
Merge pull request #11985 from opensourcerouting/fix/thread_off_llgr
bgpd: Stop LLGR thread when deleting a peer and/or GR flags changed
2022-09-27 11:29:54 -04:00
Russ White
ee42846bea
Merge pull request #12010 from opensourcerouting/fix/logging_for_route_refresh
bgpd: Print hostname for peer as well when marking as stale for route-refresh
2022-09-27 11:27:12 -04:00
Donatas Abraitis
58e111f65c bgpd: Print hostname for peer as well when marking as stale for route-refresh
Before:

```
2022/09/26 10:13:35.261 BGP: [QCZ1W-VKS36] 192.168.0.1(r0) sending REFRESH_REQ for afi/safi: IPv4/unicast
2022/09/26 10:13:35.262 BGP: [VF3QY-FP1PP] 192.168.0.1: route-refresh for IPv4/unicast, marking prefix 172.16.1.1/32 as stale
2022/09/26 10:13:35.262 BGP: [VF3QY-FP1PP] 192.168.0.1: route-refresh for IPv4/unicast, marking prefix 192.168.0.0/24 as stale
2022/09/26 10:13:35.262 BGP: [SDZS7-XVC4W] 192.168.0.1(r0) rcvd route-refresh (BoRR) for IPv4/unicast, triggering timer for 360 seconds
2022/09/26 10:13:35.362 BGP: [Y6XKR-PF89P] 192.168.0.1(r0) rcvd route-refresh (EoRR) for IPv4/unicast, stopping BoRR timer
```

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-09-26 11:13:40 +03:00
Madhuri Kuruganti
1285c4ace9 bgpd: conditional advertise-map unset on peer not re-advertising withdrawn routes
Signed-off-by: Madhuri Kuruganti <maduri111@gmail.com>
2022-09-25 11:48:47 +05:30
Donatas Abraitis
344d81ceed
Merge pull request #11982 from samanvithab/bgp_mem_fix
bgpd: multiple memory leak issue fixes
2022-09-23 17:54:33 +03:00
Samanvitha B Bhargav
b96b4f1c5f bgpd: Cleanup memory leaks associated with t_deferral_timer
We are allocating temporary memory for information about
what to process in this thread, which is not being cleaned
up on thread cancelling.

Signed-off-by: Samanvitha B Bhargav <bsmanvitha@vmware.com>
2022-09-23 00:14:12 -07:00
Donald Sharp
9e3b5187b7
Merge pull request #11993 from opensourcerouting/feature/printfrr_pRD
bgpd: Use %pRD for prefix_rd2str()
2022-09-22 09:30:51 -04:00
Donatas Abraitis
c4f64ea94d bgpd: Use %pRD for prefix_rd2str()
Convert a bunch of prefix_rd2str() for json/vty stuff.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-09-22 13:12:11 +03:00
Donatas Abraitis
c0539ff458 bgpd: Stop conditional advertisements thread when terminating
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-09-22 10:30:13 +03:00
Donatas Abraitis
bdc33d0b13 bgpd: Drop out-of-date files
Just not maintained for > 18 years.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-09-21 17:21:31 +03:00
Donatas Abraitis
172e4d9fa2 bgpd: Stop LLGR thread when deleting a peer and/or GR flags changed
Also valid when shutting down a BGP instance.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-09-21 17:13:28 +03:00
Samanvitha B Bhargav
2305e3e460 bgpd: memory leak issue fix
Memory allocated when 'import vrf route maps <>' is configured,
wasn't being freed when the entire bgp config
was deleted through 'no router bgp'.

Signed-off-by: Samanvitha B Bhargav <bsmanvitha@vmware.com>
2022-09-21 01:57:09 -07:00
Samanvitha B Bhargav
92d537611b bgpd: memory leak issue fix
In ecommunity_del_val(), ecommunity was not being freed
when the last value in the ecommunity was being deleted.

Signed-off-by: Samanvitha B Bhargav <bsmanvitha@vmware.com>
2022-09-21 01:45:41 -07:00
Samanvitha B Bhargav
f6a460f982 bgpd: memory leak issue fix
When router id is changed through config, new RD is auto generated.
However new export RT was being assigned without freeing
the older RT from VRF.

Signed-off-by: Samanvitha B Bhargav <bsmanvitha@vmware.com>
2022-09-21 01:44:14 -07:00
Russ White
6f42ff7691
Merge pull request #11956 from opensourcerouting/fix/bgpd_unlocks
bgpd: Don't forget bgp_dest_unlock_node before return
2022-09-20 11:17:03 -04:00
Donald Sharp
fbd3e84531
Merge pull request #11954 from opensourcerouting/fix/ecommunity_memory_leak
bgpd: Free ecommunity before returning on warning/error
2022-09-20 08:18:47 -04:00
Donatas Abraitis
fd283bd250 bgpd: Use route_map_result_t for route_map_apply() as return type
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-09-20 10:45:02 +03:00
Donatas Abraitis
bbc5210686 bgpd: Don't forget bgp_dest_unlock_node before return
Before returning an error, unlock bgp dest which is locked by
bgp_node_lookup()/bgp_node_get().

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-09-16 16:16:01 +03:00
Xiao Liang
a783cc05f0 bgpd: Handle route-refresh request received before EoR
See the BGP message sequence:

    R1                  R2
    |      updates      |
    |------------------>|
    |                   |
    |  refresh request  |
    x<------------------|
    |                   |
    |   updates cont.   |
    |------------------>|
    |                   |
    |    end-of-rib     |
    |------------------>|
    |                   |

When R1 and R2 establish BGP session, R1 begins to send initial updates.
If R2 sends a route-refresh request before EoR, it's silently ignored
by R1, and routes received earlier have no chance to be processed again.

RFC7313 says, "for a BGP speaker that supports the BGP Graceful Restart,
it MUST NOT send a BoRR for an <AFI, SAFI> to a neighbor before it sends
the EoR for the <AFI, SAFI> to the neighbor." But it doesn't forbid
route-refresh request to be sent before receiving EoR.

To handle this scenario, postpone response to refresh request until EoR
is sent.

Signed-off-by: Xiao Liang <shaw.leon@gmail.com>
2022-09-16 18:26:21 +08:00
Donatas Abraitis
df6a97a643 bgpd: Free ecommunity before returning on warning/error
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-09-16 13:11:21 +03:00
Russ White
7fa5e07b1c
Merge pull request #11899 from opensourcerouting/feature/route_validation_extended_community
bgpd: Implement Origin Validation State via extended communities
2022-09-13 11:30:54 -04:00
Donatas Abraitis
c3c5f18c2b
Merge pull request #11926 from mjstapp/fix_bgp_io_race
bgpd: avoid notify race between io and main pthreads
2022-09-12 18:24:18 +02:00
Donald Sharp
71d987dbb9
Merge pull request #11868 from LabNConsulting/ziemba/bgp-labelpool-performance
bgpd: improve labelpool performance at scale
2022-09-12 10:45:43 -04:00
Donald Sharp
ed11f561bc
Merge pull request #11923 from opensourcerouting/fix/aggregate-address-matching-MED
bgpd: Fix aggregate-address summary-only matching-MED-only
2022-09-12 10:31:01 -04:00
Donald Sharp
d31bf91e76
Merge pull request #11929 from opensourcerouting/fix/memory_leaks
bgpd: Fix memory leak for `set as-path replace` route-map command
2022-09-12 09:56:01 -04:00
Donald Sharp
9e52401574
Merge pull request #11932 from opensourcerouting/fix/memory_leak_bgp_soo_ecommunity_dup
bgpd: Fix memory leak for `conf_copy()` - SoO ecommunity
2022-09-12 09:55:14 -04:00
Donald Sharp
c8a02cf27c
Merge pull request #11928 from opensourcerouting/fix/memory_leak_bgp_soo
bgpd: Fix memory leak for `as-override`
2022-09-12 09:54:53 -04:00
Donatas Abraitis
918f64980a bgpd: Thread is already done, drop useless assignment t_rmap_update to NULL
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-09-12 04:42:41 +03:00
Donatas Abraitis
61adcf71be bgpd: Fix memory leak for conf_copy() - SoO ecommunity
==1179738== 48 (40 direct, 8 indirect) bytes in 1 blocks are definitely lost in loss record 13 of 29
==1179738==    at 0x483AB65: calloc (vg_replace_malloc.c:760)
==1179738==    by 0x493C8D5: qcalloc (memory.c:116)
==1179738==    by 0x208F0C: ecommunity_dup (bgp_ecommunity.c:267)
==1179738==    by 0x2B300C: conf_copy (bgp_updgrp.c:170)
==1179738==    by 0x2B35BF: peer2_updgrp_copy (bgp_updgrp.c:277)
==1179738==    by 0x2B5189: update_group_find (bgp_updgrp.c:826)
==1179738==    by 0x2B70D0: update_group_adjust_peer (bgp_updgrp.c:1769)
==1179738==    by 0x23DB7D: update_group_adjust_peer_afs (bgp_updgrp.h:519)
==1179738==    by 0x243B21: bgp_establish (bgp_fsm.c:2129)
==1179738==    by 0x244B94: bgp_event_update (bgp_fsm.c:2597)
==1179738==    by 0x26B0E6: bgp_process_packet (bgp_packet.c:2895)
==1179738==    by 0x498F5FD: thread_call (thread.c:2008)
==1179738==    by 0x49253DA: frr_run (libfrr.c:1198)
==1179738==    by 0x1EEC38: main (bgp_main.c:520)

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-09-10 18:13:45 +03:00
Donatas Abraitis
bbe7bc46f1 bgpd: Fix memory leak for as-override
==536197== 400 (160 direct, 240 indirect) bytes in 4 blocks are definitely lost in loss record 19 of 21
==536197==    at 0x483DD99: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==536197==    by 0x491C753: qcalloc (memory.c:116)
==536197==    by 0x303FA9: aspath_dup (bgp_aspath.c:698)
==536197==    by 0x304B2A: aspath_replace_specific_asn (bgp_aspath.c:1219)
==536197==    by 0x256840: bgp_peer_as_override (bgp_route.c:1781)
==536197==    by 0x256840: subgroup_announce_check (bgp_route.c:2216)
==536197==    by 0x258345: subgroup_process_announce_selected (bgp_route.c:2804)
==536197==    by 0x27F2CA: group_announce_route_walkcb (bgp_updgrp_adv.c:199)
==536197==    by 0x4905A51: hash_walk (hash.c:285)
==536197==    by 0x27E8D1: update_group_af_walk (bgp_updgrp.c:1866)
==536197==    by 0x2809D3: group_announce_route (bgp_updgrp_adv.c:1022)
==536197==    by 0x257DC4: bgp_process_main_one (bgp_route.c:3189)
==536197==    by 0x257DC4: bgp_process_main_one (bgp_route.c:2975)
==536197==    by 0x2581F7: bgp_process_wq (bgp_route.c:3330)
==536197==    by 0x4961787: work_queue_run (workqueue.c:285)
==536197==    by 0x4957745: thread_call (thread.c:2008)
==536197==    by 0x4910B77: frr_run (libfrr.c:1198)
==536197==    by 0x1ED6AC: main (bgp_main.c:520)

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-09-10 06:56:01 +03:00
Donatas Abraitis
67a9da92a1 bgpd: Fix memory leak for set as-path replace route-map command
==1174993== 252 (120 direct, 132 indirect) bytes in 3 blocks are definitely lost in loss record 77 of 100
==1174993==    at 0x483AB65: calloc (vg_replace_malloc.c:760)
==1174993==    by 0x493C8D5: qcalloc (memory.c:116)
==1174993==    by 0x378E38: aspath_dup (bgp_aspath.c:698)
==1174993==    by 0x2A39E2: route_set_aspath_replace (bgp_routemap.c:2259)
==1174993==    by 0x4965C71: route_map_apply_ext (routemap.c:2664)
==1174993==    by 0x27BCC8: bgp_input_modifier (bgp_route.c:1657)
==1174993==    by 0x281AB9: bgp_update (bgp_route.c:3992)
==1174993==    by 0x286368: bgp_nlri_parse_ip (bgp_route.c:5890)
==1174993==    by 0x264D20: bgp_nlri_parse (bgp_packet.c:347)
==1174993==    by 0x2682FE: bgp_update_receive (bgp_packet.c:1921)
==1174993==    by 0x26AA67: bgp_process_packet (bgp_packet.c:2822)
==1174993==    by 0x498F5FD: thread_call (thread.c:2008)
==1174993==    by 0x49253DA: frr_run (libfrr.c:1198)
==1174993==    by 0x1EEC38: main (bgp_main.c:520)

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-09-10 02:14:45 +03:00