Commit Graph

5933 Commits

Author SHA1 Message Date
Donatas Abraitis
6006b807b1 *: Properly use memset() when zeroing
Wrong: memset(&a, 0, sizeof(struct ...));
    Good:  memset(&a, 0, sizeof(a));

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-05-11 14:08:47 +03:00
Donatas Abraitis
b5605493a4 bgpd: Use sizeof() for memset instead of numeric
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-05-11 13:10:41 +03:00
anlan_cs
cabddbf5f6 bgpd: remove unncessary check for evpn
In current code, `build_evpn_type2_prefix()` doesn't distinguish ARP
according to the `ip` parameter. The `ip` parameter from caller is
always non-NULL.

Be consistent and not confused, just remove the unnecessary check.

Signed-off-by: anlan_cs <vic.lan@pica8.com>
2022-05-10 22:21:32 -04:00
Donatas Abraitis
e7ce634f31 bgpd: Reset bgp_notify.hard_reset on receive to avoid stale data
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-05-10 09:25:59 +03:00
Donatas Abraitis
1ae314be4f bgpd: Send Hard Reset Notification for BGP_NOTIFY_CEASE_ADMIN_RESET
`clear bgp neighbor` should send Hard Reset and graceful restart should be
activated. Let's make this adjustable.

https://datatracker.ietf.org/doc/html/rfc8538#section-5.1

   +-------+------------------------------------+----------------------+
   | Value |                Name                |  Suggested Behavior  |
   +-------+------------------------------------+----------------------+
   |   1   | Maximum Number of Prefixes Reached |      Hard Reset      |
   |   2   |      Administrative Shutdown       |      Hard Reset      |
   |   3   |         Peer De-configured         |      Hard Reset      |
   |   4   |        Administrative Reset        | Provide user control |
   |   5   |        Connection Rejected         |    Graceful Cease    |
   |   6   |     Other Configuration Change     |    Graceful Cease    |
   |   7   |  Connection Collision Resolution   |    Graceful Cease    |
   |   8   |          Out of Resources          |    Graceful Cease    |
   |   9   |             Hard Reset             |      Hard Reset      |
   +-------+------------------------------------+----------------------+

Enabled by default.

Co-authored-by: Biswajit Sadhu <biswajit.sadhu@gmail.com>
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-05-10 09:04:25 +03:00
Russ White
026f28e8ca
Merge pull request #11138 from opensourcerouting/fix/rpki
bgpd: RPKI reverts, nits...
2022-05-09 19:36:02 -04:00
Russ White
2cf70f4ee0
Merge pull request #11147 from opensourcerouting/feature/gr_n-bit_cli_knob
bgpd: Add CLI knob to enable graceful restart for BGP notifications
2022-05-09 19:35:14 -04:00
Igor Ryzhov
2a3807c3ce
Merge pull request #11163 from opensourcerouting/fix/same_type_casting
*: Avoid casting to the same type as on the left
2022-05-10 00:16:30 +03:00
Russ White
0c8d3bd3c3
Merge pull request #11154 from opensourcerouting/fix/increase_bgp_flags
bgpd: Use uint64_t for bgp->flags
2022-05-09 14:50:29 -04:00
Russ White
fb10a9479b
Merge pull request #11162 from anlancs/fix/bgpd-cleanup-5
bgpd: remove unnecessary check for evpn
2022-05-09 14:43:03 -04:00
mobash-rasool
d4caf64ef7
Merge pull request #11170 from anlancs/fix/bgpd-cleanup-8
bgpd: remove one unnecessary parameter for evpn-mh
2022-05-09 22:42:22 +05:30
Russ White
22d9780f3e
Merge pull request #11096 from anlancs/fix/bgpd-unlock
bgpd: clear misleading mismatched check
2022-05-09 10:46:50 -04:00
anlan_cs
e0a798819b bgpd: remove one unnecessary parameter for evpn-mh
The "add" parameter of `bgp_evpn_mh_route_update()` makes no sense.
Just remove it to clarify this function, and remove the relevant check
with "add" as well.

