Commit Graph

30910 Commits

Author SHA1 Message Date
Sharath Ramamurthy
1ca713b375 tests: add new topotest for single vxlan device config
Add new topo tests for validating mac learning, bridging and routing
with single vxlan device configuration

Signed-off-by: Sharath Ramamurthy <sramamurthy@nvidia.com>
2023-02-13 18:12:04 -05:00
Sharath Ramamurthy
aeefc6028b zebra: Add documentation for Single Vxlan Device support
Add documentation for single vxlan device suppport and configuration
commands

Signed-off-by: Sharath Ramamurthy <sramamurthy@nvidia.com>
2023-02-13 18:12:04 -05:00
Sharath Ramamurthy
e8a392d91c zebra: fix for issues found during static analysis
This patch addresses fix for issues found during static analysis.
rt_netlink - initialise vtep if there is NDA_DST attribute
if_netlink - initialise vni_start and vni_end

Signed-off-by: Sharath Ramamurthy <sramamurthy@nvidia.com>
2023-02-13 18:12:04 -05:00
Sharath Ramamurthy
fe44a3696f zebra: check for vni before comparison in zl3vni_map_to_vxlan_if_ns
Check for vni before doing comparion during vxlan vni search in zl3vni_map_to_vxlan_if_ns

Signed-off-by: Sharath Ramamurthy <sramamurthy@nvidia.com>
2023-02-13 18:12:04 -05:00
Sharath Ramamurthy
b459b90de8 zebra: add zebra_vxlan_if.h header file to noinst_HEADER
zebra_vxlan_if.h header file was missed in noinst_HEADERS resulting
in build failure for some platforms.

Signed-off-by: Sharath Ramamurthy <sramamurthy@nvidia.com>
2023-02-13 18:12:04 -05:00
Stephen Worley
e0893ac1c8 zebra: add zebra_l2_bridge_if.h header file to noinst_HEADER
zebra_l2_bridge_if.h header file was missed in noinst_HEADERS resulting
in build failure for some platforms.

Signed-off-by: Stephen Worley <sworley@nvidia.com>
2023-02-13 18:12:04 -05:00
Sharath Ramamurthy
9c21cf68bf zebra: Add ifdump vty json extension for vxlan/vni
This patch adds dump for vxlan/vni for vxlan devices in if_dump_vty_json

Signed-off-by: Sharath Ramamurthy <sramamurthy@nvidia.com>
2023-02-13 18:12:04 -05:00
Sharath Ramamurthy
9464e5b865 zebra: Bug fixes in fdb read for flooded traffic and remote fdb cleanup upon vni removal
This patch addresses following issues,
- When the VLAN-VNI mapping is configured via a map and not using
  individual VXLAN interfaces, upon removal of a VNI ensure that the
  remote FDB entries are uninstalled correctly.

- When VNI configuration is performed using VLAN-VNI mapping (i.e., without
  individual VXLAN interfaces) and flooded traffic is handled via multicast,
  the multicast group corresponding to the VNI needs to be explicitly read
  from the bridge FDB. This is relevant in the case of netlink interface to
  the kernel and for the scenario where a new VNI is provisioned or comes up.

Signed-off-by: Sharath Ramamurthy <sramamurthy@nvidia.com>
2023-02-13 18:12:04 -05:00
Sharath Ramamurthy
feffe4eea6 zebra: Handle vni determination for non-vlan-aware bridges
This patch addresses following

- Remove unused VLAN Id parameter when trying to determine the VNI associated
  with a non-VLAN aware bridge. Also, add a check to ensure that in this case,
  we have a per-VNI VXLAN interface. Due to sequence of events, it is possible
  that we may have VLAN-VNI mappings, in which case the code should return
  gracefully.

- With support for a container VXLAN interface that has VLAN-VNI mappings,
  the VXLAN interface itself may be up but a particular VNI might have
  been removed. Ensure that VNI mapping exists before proceeding with
  further processing.

