Commit Graph

34801 Commits

Author SHA1 Message Date
Donatas Abraitis
c6e5b8030f bgpd: Optimize memory for bgp_nexthop_cache struct
```
struct bgp_nexthop_cache {
	afi_t                      afi;                  /*     0     4 */
	ifindex_t                  ifindex_ipv6_ll;      /*     4     4 */
	struct bgp_nexthop_cache_item entry;             /*     8    32 */
	uint32_t                   metric;               /*    40     4 */
	uint8_t                    nexthop_num;          /*    44     1 */
	_Bool                      is_evpn_gwip_nexthop; /*    45     1 */
	uint16_t                   change_flags;         /*    46     2 */
	struct nexthop *           nexthop;              /*    48     8 */
	time_t                     last_update;          /*    56     8 */
	/* --- cacheline 1 boundary (64 bytes) --- */
	uint16_t                   flags;                /*    64     2 */

	/* XXX 2 bytes hole, try to pack */

	uint32_t                   srte_color;           /*    68     4 */
	struct bgp_nexthop_cache_head * tree;            /*    72     8 */
	struct prefix              prefix __attribute__((__aligned__(8))); /*    80    56 */
	/* --- cacheline 2 boundary (128 bytes) was 8 bytes ago --- */
	void *                     nht_info;             /*   136     8 */
	struct path_list           paths;                /*   144     8 */
	unsigned int               path_count;           /*   152     4 */

	/* XXX 4 bytes hole, try to pack */

	struct bgp *               bgp;                  /*   160     8 */

	/* size: 168, cachelines: 3, members: 17 */
	/* sum members: 162, holes: 2, sum holes: 6 */
	/* forced alignments: 1 */
	/* last cacheline: 40 bytes */
} __attribute__((__aligned__(8)));   /* saved 16 bytes! */
```

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-02-09 17:25:05 +02:00
Donatas Abraitis
d13abf1180 bgpd: Optimize memory for ecommunity struct
```
struct ecommunity {
	long unsigned int          refcnt;               /*     0     8 */
	uint8_t                    unit_size;            /*     8     1 */
	_Bool                      disable_ieee_floating; /*     9     1 */

	/* XXX 2 bytes hole, try to pack */

	uint32_t                   size;                 /*    12     4 */
	uint8_t *                  val;                  /*    16     8 */
	char *                     str;                  /*    24     8 */

	/* size: 32, cachelines: 1, members: 6 */
	/* sum members: 30, holes: 1, sum holes: 2 */
	/* last cacheline: 32 bytes */
};   /* saved 8 bytes! */
```

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-02-09 17:21:23 +02:00
Donatas Abraitis
1fce318efc bgpd: Optimize memory for bgp_adj_out struct
```
struct bgp_adj_out {
	struct rb_entry            adj_entry;            /*     0    32 */

	/* XXX last struct has 4 bytes of padding */

	struct update_subgroup *   subgroup;             /*    32     8 */
	struct {
		struct bgp_adj_out * tqe_next;           /*    40     8 */
		struct bgp_adj_out * * tqe_prev;         /*    48     8 */
	} subgrp_adj_train;                              /*    40    16 */
	struct bgp_dest *          dest;                 /*    56     8 */
	/* --- cacheline 1 boundary (64 bytes) --- */
	uint32_t                   addpath_tx_id;        /*    64     4 */
	uint32_t                   attr_hash;            /*    68     4 */
	struct attr *              attr;                 /*    72     8 */
	struct bgp_advertise *     adv;                  /*    80     8 */

	/* size: 88, cachelines: 2, members: 8 */
	/* paddings: 1, sum paddings: 4 */
	/* last cacheline: 24 bytes */
};   /* saved 8 bytes! */
```

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-02-09 17:18:22 +02:00
Jafar Al-Gharaibeh
75d3e43368
Merge pull request #15327 from routingrocks/pim_evpn_traffic_loss
pimd: re-evaluated S,G OILs upon RP changes and empty SG upstream oils
2024-02-09 09:15:01 -06:00
Donatas Abraitis
b7987eca20
Merge pull request #15333 from c-po/issue-14910
ospfd: can not delete "segment-routing node-msd" when SR if off
2024-02-09 12:34:58 +02:00
Donatas Abraitis
7174a7d213
Merge pull request #15336 from c-po/issue-15335
ospfd: add support for "no router-info [<area|as>] command"
2024-02-09 12:33:59 +02:00
Christian Breunig
e744db5098 ospfd: add support for "no router-info [<area|as>] command"
frr-reload.py will walk through all config contexts and prepend no to the CLI
command. This requires that the vtysh shell code accepts a full command.