Signed-off-by: anlan_cs <vic.lan@pica8.com>
2022-05-09 08:27:20 -04:00
anlan_cs
879e43a550 bgpd: remove unnecessary check for evpn
When `bgp_evpn_new()` is called, the `bgp` parameter MUST be non-NULL,
remove this unnecessary check and remove the NULL check for returned
`struct bgpevpn *`, which should be non-NULL.

And modify `import_rt_new()` in the same way.

Signed-off-by: anlan_cs <vic.lan@pica8.com>
2022-05-08 09:25:12 -04:00
Donatas Abraitis
8998807f69 *: Avoid casting to the same type as on the left
Just not necessary.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-05-08 16:07:42 +03:00
anlan_cs
17151ae94b bgpd: clear misleading mismatched check
Two changes for `delete_global_type2_routes()`:

1) Remove check of `bgp_dest_has_bgp_path_info_data(rddest)`.
It is unnecessary(`dest->info` should not be NULL) and misleading.
`if (rddest && bgp_dest_has_bgp_path_info_data(rddest))`
Use (locked) node with this check, but unlock with `if (rddest)`,
The mismatched condition is misleading, there seems to be a
mistake to extra unlock.
Just make it clear, immediately exit with `(!rddest)`.

2) Remove checking returned value for it, and use `void` as return type.
It is unnecessary and wrong. Even the check failed, it should continue
to delete other types of routes.
Just remove the check and go through.

Signed-off-by: anlan_cs <vic.lan@pica8.com>
2022-05-07 22:20:15 -04:00
Donatas Abraitis
fd6b4f065a bgpd: Use uint64_t for bgp->flags
We will hit this soon because uint32_t will be not enough.

Two more flags gonna be added for rfc8538.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-05-06 22:12:41 +03:00
Donatas Abraitis
00b0b74847
Merge pull request #11145 from donaldsharp/bgp_capability
Bgp capability
2022-05-05 22:28:56 +03:00
Donatas Abraitis
f2ca5c5b95 bgpd: Add CLI knob to enable graceful restart for BGP notifications
N-bit flag should be exchanged in BGP OPEN messages, not only when the
bgpd is restarted/started.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-05-05 12:35:03 +03:00
Donatas Abraitis
50f1f2e724
Merge pull request #11059 from anlancs/fix/bgpd-evnp-wrong-check-hashget
bgpd: fix memory leak for evpn
2022-05-04 21:19:51 +03:00
Donald Sharp
d98de984a9
Merge pull request #11144 from ton31337/fix/bgp_notification_gr
bgpd: Fix memory leak for bgp_notify_receive()
2022-05-04 12:05:50 -04:00
Donald Sharp
28168b1bf6 bgpd: peer groups should not toggle interface based nht tracking
Peer groups when various forms of `bgp capability extended-nexthop`
is entered on them are toggling the nexthop tracking status of peers
in their peer group.  This is ok when the peer is not interface based.
But it is not ok when the peer is interface based as that it will turn
off the ability of FRR to properly work with that peer type.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-05-04 07:51:20 -04:00
Donald Sharp
c4786405b5 bgpd: Refuse to let interfaced peering to change capability extended-nexthop
Do not interface based peers change anything about when a
[no] neighbor <interface> capability extended-nexthop
is entered.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-05-04 07:51:20 -04:00
Donald Sharp
8e89adc1ed bgpd: enhanced capability is always turned on for interface based peers
FRR is displaying that the peer enhanced capability command is not
turned on when the interface is part of a peer group.  Saving the
config and then reloading actually turns it off.

Fix the code so that FRR does not display the enhanced capability
for interface based peers.