Signed-off-by: Sharath Ramamurthy <sramamurthy@nvidia.com>
2023-02-13 18:12:04 -05:00
Sharath Ramamurthy
4a08e69746 zebra: Bug fixes in vtysh doc string, mcast group handling and vni deletion handling with single vxlan device
This patch addresses following bug fixes

- Fix vtysh doc string in "show evpn access-vlan..." command
- Multicast group handling was little complex. This change avoids calling
  multiple functions and directly calls the zebra_vxlan_if_update_vni for
  mcast group updates.
- When a vlan-vni map is removed, the removed vni deletion was happening
  in FRR with SVD config. This was resulting in stale vni and not
  resulting propagation of the vni deletion.
  During vni cleanup (zebra_vxlan_if_vni_clean) zebra_vxlan_if_vni_del
  was called for vni delete which is not correct. We should be calling
  zebra_vxlan_if_vni_entry_del for the given vni entry.

Signed-off-by: Sharath Ramamurthy <sramamurthy@nvidia.com>
2023-02-13 18:12:04 -05:00
Sharath Ramamurthy
efde4f2561 zebra: Refactoring changes for zebra_evpn_map_vlan zebra_evpn_from_svi and zl3vni_from_svi
Today to find the vni for a given (vlan, bridge) we walk over all interfaces
and filter the vxlan device associated with the bridge. With multiple vlan aware
bridge changes, we can derive the vni directly by looking up the hash table i.e.
the vlan_table of the associated (vlan, bridge) which would give the vni.

During vrf_terminate() call zebra_l2_bridge_if_cleanup if the interface
that we are removing is of type bridge. In this case, we walk over all
the vlan<->access_bd association and clean them up.

zebra_evpn_t is modified to record (vlan, bridge) details and the
corresponding vty is modified to print the same.
zevpn_bridge_if_set and zl3vni_bridge_if_set is used to set/unset the
association.

Signed-off-by: Sharath Ramamurthy <sramamurthy@nvidia.com>
2023-02-13 18:12:04 -05:00
Sharath Ramamurthy
239b26f932 zebra: multiple vlan aware bridge data structure and related changes
Multiple vlan aware bridge data structure changes and its corresponding bridge
handling changes.
A new vlan-table is maintained for each bridge which records the zebra_l2_bridge_vlan
entry. zebra_l2_bridge_vlan maps vlan to access_bd associated to this bridge.

Existing zebra_evpn_access_bd structure is vlan aware which is now modified to be
(vlan, bridge) aware.

Whenever a new access_bd is instantiated, a corresponding entry is also recorded
in the zebra l2 bridge for the vlan.
When the access_bd is dereferenced or whenever a bridge is deleted, the
association is cleaned up.

Signed-off-by: Sharath Ramamurthy <sramamurthy@nvidia.com>
2023-02-13 18:12:04 -05:00
Sharath Ramamurthy
131a9a2eed zebra: single vxlan device vni handling
This change brings in following functionality
- netlink_bridge_vxlan_vlan_vni_map_update for single vxlan devices
  This function is responsible for reading the vlan-vni map information
  received from netlink and populating a new hash_table with the vlan-vni
  data. Once all the vlan-vni data is collected, zebra_vxlan_if_vni_table_add_update
  is called to update vni_table in vxlan interface and process each of the
  vlan-vni data.
- refactoring changes for zevpn_build_hash_table
- existing zevpn_build_hash_table was walking over all the vxlan interfaces
  and then processing the vni for each of them. In case of single vxlan device,
  we will have more than one vni entries. This function is abstracted so that
  it iterates over all the vni entries for single vxlan device. For traditional
  vxlan device the zebra_vxlan_if_vni_iterate would only process single vni
  associated with that device.

Signed-off-by: Sharath Ramamurthy <sramamurthy@nvidia.com>
2023-02-13 18:12:04 -05:00
Sharath Ramamurthy
96c25556a1 zebra: vxlan interface handling changes
This change modifies zebra_vxlan_if_up/down/add/update and del functionality
to be per vni based.