To Reproduce

vtysh -c "conf t" -c "router ospf" -c "router-info area"
vtysh -c "conf t" -c "router ospf" -c "no router-info area"
% Unknown command: no router-info area
vtysh -c "conf t" -c "router ospf" -c "no router-info"

Signed-off-by: Christian Breunig <christian@breunig.cc>
2024-02-08 22:40:54 +01:00
Christian Breunig
ba45aa62e7 ospfd: can not delete "segment-routing node-msd" when SR if off
This fixes the initial implementation of commit 7743f2f8c0 ("OSPFd: Update
Segment Routing PR following review") where it wsa not possible to remove
the "segment-routing node-msd" CLI nodes via vtysh once segment-routing got
disabled.

Closes #14910

Signed-off-by: Christian Breunig <christian@breunig.cc>
2024-02-08 21:56:08 +01:00
Donald Sharp
c70af155d2
Merge pull request #15285 from idryzhov/staticd-nexthop-refcounter
staticd: fix nexthop tracking memory leak and add a topotest for VRFs
2024-02-08 15:53:30 -05:00
Rajesh Varatharaj
071d43a052 pimd: re-evaluated S,G OILs upon RP changes and for empty SG upstream oils
Topology:

TOR11 (FHR) --- LEAF-11---SPINE1 (RP)MSDP SPINE-2(RP)MSDP --- LEAF-12 -- TOR12 (LHR)
        |         |                    |				|       |
	|         -----------------------------------------------------(ECMP)   |
	|         |		                                |               |
	 -----------------------------------------------------------------------(ECMP)
Issue:
In some triggers, S,G upstream is preserved even with the PP timer expiry, resulting
in S,G with NULL OILS. This could be because we create a dummy S,G upstream and
dummy channel_oif for *,G, where RPF is UNKNOWN. As a result, PIM+VXLAN traffic is never
forwarded downstream to LHR.

Fix:
when the S,G stream is running, Determine if a reevaluation of the outgoing interface
 list (OIL) is required. S,G upstream should then inherit the OIL from *,G.

Testing:
- Evpn pim tests - TestEvpnPimSingleVtepOneMdt.test_02_broadcast_traffic_spt_zero
- pim-smoke

Ticket: #
Signed-off-by: Rajesh Varatharaj <rvaratharaj@nvidia.com>
2024-02-08 10:37:31 -08:00
Donald Sharp
b2ade8e3d2 zebra: When reinstalling a NHG, set REINSTALL flag
The current code is unsetting the fact that the
NHG is installed.  It is installed but we are
reinstalling it.  Let's note this in the code
appropriately as REINSTALL and not remove the
INSTALLED FLAG.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-02-08 12:32:26 -05:00
Donald Sharp
e28162b215 zebra: Move nhg reinstallation into if_up proper
The function call in to zebra_interface_nhg_reinstall
is an action that takes place on interface up events
*not* when the connected addresses are added to
a system.  this will prevent this function being
called when new connected interfaces come alive
that is an independent operation of the interface
coming up.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-02-08 12:22:09 -05:00
Donald Sharp
fbce9231d1 zebra: Remove function abstraction in interface.c
zebra_if_nhg_dependents_XXX were just simple wrapper
functions that inited/deleted data structures.
These were already function calls themselves.  Let's
remove the abstraction and make the code simpler.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-02-08 12:05:05 -05:00
Donald Sharp
2934127547 zebra: Remove ifp_nhg_XXX functions completely
These functions provided a level of abstraction that forced
us to call multiple functions when a simple data structure
change was all that is needed.  Let's consolidate down
and make things a bit simpler.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-02-08 11:56:40 -05:00
Donald Sharp
b9130ab51b zebra: Remove helper function if_nhg_dependents_is_empty
Let's just let the function figure this out.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-02-08 11:49:08 -05:00
Donald Sharp
910b2c5a4a zebra: Installation success should not set NHG as valid
The nexthop group is marked as valid/invalid and then
installed.  Not installed and then marked valid.
This is just a bit of code removed that might be covering
up other problems that need to be sorted.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-02-08 11:37:26 -05:00
Donald Sharp
0fa9ee396b zebra: Use switch when handling return from dplane for nhgs
Convert the dplane results function for nhg's over to
using a switch for the result enum.  Let's specifically
call out the unexpected state and also set the nexthop
group as not installed when installation fails.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-02-08 11:37:25 -05:00
Donald Sharp
afa07a7f3a
Merge pull request #15255 from louis-6wind/bgp-leak-interface
bgpd: fix interface of routes leaked from another VRF
2024-02-08 11:18:58 -05:00
Donald Sharp
04d0834464
Merge pull request #15326 from pguibert6WIND/bgp_flowspec_ipv6_flush
bgpd: fix flushing ipv6 flowspec entries when peering stops
2024-02-08 10:36:00 -05:00
Donald Sharp
fcf1ab9c21
Merge pull request #15325 from opensourcerouting/fix/show_getsockopt
bgpd: Do not show TCP MSS if the socket is broken
2024-02-08 10:33:34 -05:00
Donald Sharp
9e42c61305
Merge pull request #15316 from LabNConsulting/working/lb/nhrp-nexthop-race-cond
nhrp: fix race condition in  null lladdr from zebra
2024-02-08 10:31:46 -05:00
Donald Sharp
aac45c8a97
Merge pull request #15324 from opensourcerouting/fix/doc_route_map_continue
doc: Fix the documentation for route-map continue statement
2024-02-08 08:19:56 -05:00
Donald Sharp
8f76afd044 zebra: Conslidate zebra_nhg_set_valid|invalid functions
Basically the same function two times.  Let's consolidate.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-02-08 07:59:11 -05:00
Donald Sharp
90e5cafdb6 zebra: Fixup documentation in zebra_nhg.h
The documentation was wrong.  Let's adjust it.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-02-08 07:58:54 -05:00
Donald Sharp
65d82a45ec zebra: dplane_nexthop_add cannot return ZEBRA_DPLANE_REQUEST_SUCCESS
When installing a NHG via dplane_nexthop_add, it can only return
REQUEST_QUEUED or REQUEST_FAILURE.  There is no way SUCCESS can
be returned with the way the dplane works at this point in time.
Remove the code that attempts to set the NHE state appropriately
as it is impossible.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-02-07 20:32:24 -05:00
Lou Berger
5d9ebe6181 nhrp: fix race condition
where null lladdr recieved from zebra before nhrp next hop
	is installed.

Signed-off-by: Lou Berger <lberger@labn.net>
2024-02-07 23:05:20 +00:00
Philippe Guibert
ec6e09c271 bgpd: fix flushing ipv6 flowspec entries when peering stops
When a BGP flowspec peering stops, the BGP RIB entries for IPv6
flowspec entries are removed, but not the ZEBRA RIB IPv6 entries.

Actually, when calling bgp_zebra_withdraw() function call, only
the AFI_IP parameter is passed to the bgp_pbr_update_entry() function
in charge of the Flowspec add/delete in zebra. Fix this by passing
the AFI parameter to the bgp_zebra_withdraw() function.

Note that using topotest does not show up the problem as the
flowspec driver code is not present and was refused. Without that,
routes are not installed, and can not be uninstalled.

Fixes: 529efa2346 ("bgpd: allow flowspec entries to be announced to zebra")
Link: https://github.com/FRRouting/frr/pull/2025

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2024-02-07 23:01:25 +01:00
Christian Hopps
ab3d0846bd
Merge pull request #15286 from idryzhov/fix-mgmt-startup
Fix conflict in mgmtd on startup
2024-02-07 16:04:11 -05:00
Donatas Abraitis
65497556ed bgpd: Do not show TCP MSS if the socket is broken
Just avoid calling for TCP MSS socket option if it's not in use.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-02-07 23:03:37 +02:00
Donatas Abraitis
fce81856ed doc: Fix the documentation for route-map continue statement
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-02-07 22:57:56 +02:00
Donatas Abraitis
acd7b6922e
Merge pull request #15317 from louis-6wind/fix-affinity-map-odr
lib: fix affinity map duplicate
2024-02-07 22:42:36 +02:00
Donatas Abraitis
4d7975ee59 bgpd: Add neighbor X send-community extended rpki command
By default, iBGP and eBGP-OAD peers exchange RPKI extended community by default.

Add a command to disable sending RPKI extended community if needed.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-02-07 22:35:21 +02:00
Donatas Abraitis
f6463dab85 tests: Test if RPKI extended community can be disabled between peers
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-02-07 22:35:21 +02:00
Donatas Abraitis
39d6ba6e86 doc: Add neighbor X send-community extended rpki command
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-02-07 22:35:21 +02:00
Igor Ryzhov
2574f03a13 vtysh: remove resync workaround when exiting to config node
When exiting from a level below the config node, like `router rip`,
vtysh executes a resync by sending "end" and "conf term [file-lock]"
commands to all the daemons. As statet in the description comment, it's
done "in case one of the daemons is somewhere else". I don't think this
actually ever happens, but even if it is, it is a bug in a daemon that
needs to be fixed. This resync was okay before the introduction of
mgmtd, but now it unlocks and locks back the datastores during the
configuration reading process, which can lead to a failure which is
explained in the previous commit.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2024-02-07 18:37:29 +02:00
Igor Ryzhov
0db4d555e9 mgmtd, vtysh: fix possible conflict when reading the config
When FRR starts, after mgmtd is initialized, backend clients connect to
it and request their config. To supply the config, mgmtd creates a
configuration transaction. At the same time, `vtysh -b` tries to read
the startup config and configure mgmtd, which also creates a
configuration transaction. If these two actions happen at the exact same
time, there's a conflict between them, because only a single
configuration translaction is allowed. Because of that, vtysh fails and
the config is completely ignored.

When starting the config reading, vtysh locks candidate and running
datastores in mgmtd. This commit adds locking of running datastore when
initializing the backend client. It allows to retry locking on the vtysh
side and read the config only when the lock is aquired instead of
failing.

This change also prevents running datastore from being changed during
initialization of backend clients. This could lead to a desynchronized
state between mgmtd and backends.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2024-02-07 18:37:29 +02:00
Donald Sharp
729dd6f626 lib, ospfclient, tests, vtysh: Allow for a minimum fd poll size
There exists cases where just honoring the FD_LIMIT size
as given to us by the operating system makes no sense.
Let's just make a switch to allow for this for things
like vtysh and ospfclient which will never have 1k files
open at any given time.

Fixes: #15315
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-02-07 10:38:02 -05:00
Louis Scalbert
83e0d67854 lib: fix affinity map duplicate
Fix duplicate definition of frr_affinity_map_cli_info in libfrr.so.0 and
libmgmt_be_nb.so.0

> =================================================================
> ==3860488==ERROR: AddressSanitizer: odr-violation (0x7f12c98c4d20):
>   [1] size=296 'frr_affinity_map_cli_info' lib/affinitymap_cli.c:77:35
>   [2] size=296 'frr_affinity_map_cli_info' lib/affinitymap_cli.c:77:35
> These globals were registered at these points:
>   [1]:
>     #0 0x7f12c9a36f40 in __asan_register_globals ../../../../src/libsanitizer/asan/asan_globals.cpp:341
>     #1 0x7f12c9585b7d in _sub_I_00099_1 (/lib/libfrr.so.0+0x185b7d)
>     #2 0x7f12ca437fe1 in call_init elf/dl-init.c:72
>
>   [2]:
>     #0 0x7f12c9a36f40 in __asan_register_globals ../../../../src/libsanitizer/asan/asan_globals.cpp:341
>     #1 0x7f12c93824ed in _sub_I_00099_1 (/lib/libmgmt_be_nb.so.0+0x6f4ed)
>     #2 0x7f12ca437fe1 in call_init elf/dl-init.c:72
>
> ==3860488==HINT: if you don't care about these errors you may set ASAN_OPTIONS=detect_odr_violation=0
> SUMMARY: AddressSanitizer: odr-violation: global 'frr_affinity_map_cli_info' at lib/affinitymap_cli.c:77:35
> ==3860488==ABORTING

Fixes: dc6ff4c0de ("lib: convert affinity-map to mgmtd")
Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2024-02-07 14:54:08 +01:00
David Schweizer
1bd96365e4
tests: Reduce wait intervals in test_bgp_snmp_bgp4v2mib
Remove sleep time in test_bgp_snmp_bgp4v2mib before run_and_expect and
reduce wait intervals for faster test convergence.

Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
Signed-off-by: David Schweizer <dschweizer@opensourcerouting.org>
2024-02-07 13:56:10 +01:00
David Schweizer
961667e34f
topotests: fix snmptrap log OID parsing
Replace OID string parsing of snmptrap log files based on odd/even line
numbers with regex string search to prevent test failures in cases where
log entries don't match assumed order.

Signed-off-by: David Schweizer <dschweizer@opensourcerouting.org>
2024-02-07 13:56:09 +01:00
Donald Sharp
7fe05d6185
Merge pull request #15314 from opensourcerouting/fix/remove_bgp_evpn_attr_get_df_pref
bgpd: A couple random EVPN findings
2024-02-07 07:44:07 -05:00
Donald Sharp
1bc2fa3584
Merge pull request #15305 from louis-6wind/label-dead-code
bgpd: remove dead label code in bgp_update
2024-02-06 14:50:56 -05:00
Donald Sharp
f28447e352
Merge pull request #15283 from okda-networks/doc-update
doc: sysrepo plugin doc update with test commands
2024-02-06 11:42:02 -05:00
Donald Sharp
a791deff91
Merge pull request #15311 from louis-6wind/fix-show-srv6-sid
bgpd: fix displaying srv6 sid
2024-02-06 11:40:14 -05:00
Donald Sharp
e369d2cca8
Merge pull request #15301 from opensourcerouting/fix/fqdn_capability_dynamic
bgpd: Send FQDN capability via dynamic capability if enabled
2024-02-06 11:36:03 -05:00
Mark Stapp
ac275c89c3
Merge pull request #15308 from donaldsharp/update_source_documentation
doc: Document `update-source <IFNAME>` command better
2024-02-06 08:24:17 -05:00
Louis Scalbert
0603626184 bgpd: remove dead label code in bgp_update
No need to init new_attr. It is not used until it is overridden.

> new_attr = *attr;

Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2024-02-06 13:30:14 +01:00
Igor Ryzhov
763ce7bb37 tests: add topotest for static routes in VRF
Test how staticd handles VRF creation/deletion.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2024-02-06 14:15:37 +02:00
Donatas Abraitis
82d43634a4 zebra: Use uint16_t for DF preference
It's 16-bits everywhere, not sure why it was here as 32.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-02-06 14:03:36 +02:00
Donatas Abraitis
bd7bad9121 bgpd: Drop unused function bgp_evpn_attr_get_df_pref()
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2024-02-06 14:02:51 +02:00