Fixes: #11108
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-05-04 07:51:14 -04:00
Donald Sharp
59ba003346
Merge pull request #11137 from opensourcerouting/if-name-len-fixes
*: standardize interface name maximum length
2022-05-04 07:44:26 -04:00
Donatas Abraitis
10d476d4b9 bgpd: Fix memory leak for bgp_notify_receive()
Initialize outer/inner bgp_notify structs to zero.

Free bgp_notify.raw_data after use.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-05-04 13:40:15 +03:00
Donatas Abraitis
c1a68b6245 bgpd: Show which RPKI server we are connected to
Before we just showed always the first server which is wrong.

Now we have:

```
spine1-debian-11# show rpki cache-connection
Connected to group 1
rpki tcp cache 192.168.10.17 8283 pref 1
rpki tcp cache 192.168.10.17 8282 pref 2 (connected)
```

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-05-03 22:09:04 +03:00
Donatas Abraitis
8f14ae47c1 bgpd: Add rpki reset to ENABLE node
`rpki stop` and `rpki start` were already, let's add `rpki reset` as well.

Instead of going into configure mode.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-05-03 17:11:29 +03:00
Donatas Abraitis
0e3d96bf4b bgpd: Convert some variables from int to bool for RPKI
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-05-03 17:11:29 +03:00
Donatas Abraitis
d67485c67a bgpd: Make sure we print stats if we are sync at least with a single group
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-05-03 17:11:29 +03:00
Donatas Abraitis
d2e3f8a203 Revert "bgpd: Handle TCP connection errors with connection callbacks for RPKI"
This reverts commit db3aca462b.

Connection handling is already fixed in librtr 0.8.0.
https://github.com/rtrlib/rtrlib/releases/tag/v0.8.0

179e7efb59

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-05-03 17:10:07 +03:00
Donatas Abraitis
d18ca3ad14 Revert "bgpd: Fix while(read()) for RPKI sync callback"
This reverts commit b4fc876a32.
2022-05-03 15:08:35 +03:00
Donald Sharp
cd5b52482a
Merge pull request #11128 from opensourcerouting/feature/rfc8538
bgpd: Implement GR N-Bit and CEASE/Hard Reset notification
2022-05-02 14:08:04 -04:00
Donald Sharp
6c65d0e8dc
Merge pull request #11132 from anlancs/fix/bgpd-prefix
bgpd: delay "stream_new" in str2prefix_rd()
2022-05-02 13:17:08 -04:00
anlan_cs
8e3aae66ce *: remove the checking returned value for hash_get()
Firstly, *keep no change* for `hash_get()` with NULL
`alloc_func`.

Only focus on cases with non-NULL `alloc_func` of
`hash_get()`.

Since `hash_get()` with non-NULL `alloc_func` parameter
shall not fail, just ignore the returned value of it.
The returned value must not be NULL.
So in this case, remove the unnecessary checking NULL
or not for the returned value and add `void` in front
of it.

Importantly, also *keep no change* for the two cases with
non-NULL `alloc_func` -
1) Use `assert(<returned_data> == <searching_data>)` to
   ensure it is a created node, not a found node.
   Refer to `isis_vertex_queue_insert()` of isisd, there
   are many examples of this case in isid.
2) Use `<returned_data> != <searching_data>` to judge it
   is a found node, then free <searching_data>.
   Refer to `aspath_intern()` of bgpd, there are many
   examples of this case in bgpd.

Here, <returned_data> is the returned value from `hash_get()`,
and <searching_data> is the data, which is to be put into
hash table.

Signed-off-by: anlan_cs <vic.lan@pica8.com>
2022-05-03 00:41:48 +08:00
anlan_cs
ac390ef8ac bgpd: fix memory leak for evpn
If `hash_get()` returns NULL, the list created with
`list_new()` is not be freed.

Since `hash_get()` should not fail, we don't need
`list_delete()` and other boring `XFREE()`s for its
failure case.

Just ignore returning value of `hash_get()` in these
cases.