zebra_vxlan_if_add/update/del and zebra_vxlan_if_up/down now handles
the vni operations based on vxlan device type (single or traditional vxlan device).

zebra_vxlan_if_vni_table_add_update
- This function handles the vlan-vni map update received from the netlink
  interface to single vxlan device vni_table hash table.

zebra_vxlan_if_vni_mcast_group_update
- This function handles the new multicast group update received from
  the netlink interface to single vxlan device vni_table hash table.

For traditional vxlan interfaces, the vni and mcast group
handling follows the traditional approach.

Signed-off-by: Sharath Ramamurthy <sramamurthy@nvidia.com>
2023-02-13 18:12:04 -05:00
Sharath Ramamurthy
0adeb5fdf4 zebra: vxlan interface refactoring changes
This change refactors the zebra_vxlan_if related functionality
to a new zebra_vxlan_if.c file. zebra_vxlan_if_up/down,
zebra_vxlan_if_add/update/del is moved zebra_vxlan_if.c

Signed-off-by: Sharath Ramamurthy <sramamurthy@nvidia.com>
2023-02-13 18:12:04 -05:00
Sharath Ramamurthy
b95ce8fadb zebra: single vxlan device dataplace vni update changes
dplane_mac_info and dplane_neigh_info is modified to be vni aware.
dplane_rem_mac_add/del dplane_mac_init is modified to be vni aware.

During dplane context update (mac and neigh), we use the vni information
and if set, corresponding netlink attribute NDA_SRC_VNI is set and passed to the
dplane.

Signed-off-by: Sharath Ramamurthy <sramamurthy@nvidia.com>
2023-02-13 18:12:04 -05:00
Sharath Ramamurthy
784d88aa14 zebra: multiple vlan aware bridge datastructure changes and vxlan device iftype derivation from netlink
This change set introduces data structure changes required for multiple vlan aware bridge
functionality. A new structure zebra_l2_bridge_if encapsulates the vlan to access_bd
association of the bridge. A vlan_table hash_table is used to record each instance
of the vlan to access_bd of the bridge via zebra_l2_bridge_vlan structure.

vxlan iftype derivation: netlink attribute IFLA_VXLAN_COLLECT_METADATA is used
to derive the iftype of the vxlan device. If the attribute is present, then the
vxlan interface is treated as single vxlan device, otherwise it would default to
traditional vxlan device.

zebra_vxlan_check_readd_vtep, zebra_vxlan_dp_network_mac_add/del is modified to
be vni aware.

mac_fdb_read_for_bridge - is modified to be (vlan, bridge) aware

Signed-off-by: Sharath Ramamurthy <sramamurthy@nvidia.com>
2023-02-13 18:12:04 -05:00
Sharath Ramamurthy
8d30ff3b5e zebra: data structure changes for single vxlan device
This changeset introduces the data structure changes needed for
single vxlan device functionality. A new struct zebra_vxlan_vni_info
encodes the iftype and vni information for vxlan device.

The change addresses related access changes of the new data structure
fields from different files

zebra_vty is modified to take care of the vni dump information according
to the new vni data structure for vxlan devices.