Signed-off-by: anlan_cs <vic.lan@pica8.com>
2022-05-03 00:41:48 +08:00
Rafael Zalamena
5bcc6b469c bgpd: fix interface name compare
We always want to compare the whole string, lets not use `strncmp` for
this case.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2022-05-02 11:33:48 -03:00
anlan_cs
af785cf2df bgpd: delay "stream_new" in str2prefix_rd()
`stream_new` in `str2prefix_rd()` can be called after some
checkings are passed, so the last `if (s)` in this fuction will
make sense.

Additionally some changes for `str2prefix_rd()`:
1) Use `RD_BYTES` instead of hard number for `stream_new()`
2) Remove unnecessary `lret` variable

Signed-off-by: anlan_cs <vic.lan@pica8.com>
2022-05-02 09:23:51 -04:00
Donatas Abraitis
eea685b6d3 bgpd: Implement CEASE/Hard Reset notification
Also, add N-Bit (Notification) flag for Graceful Restart.

This is a preparation for RFC8538.

More information: https://datatracker.ietf.org/doc/html/rfc8538

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-05-02 09:43:40 +03:00
Dmitrii Turlupov
5f933e1eca bgpd: fix size of esi_buf
Fixes: #11111
Signed-off-by: Dmitrii Turlupov <dturlupov@factor-ts.ru>
2022-04-29 14:56:25 +03:00
Donatas Abraitis
54394daa2d bgpd: Rename graceful restart constants for R-bit capabilities
Just to better understand what they mean.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-04-27 22:32:54 +03:00
Donatas Abraitis
d83facbbf5 bgpd: Rename graceful restart constants for R/F flags
Just to better understand what they mean.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-04-27 21:50:58 +03:00
Donald Sharp
617975d114 bgpd: Ensure pkt_afi and pkt_safi are not used uninited in some cases
The compiler is, rightly, pointing out that in some cases it is
possible that the pkt_afi and pkt_safi values are not properly
set and could result in a use before initialized.  I do not
actually belive that this is possible, but let's make the compiler
happy.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-04-27 08:06:22 -04:00
Donald Sharp
8f904fdb45
Merge pull request #11095 from ecbaldwin/unlock-node-always
bgpd: ensure that the node gets unlocked in all cases
2022-04-26 15:26:03 -04:00
Carl Baldwin
067ea16598 bgpd: ensure that the node gets unlocked in all cases
The logic to unlock dest if iteration completed without iterating the
entire node was flawed. Specifically, if iteration terminated due to
`gr_deferred == 0` then the node would not get unlocked.

This change takes into account the fact that dest will be NULL only in
the case when the entire table was iterated and all nodes were already
unlocked. In any other case, it needs to be unlocked.

Signed-off-by: Carl Baldwin <carl@ecbaldwin.net>
2022-04-26 09:38:37 -06:00
Russ White
dc0c01b268
Merge pull request #11083 from anlancs/fix/bgpd-minor-format
bgpd: optimize "auto_rt" searching procedure for evpn
2022-04-26 08:40:27 -04:00
Russ White
13f52753d4
Merge pull request #11086 from ton31337/feature/rmap_aspath_replace
bgpd: Add `set as-path replace <any|ASN>` cmd for route-maps
2022-04-26 08:38:58 -04:00
Russ White
40a7fcf6ac
Merge pull request #11092 from ton31337/fix/reuse_addf_json
bgpd: Drop inet_ntop for route_vty_out_overlay()
2022-04-26 08:35:53 -04:00
Donatas Abraitis
64f9fa7fcf
Merge pull request #11085 from bobuhiro11/fix_func_bits
bgpd: take SRv6 func-bits into account when generating SIDs
2022-04-26 09:21:39 +03:00
Donatas Abraitis
db66cf7c17 bgpd: Drop inet_ntop for route_vty_out_overlay()
Reuse %pI4/%pI6/%pIA

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-04-25 20:34:51 +03:00
Donatas Abraitis
77e3d82167 bgpd: Add set as-path replace <any|ASN> cmd for route-maps
```
route-map tstas permit 10
 set as-path replace 1
exit
```

Before:

```
donatas-laptop(config-router-af)# do show ip bgp 10.10.10.10/32
BGP routing table entry for 10.10.10.10/32, version 13
Paths: (1 available, best #1, table default)
  Advertised to non peer-group peers:
  192.168.10.65
  65000 1 2 3 123
    192.168.10.65 from 192.168.10.65 (10.10.10.11)
      Origin IGP, metric 0, valid, external, best (First path received)
      Last update: Mon Apr 25 10:39:50 2022
```

After:

```
donatas-laptop(config-router-af)# do show ip bgp 10.10.10.10/32
BGP routing table entry for 10.10.10.10/32, version 15
Paths: (1 available, best #1, table default)
  Advertised to non peer-group peers:
  192.168.10.65
  65000 65010 2 3 123
    192.168.10.65 from 192.168.10.65 (10.10.10.11)
      Origin IGP, metric 0, valid, external, best (First path received)
      Last update: Mon Apr 25 10:40:16 2022
```

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-04-25 14:05:22 +03:00
Nobuhiro MIKI
3b30dedd9c bgpd: take SRv6 func-bits into account when generating SIDs
Prior to this fix, the magic number (16) was used regardless of what value
the user specified for func-bits. With this fix, user-specified values are
handled appropriately.

Signed-off-by: Nobuhiro MIKI <nmiki@yahoo-corp.jp>
2022-04-25 17:37:11 +09:00
anlan_cs
d74a6cc126 bgpd: optimize "auto_rt" searching procedure for evpn
RT value will be unique across different VNIs but the
same across routers (in the same AS) for a particula
VNI.

It is unique, so add `break` for search procedure.

Signed-off-by: anlan_cs <vic.lan@pica8.com>
2022-04-25 04:36:18 -04:00
anlan_cs
671ec57621 bgpd: minor style change
Correct two style places and one comment.

Signed-off-by: anlan_cs <vic.lan@pica8.com>
2022-04-25 04:33:44 -04:00
Donald Sharp
9f002fa5dd bgpd: Fix import check removal
Fix: 06e4e90132

Modified BGP to pay more attention the prefix returned from
zebra to ensure that a LPM wasn't accidently causing BGP
import checks to think it had a match when it did not.
This unfortunately removed the check to handle the route
removal.

This sequence of config and events would leave BGP in a bad state:
ip route 100.100.100.0/24 Null0
router bgp 32932
  bgp network import-check
  address-family ipv4 uni
    network 100.100.100.0/24

Then if you removed the static route the import check would
still think the route existed:

donatas-pc(config)# ip route 100.100.100.0/24 Null0

donatas-pc(config)# do sh ip bgp import-check-table
Current BGP import check cache:
 100.100.100.0 valid [IGP metric 0], #paths 1
  blackhole
  Last update: Sat Apr 23 22:51:34 2022

donatas-pc(config)# do sh ip nht
100.100.100.0
 resolved via static
 is directly connected, Null0
 Client list: bgp(fd 17)

donatas-pc(config)# do sh ip bgp neighbors 192.168.10.123 advertised-routes | include 100.100.100.0
*> 100.100.100.0/24 0.0.0.0                  0         32768 i

donatas-pc(config)# no ip route 100.100.100.0/24 Null0

donatas-pc(config)# do sh ip nht
100.100.100.0
 resolved via kernel
 via 192.168.10.1, enp3s0
 Client list: bgp(fd 17)

donatas-pc(config)# do sh ip bgp import-check-table
Current BGP import check cache:
 100.100.100.0 valid [IGP metric 0], #paths 1
  blackhole
  Last update: Sat Apr 23 22:51:34 2022