Signed-off-by: Sharath Ramamurthy <sramamurthy@nvidia.com>
2023-02-13 18:12:04 -05:00
Donald Sharp
0c896167f3 doc: Add documentation for debug routemap [detail]
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-13 09:40:47 -05:00
Donald Sharp
774cd0cd6c zebra: Add access-list lookup failures to debug routemap detail
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-13 09:40:47 -05:00
Donald Sharp
ca4795dae6 zebra: Add prefix-list lookup failures to routemap debug detail
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-13 09:40:47 -05:00
Donald Sharp
1df4bd1854 ospfd: Warn operator about prefix lists not existing in routemaps
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-13 09:40:47 -05:00
Donald Sharp
46b2a036a5 ospfd: Add access-list lookup failures to routemap code
When using access-list and the access-list is not specified
let's give the operator some clue about what is going on.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-13 09:40:47 -05:00
Donald Sharp
2a3ffbb239 bgpd: Add useful information to prefix list lookup failures in routemaps
When a routemap lookup of the prefix fails, add some useful data to
the end operator about what has just gone wrong when they are
using `debug routemap detail`

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-13 09:40:47 -05:00
Donald Sharp
819547b223 bgpd: Add access list lookup failure to debug routemap detail
Let's give the operator some inkling as to why a routemap is
not working the way they thing it should be when something
goes wrong using it.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-13 09:40:47 -05:00
Donald Sharp
1c950f37b7 lib: Add debug routemap [detail]
Add the ability to turn on `debug routemap detail` for FRR.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-13 09:40:47 -05:00
Donald Sharp
5913a17a5b lib: Start partitioning of rmap_debug to allow detail level
Change the bool to a uint32_t and setup a flag to test
for and set against.  Future commits will allow
a debug detail which should be used by match/set statements
to give further context of what is going on.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-13 09:40:47 -05:00
Donald Sharp
b7d234f218 bgpd: Add warning when access list does not exist in route-map
When using `match ip[v6] next-hop <Access-list>` warn
when creating the access-list that the access list does
not yet exist and nothing can be done with it yet.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-13 09:40:47 -05:00
Donald Sharp
3fb4812966 zebra: Use string for type instead of number
Let's make it easier to debug instead of guessing

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-13 09:40:47 -05:00
Quentin Young
ed331629de vrrpd: give null when using null ifp to lookup vr
This is still causing crashes somehow.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2023-02-10 10:18:48 -05:00
Donald Sharp
8b6a9cca67 lib, zebra: Consolidate ZEBRA_TABLE_MAX_DISTANCE values
Currently `ip import-table 33` imports routes with
a distance of 15, as defined by zebra.h.  zebra_rib.c
on the other hand believes the default value for the table
is 150.  Let's make them agree with each other.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-10 09:07:47 -05:00
Donald Sharp
3d55a4ef29 lib, zebra: Use defines for distance
Use the defines for distance that are in zebra.h.  We could
easily have a cluster where we don't agree with ourselves.  So
let's convert zebra to use the defines in zebra.h

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-10 09:07:47 -05:00
Donald Sharp
8f4ea1fc5d lib, zebra: Move ZEBRA_ON_RIB_PROCESS_HOOK_CALL
The define of ZEBRA_ON_RIB_PROCESS_HOOK_CALL was in zebra.h
which exposes it to everyone, except zebra is the only daemon
to use this define.  This does not beling in zebra.h

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-10 09:07:47 -05:00
Donald Sharp
af01a87b3d lib: Remove include of asm/types.h
We do not use this, nor should we.  So let's remove it.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-10 09:07:47 -05:00
Donald Sharp
09339809a0 lib: Remove include of linux specific version.h
We apparently do not use it and looking at what this
file actually includes, we should not be including this
at all.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-10 09:07:47 -05:00
Donald Sharp
e1f5ddd0b7 bgpd: Remove extraneous include of version.h
It's not needed in these compiles.  So let's remove it.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-10 09:07:47 -05:00
Donald Sharp
eea0ea3801 pimd: Remove extraneous include of version.h
It's not needed in these compiles.  So let's remove it.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-10 09:07:46 -05:00
Donald Sharp
8974060760 pathd: Remove extraneous include of version.h
It's not needed in these compiles.  So let's remove it.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-10 09:07:46 -05:00
Donald Sharp
988638bd8d bgpd: Remove extraneous include of version.h
It's not needed in these compiles.  So let's remove it.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-10 09:07:46 -05:00
Donald Sharp
7809df2064
Merge pull request #12776 from patrasar/Issue_12755
pim6d: Modify "show ipv6 mld join json" o/p
2023-02-10 08:07:32 -05:00
Donald Sharp
0e7864be7b
Merge pull request #12757 from opensourcerouting/fix/advance_versions_for_packages
tools: Bump versions for Redhat and Debian packages in changelogs
2023-02-09 19:36:54 -05:00
Donald Sharp
bda32ba92a
Merge pull request #12762 from sri-mohan1/sri-bable
babeld: changes for code maintainability
2023-02-09 19:36:08 -05:00
Donald Sharp
787b4fe469
Merge pull request #12782 from opensourcerouting/fix/bgpd_aspath_str_crash
bgpd: Intern default-originate attributes to avoid use-after-free
2023-02-09 19:25:19 -05:00
Donald Sharp
041554dc00
Merge pull request #12781 from opensourcerouting/fix/memory_leak
lib: Release memory of YANG translation module on error
2023-02-09 19:25:05 -05:00
Donatas Abraitis
ecf82aa41e lib: Free dnode before returning if YANG translator model is already loaded
Seems just a missed one because at `goto error` we release dnode.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2023-02-09 23:14:46 +02:00
Donatas Abraitis
35b7ce08a8 tests: Check if BGP default-originate withdraw works correctly
And also do not crash when we do `clear ip bgp ...`.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2023-02-09 22:57:42 +02:00
Donatas Abraitis
e9340ff429 bgpd: Intern default-originate attributes to avoid use-after-free
When we receive a default route from a peer and we originate default route
using `neighbor default-originate`, we do not track of struct attr we use,
and when we do `no neighbor default-originate` we withdraw our generated
default route, but we announce default-route from the peer.