donatas-pc(config)# do sh ip bgp neighbors 192.168.10.123 advertised-routes | include 100.100.100.0
*> 100.100.100.0/24 0.0.0.0                  0         32768 i
donatas-pc(config)#

Fix this by moving the code to handle the prefix check to the
evaluation function and mark the bnc as not matching and actually
evaluate the bnc.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-04-24 17:08:12 -04:00
Donald Sharp
a71e190d44
Merge pull request #10961 from opensourcerouting/build-ms-ext
build: enable `-fms-extensions`
2022-04-20 07:51:45 -04:00
Donatas Abraitis
3d3c38b1d4
Merge pull request #11051 from donaldsharp/speell_more
Speell more
2022-04-20 11:04:14 +03:00
Russ White
a037a34436
Merge pull request #10977 from bobuhiro11/alloc_sid_based_on_prefix
bgpd: take SRv6 locator's prefix length into account when generating SIDs
2022-04-19 11:17:57 -04:00
Donatas Abraitis
db8d184392
Merge pull request #11040 from donaldsharp/bgp_type5_route_handling
bgpd: Allow type 5 routes to be handled better when link is flapping
2022-04-19 17:35:22 +03:00
Donald Sharp
4667220e3a *: Fix spelling of accidently
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-04-19 08:31:30 -04:00
Donald Sharp
2ef62909a9 *: Fix spelling of atleast
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-04-19 08:25:03 -04:00
Donald Sharp
544be97911 *: Fix spelling of strucutre
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-04-19 08:19:37 -04:00
Donald Sharp
ce5002c659 *: Fix spelling of comparision
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-04-19 08:18:43 -04:00
Donald Sharp
8afb9d8a70 *: Fix spelling of seperator
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-04-19 08:15:23 -04:00
Donatas Abraitis
f5327fc339
Merge pull request #11012 from anlancs/bgpd-mh-simplify-condition
zebra: simplify one check for evpn-mh
2022-04-19 13:04:43 +03:00
Jafar Al-Gharaibeh
4079cda2e6
Merge pull request #11032 from anlancs/fix/bgpd-evpn-mh-null-debug
bgpd: fix NULL deference in evpn-mh's log
2022-04-18 22:42:03 -05:00
Donald Sharp
7f2e9cce7f bgpd: Allow type 5 routes to be handled better when link is flapping
In some stress testing, we are seeing type-5 evpn routes being
left in a rejected state in zebra.

Sequence of events as I am seeing it:

a) Interface comes up that type5 routes nexthop depends on
b) zebra processes creates the connected and lets bgp know via nht
c) bgp installs the route to zebra
d) zebra processes and sends install to kernel
e) before route is installed, the interface the nexthop points at flaps
f) the route install is rejected, notify zebra
g) the interface comes up
h) zebra gets the notification about the route install rejection
i) zebra processes the down/up and turns it into a single up event
j) BGP never reinstalls the type 5 route

This up event does not translate into a nexthop tracking event
when the events happen quickly enough and/or zebra is extremelyh
busy and bgp would never see that the nexthops changed even very quickly.

This is the same thing that was going on with
https://github.com/FRRouting/frr/pull/7724
in PBR.

To fix this let's notice the interface up/down events for v4
in bgp now as well.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-04-18 14:15:23 -04:00
Russ White
eb3bd82451
Merge pull request #11028 from ton31337/fix/pass_non_transitive_communities_via_rsclient
bgpd: Pass non-transitive ext-communities between Route Server and RS clients
2022-04-15 16:04:04 -04:00
anlan_cs
46281b21af bgpd: fix NULL deference in evpn-mh's log
Fix NULL deference issue in log. And change one word - "vtep",
it should be with lowercase letters like other places.

Signed-off-by: anlan_cs <vic.lan@pica8.com>
2022-04-14 11:10:32 -04:00
Nobuhiro MIKI
9fa4ae2943 bgpd: take SRv6 locator's prefix length into account when generating SIDs
Until now, it has been hard-coded that the position at which the label
is inserted is from the 64th bits. Therefore, when the Locator prefix
was not /64, incorrect SIDs were generated. Also, SIDs are generated
in duplicate on Lines 604 & 613 in bgpd/bgp_mplsvpn.c.