After we do this, we unintern aspath (which was used for default-originate),
BUT it was used also for peer's default route we received.

And here we have a use-after-free crash, because bgp_process_main_one()
reaps old paths that are marked as BGP_PATH_REMOVED with aspath->refcnt > 0,
but here it's 0.

```
0 0x55c24bbcd022 in aspath_key_make bgpd/bgp_aspath.c:2070
1 0x55c24b8f1140 in attrhash_key_make bgpd/bgp_attr.c:777
2 0x7f52322e66c9 in hash_release lib/hash.c:220
3 0x55c24b8f6017 in bgp_attr_unintern bgpd/bgp_attr.c:1271
4 0x55c24ba0acaa in bgp_path_info_free_with_caller bgpd/bgp_route.c:283
5 0x55c24ba0a7de in bgp_path_info_unlock bgpd/bgp_route.c:309
6 0x55c24ba0af6d in bgp_path_info_reap bgpd/bgp_route.c:426
7 0x55c24ba17b9a in bgp_process_main_one bgpd/bgp_route.c:3333
8 0x55c24ba18a1d in bgp_process_wq bgpd/bgp_route.c:3425
9 0x7f52323c2cd5 in work_queue_run lib/workqueue.c:282
10 0x7f52323aab92 in thread_call lib/thread.c:2006
11 0x7f5232300dc7 in frr_run lib/libfrr.c:1198
12 0x55c24b8ea792 in main bgpd/bgp_main.c:520
13 0x7f5231c3a082 in __libc_start_main ../csu/libc-start.c:308
14 0x55c24b8ef0bd in _start (/usr/lib/frr/bgpd+0x2c90bd)
    ```

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2023-02-09 22:29:25 +02:00
Donatas Abraitis
b9941b3fec lib: Release memory of YANG translation module on error
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2023-02-09 18:01:17 +02:00
Olivier Dugeon
ad1327b3d4
Merge pull request #12730 from louis-6wind/fix-ext-te-metrics
Fix for Extended TE metrics
2023-02-09 15:12:41 +01:00
mobash-rasool
3e5da1fbae
Merge pull request #12773 from donaldsharp/pbr_table_values
pbrd: fix large tableids displayed as negative
2023-02-09 16:17:54 +05:30