In this patch, the position where the label is inserted is calculated
based on the sum of block_bits_length and node_bits_length (i.e., the
user-specified Locator prefix length). In addition, SID generation is
performed at one location in alloc_new_sid.

Signed-off-by: Nobuhiro MIKI <nmiki@yahoo-corp.jp>
2022-04-14 14:37:55 +09:00
Donatas Abraitis
b17d5444f4 bgpd: Pass non-transitive ext-communities between Route Server and RS clients
https://datatracker.ietf.org/doc/html/rfc7947#section-2.2

Optional recognized and unrecognized BGP attributes,
   whether transitive or non-transitive, SHOULD NOT be updated by the
   route server (unless enforced by local IXP operator configuration)
   and SHOULD be passed on to other route server clients.

By default LB ext-community works with iBGP peers. When we receive a route
from eBGP peer, we can send LB ext-community to iBGP peers.

With this patch, allow sending LB ext-community to iBGP/eBGP peers if they
are set as RS clients.

FRR does not send non-transitive ext-communities to eBGP peers, but for
example GoBGP sends and if it's set as RS client, we should pass those attributes
towards another RS client.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-04-14 08:36:20 +03:00
Nobuhiro MIKI
808ad1b617 bgpd: fix memory leak
Signed-off-by: Nobuhiro MIKI <nmiki@yahoo-corp.jp>
2022-04-14 10:07:22 +09:00
Russ White
0d523362d6
Merge pull request #10978 from anlancs/bgpd-cleanup-6
bgpd: cosmetic change for evpn-mh
2022-04-13 15:27:39 -04:00
Russ White
bd751c0700
Merge pull request #10987 from opensourcerouting/fix/bgp_conditional_advertisements_rmap_change_peer_groups
bgpd: Do not forget to update conditional advertisements rmaps for peer-groups
2022-04-13 15:00:14 -04:00
Russ White
8a86917097
Merge pull request #11024 from anlancs/bgpd-fix-missing-newline
bgpd: fix wrong check for default VRF
2022-04-13 14:56:00 -04:00
Russ White
5dd323579a
Merge pull request #11025 from anlancs/bgpd-remove-l3nhg-control
bgpd: remove unnecessary l3nhg knob for evpn-mh
2022-04-13 14:55:29 -04:00
Russ White
6a1dbeba2f
Merge pull request #11010 from opensourcerouting/feature/reuse_bgp_attr_set_community_for_flags
bgpd: Reuse bgp_attr_set_[el]community() for setting attribute flags
2022-04-13 14:54:30 -04:00
Russ White
a39df8492d
Merge pull request #11009 from opensourcerouting/fix/med_for_aggregate-address
bgpd: aggregate-address fixes
2022-04-13 14:53:14 -04:00
Russ White
7c6316c521
Merge pull request #11013 from opensourcerouting/fix/convert_bgp_peer_sort_t_to_enum
bgpd: typedef enum to enum
2022-04-13 14:52:58 -04:00
Donatas Abraitis
cd876f8a78
Merge pull request #10935 from anlancs/zebra-mh-esi-warning
zebra: adjust the warnings for ESI of evpn-mh
2022-04-13 15:45:07 +03:00
anlan_cs
c2b7d418f7 bgpd: remove unnecessary l3nhg knob for evpn-mh
Remove unnecessary `install_l3nhg` knob because it has already
been controlled by the command: "[no$no] use-es-l3nhg".

Signed-off-by: anlan_cs <vic.lan@pica8.com>
2022-04-13 05:17:08 -04:00
anlan_cs
4a5271a56b bgpd: fix wrong check for default VRF
Currently the warning is wrong:
```
root#show bgp vrf default vni
BGP instance for VRF default not foundACC1(config)#
```

Two changes for "show bgp vrf VRFNAME vni [json]":
- Correct the default VRF check
- Add newline for warning

Signed-off-by: anlan_cs <vic.lan@pica8.com>
2022-04-13 05:00:33 -04:00
Abhinay Ramesh
f78cfba9c9 bgpd: Metric not set with default route.
Description:
- When default route is originated using the
  neighbor default-originate command, MED is
  not set as part of the update message
  attribute.

- Changes are done to set the MED value and MED
  flag for default route.

Co-authored-by: Abhinay Ramesh <rabhinay@vmware.com>
Signed-off-by: Iqra Siddiqui <imujeebsiddi@vmware.com>
2022-04-12 19:55:54 -07:00
Donatas Abraitis
682abee174 bgpd: Apply frrbot styling
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-04-12 22:15:17 +03:00
Donatas Abraitis
e8e36ff315 bgpd: Convert bpacket_attr_vec_type to enum
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-04-12 22:13:55 +03:00
Donatas Abraitis
79288e4c12 bgpd: Convert bgp_attr_parse_ret_t to enum
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-04-12 22:13:55 +03:00
Donatas Abraitis
9c2fd3fe44 bgpd: Convert vpn_policy_direction_t to enum
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-04-12 22:13:55 +03:00
Donatas Abraitis
d54f55f22d bgpd: Convert bgp_policy_type_e to enum
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-04-12 22:13:55 +03:00
Donatas Abraitis
3061acc235 bgpd: Convert bgp_peer_sort_t to enum
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-04-12 22:13:55 +03:00
Donatas Abraitis
26870e2dcc bgpd: Fix styling, drop braces for single statement block
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-04-12 22:12:16 +03:00
Donatas Abraitis
58cf5c088a bgpd: Reuse bgp_attr_set_ecommunity() for setting attribute flags
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-04-12 22:09:28 +03:00
Donatas Abraitis
9d34440bf8 bgpd: Reuse bgp_attr_set_[l]community() for setting attribute flags
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-04-12 22:09:28 +03:00
Russ White
695c24c3b0
Merge pull request #10994 from opensourcerouting/fix/autocomplete_for_advertise_map
bgpd: Use autocomplete for route-map under conditional advertisements CLI
2022-04-12 14:40:33 -04:00
Russ White
94ee557658
Merge pull request #10999 from opensourcerouting/fix/bgp_aliases_with_community
bgpd: Allow setting BGP [large]community in route-maps
2022-04-12 14:37:58 -04:00
Mark Stapp
946fb036a3
Merge pull request #11000 from opensourcerouting/feature/show_conditional_adv_timer_in_neighbor_cli
bgpd: Show conditional advertisement timers in neighbor CLI output
2022-04-12 11:54:16 -04:00
anlan_cs
fff7545a03 bgpd: correct a few comments for evpn-mh
Correct a few evpn-mh omissions mainly on type-1 and type-4.

Signed-off-by: anlan_cs <vic.lan@pica8.com>
2022-04-12 09:33:06 -04:00
Donatas Abraitis
764402feba bgpd: Fix styling for aggregate_addressv4_cmd
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-04-11 17:53:42 +03:00
Donatas Abraitis
cacba915d0 bgpd: Add autocomplete for aggregate-address ... route-map X
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-04-11 17:47:52 +03:00
Donatas Abraitis
59136db5a7 bgpd: Send MED attribute when aggregate prefix is created
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-04-11 17:46:04 +03:00
anlan_cs
b3ba21181a bgpd: correct one flag name on comment for evpn-mh
Correct flag name of `attr.es_flags` - ATTR_ES_L3_NHG_USE.

"bgp_path_info"s (Per "es-vrf") with this flag can use l3nhg.

Signed-off-by: anlan_cs <vic.lan@pica8.com>
2022-04-10 19:39:19 +08:00