mirror_frr/zebra
Donald Sharp c20fa972d6 zebra: Create Singleton nhg's without weights
Currently FRR when it has two nexthop groups:
A
  nexthop 1 weight 5
  nexthop 2 weight 6
  nexthop 3 weight 7
B
  nexthop 1 weight 3
  nexthop 2 weight 4
  nexthop 3 weight 5

We end up with 5 singleton nexthops and two groups:

ID: 181818168 (sharp)
     RefCnt: 1
     Uptime: 00:04:52
     VRF: default
     Valid, Installed
     Depends: (69) (70) (71)
           via 192.168.119.1, enp13s0 (vrf default), weight 182
           via 192.168.119.2, enp13s0 (vrf default), weight 218
           via 192.168.119.3, enp13s0 (vrf default), weight 255
ID: 181818169 (sharp)
     RefCnt: 1
     Uptime: 00:02:08
     VRF: default
     Valid, Installed
     Depends: (71) (127) (128)
           via 192.168.119.1, enp13s0 (vrf default), weight 127
           via 192.168.119.2, enp13s0 (vrf default), weight 170
           via 192.168.119.3, enp13s0 (vrf default), weight 255

id 69 via 192.168.119.1 dev enp13s0 scope link proto 194
id 70 via 192.168.119.2 dev enp13s0 scope link proto 194
id 71 via 192.168.119.3 dev enp13s0 scope link proto 194
id 127 via 192.168.119.1 dev enp13s0 scope link proto 194
id 128 via 192.168.119.2 dev enp13s0 scope link proto 194
id 181818168 group 69,182/70,218/71,255 proto 194
id 181818169 group 71,255/127,127/128,170 proto 194

This is not a desirable state to be in.  If you have a
link flapping in the network and weights are changing
rapidly you end up with a large number of singleton
nexthops that are being used by the nexthop groups.
This fills up asic space and clutters the table.
Additionally singleton nexthops cannot have any weight
and the fact that you attempt to create a singleton
nexthop with different weights means nothing to the
linux kernel( or any asic dplane ).  Let's modify
the code to always create the singleton nexthops
without a weight and then just creating the
NHG's that use the singletons with the appropriate
weight.

ID: 181818168 (sharp)
     RefCnt: 1
     Uptime: 00:00:32
     VRF: default
     Valid, Installed
     Depends: (22) (24) (28)
           via 192.168.119.1, enp13s0 (vrf default), weight 182
           via 192.168.119.2, enp13s0 (vrf default), weight 218
           via 192.168.119.3, enp13s0 (vrf default), weight 255
ID: 181818169 (sharp)
     RefCnt: 1
     Uptime: 00:00:14
     VRF: default
     Valid, Installed
     Depends: (22) (24) (28)
           via 192.168.119.1, enp13s0 (vrf default), weight 153
           via 192.168.119.2, enp13s0 (vrf default), weight 204
           via 192.168.119.3, enp13s0 (vrf default), weight 255

id 22 via 192.168.119.1 dev enp13s0 scope link proto 194
id 24 via 192.168.119.2 dev enp13s0 scope link proto 194
id 28 via 192.168.119.3 dev enp13s0 scope link proto 194
id 181818168 group 22,182/24,218/28,255 proto 194
id 181818169 group 22,153/24,204/28,255 proto 194

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2024-08-22 13:22:06 -04:00
..
dpdk zebra: Update Zebra for DPDK >=22.11 API 2024-05-16 14:26:26 +03:00
.gitignore zebra: Add fpm_listener 2024-03-04 11:06:35 -05:00
connected.c zebra, tests: Connected and Local routes should have a weight of 1 2024-08-21 10:17:47 -04:00
connected.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
debug_nl.c zebra: add some more netlink RTA_ strings 2024-05-09 16:56:07 -04:00
debug.c zebra: add zebra to mgmtd oper-state 2023-12-28 17:53:40 +00:00
debug.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
dplane_fpm_nl.c zebra: Remove duplicate #include "zebra/interface.h" 2024-07-24 23:41:29 +02:00
fpm_listener.c Merge pull request #15082 from louis-6wind/fix-iff-lower-up 2024-05-29 00:01:20 +03:00
ge_netlink.c zebra: Fetch actual SRv6 encap src addr on startup 2023-12-14 14:58:35 +01:00
ge_netlink.h zebra: Fetch actual SRv6 encap src addr on startup 2023-12-14 14:58:35 +01:00
if_ioctl.c zebra: fix loading kernel routs without netlink 2024-08-16 10:42:33 +02:00
if_netlink.c zebra: clean up one comment 2024-05-02 16:36:01 +08:00
if_netlink.h zebra: Move protodown_r_bit to a better spot 2023-07-05 11:49:36 -04:00
if_socket.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
if_sysctl.c zebra: fix loading kernel routs without netlink 2024-08-16 10:42:33 +02:00
interface.c zebra: Remove duplicate #include "zebra/interface.h" 2024-07-24 23:50:02 +02:00
interface.h zebra: Remove ifp_nhg_XXX functions completely 2024-02-08 11:56:40 -05:00
ioctl.c *: Remove sys/ioctl.h from zebra.h 2024-01-04 14:42:17 -05:00
ioctl.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
ipforward_proc.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
ipforward_sysctl.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
ipforward.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
irdp_interface.c zebra: convert interface configuration output to NB 2024-01-28 23:28:40 +02:00
irdp_main.c *: convert struct interface->connected to DLIST 2023-11-22 23:00:30 +01:00
irdp_packet.c *: Convert event.h to frrevent.h 2023-03-24 08:32:17 -04:00
irdp.h *: Rename struct thread to struct event 2023-03-24 08:32:17 -04:00
kernel_netlink.c zebra: Ensure proper decoding of netlink message 2024-04-30 14:46:08 -04:00
kernel_netlink.h zebra: Add Generic Netlink socket 2023-12-14 14:56:44 +01:00
kernel_socket.c zebra: fix loading kernel routs without netlink 2024-08-16 10:42:33 +02:00
kernel_socket.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
label_manager.c zebra: Cleanup linked list on shutdown in label manager 2023-12-11 15:26:20 -05:00
label_manager.h zebra: Cleanup linked list on shutdown in label manager 2023-12-11 15:26:20 -05:00
main.c *: Add and use option for graceful (re)start 2024-07-01 13:02:52 -07:00
Makefile build: convert zebra/ to non-recursive build 2017-07-31 23:03:30 +02:00
netconf_netlink.c *: zebra.h should not have fcntl.h 2024-01-09 12:50:40 -05:00
netconf_netlink.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
redistribute.c zebra: Move nhg reinstallation into if_up proper 2024-02-08 12:22:09 -05:00
redistribute.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
rib.h *: Add and use option for graceful (re)start 2024-07-01 13:02:52 -07:00
router-id.c zebra: convert to mgmtd 2024-01-28 23:28:40 +02:00
router-id.h zebra: convert vrf configuration output to NB 2024-01-28 23:28:40 +02:00
rt_netlink.c zebra, tests: Connected and Local routes should have a weight of 1 2024-08-21 10:17:47 -04:00
rt_netlink.h zebra: support route replace semantics in FPM 2023-09-04 15:38:03 -03:00
rt_socket.c lib: remove net/route.h it is not used 2024-01-09 12:50:40 -05:00
rt.h *: Introduce Local Host Routes to FRR 2023-11-01 17:13:06 -04:00
rtadv.c *: Fix spelling errors found 2024-08-15 09:19:37 -04:00
rtadv.h zebra: convert interface ipv6 nd dnssl command to NB 2024-01-28 23:28:40 +02:00
rtread_netlink.c Merge pull request #12780 from opensourcerouting/spdx-license-id 2023-02-17 09:43:05 -05:00
rtread_sysctl.c lib: remove net/route.h it is not used 2024-01-09 12:50:40 -05:00
rule_netlink.c *: Remove netlink headers from lib/zebra.h 2023-11-07 06:46:19 -05:00
rule_netlink.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
rule_socket.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
sample_plugin.c *: Convert struct event_master to struct event_loop 2023-03-24 08:32:17 -04:00
subdir.am zebra: Add show fpm status [json] command 2024-03-04 11:06:35 -05:00
table_manager.c lib, mgmtd, zebra: cleanup of zebra conversion to mgmtd 2024-01-28 23:46:38 +02:00
table_manager.h zebra: convert table range command to NB 2024-01-28 23:28:40 +02:00
tc_netlink.c *: Remove netlink headers from lib/zebra.h 2023-11-07 06:46:19 -05:00
tc_netlink.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
tc_socket.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
testrib.conf
zapi_msg.c zebra: Do not forget to free opaque data for route entry 2024-08-13 18:00:30 +03:00
zapi_msg.h zebra: Do not forget to free opaque data for route entry 2024-08-13 18:00:30 +03:00
zebra_affinitymap.c zebra: rework affinity-map update hook 2024-01-19 03:47:11 +02:00
zebra_affinitymap.h lib,zebra: add affinity-map configuration hooks 2023-02-10 13:52:01 +01:00
zebra_cli.c lib, zebra: fix exit commands 2024-04-16 22:18:01 +03:00
zebra_cli.h zebra: convert to mgmtd 2024-01-28 23:28:40 +02:00
zebra_dplane.c zebra: add nexthop counter to 'show zebra dplane' command 2024-07-17 11:58:22 +02:00
zebra_dplane.h zebra: Use built in data structure counter 2024-06-13 15:30:00 -04:00
zebra_errors.c zebra: Add functions to alloc/release SRv6 SIDs 2024-06-13 14:54:16 +02:00
zebra_errors.h zebra: Add functions to alloc/release SRv6 SIDs 2024-06-13 14:54:16 +02:00
zebra_evpn_mac.c zebra: Use more appropriately sized stream packets for evpn 2024-04-09 10:08:03 -04:00
zebra_evpn_mac.h *: Rename struct thread to struct event 2023-03-24 08:32:17 -04:00
zebra_evpn_mh.c bgpd, lib, zebra: Extend ES_VTEP_LIST_STR_SZ to support IPv6 addresses 2024-05-31 10:27:22 -04:00
zebra_evpn_mh.h zebra: bridge flap handle vlan membership update 2024-05-03 10:52:33 -07:00
zebra_evpn_neigh.c *: Remove netlink headers from lib/zebra.h 2023-11-07 06:46:19 -05:00
zebra_evpn_neigh.h *: Convert THREAD_XXX macros to EVENT_XXX macros 2023-03-24 08:32:17 -04:00
zebra_evpn_vxlan.h Merge pull request #12780 from opensourcerouting/spdx-license-id 2023-02-17 09:43:05 -05:00
zebra_evpn.c zebra: Use more appropriately sized stream packets for evpn 2024-04-09 10:08:03 -04:00
zebra_evpn.h Merge pull request #12780 from opensourcerouting/spdx-license-id 2023-02-17 09:43:05 -05:00
zebra_fpm_dt.c *: Remove netlink headers from lib/zebra.h 2023-11-07 06:46:19 -05:00
zebra_fpm_netlink.c zebra: changes for code maintainability 2024-03-12 12:00:12 +05:30
zebra_fpm_private.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
zebra_fpm_protobuf.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
zebra_fpm.c *: Remove netlink headers from lib/zebra.h 2023-11-07 06:46:19 -05:00
zebra_gr.c zebra: Do not assign time and then never use it 2024-08-18 16:18:54 -04:00
zebra_l2_bridge_if.c *: Add a hash_clean_and_free() function 2023-03-21 08:54:21 -04:00
zebra_l2_bridge_if.h zebra: multiple vlan aware bridge data structure and related changes 2023-02-13 18:12:04 -05:00
zebra_l2.c zebra: bridge flap handle vlan membership update 2024-05-03 10:52:33 -07:00
zebra_l2.h zebra: Use zebra dplane for RTM link and addr 2023-07-05 13:03:14 -04:00
zebra_mlag_private.c *: Convert event.h to frrevent.h 2023-03-24 08:32:17 -04:00
zebra_mlag_vty.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
zebra_mlag_vty.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
zebra_mlag.c *: Let's use the native IFNAMSIZ instead of INTERFACE_NAMSIZ 2023-11-21 08:08:29 -05:00
zebra_mlag.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
zebra_mpls_netlink.c *: remove sys/stat.h from zebra.h 2024-01-09 12:39:23 -05:00
zebra_mpls_null.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
zebra_mpls_openbsd.c zebra: changes for code maintainability 2024-03-21 14:56:24 +05:30
zebra_mpls_vty.c zebra: fix mpls command 2024-05-16 23:30:41 +08:00
zebra_mpls.c zebra: fix mpls command 2024-05-16 23:30:41 +08:00
zebra_mpls.h zebra: fix wrong check for mpls label 2024-04-06 09:01:39 +08:00
zebra_mroute.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
zebra_mroute.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
zebra_nb_config.c zebra: fix encoded DNSSL length 2024-04-15 23:31:26 +03:00
zebra_nb_rpcs.c zebra: clear evpn dup-addr return error-msg when there is no vni 2024-06-20 15:05:37 -07:00
zebra_nb_state.c yang: add missing zif-gre zebra interface type 2024-04-20 08:04:00 -04:00
zebra_nb.c Merge pull request #15397 from idryzhov/zebra-oper 2024-03-05 11:41:35 -05:00
zebra_nb.h Merge pull request #15397 from idryzhov/zebra-oper 2024-03-05 11:41:35 -05:00
zebra_neigh.c zebra: changes for code maintainability 2024-03-26 10:21:45 +05:30
zebra_neigh.h zebra: Remove static ARP entries on interface down events 2023-11-06 15:00:59 +02:00
zebra_netns_id.c zebra: changes for code maintainability 2024-03-26 10:21:45 +05:30
zebra_netns_id.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
zebra_netns_notify.c zebra: fix compilation with GCC14 2024-06-04 13:35:57 +03:00
zebra_netns_notify.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
zebra_nhg_private.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
zebra_nhg.c zebra: Create Singleton nhg's without weights 2024-08-22 13:22:06 -04:00
zebra_nhg.h zebra: When reinstalling a NHG, set REINSTALL flag 2024-02-08 12:32:26 -05:00
zebra_ns.c zebra: convert vrf configuration output to NB 2024-01-28 23:28:40 +02:00
zebra_ns.h zebra: convert vrf configuration output to NB 2024-01-28 23:28:40 +02:00
zebra_opaque.c zebra: clean up coverity warning in opaque api 2023-06-26 13:19:23 -04:00
zebra_opaque.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
zebra_pbr.c *: Let's use the native IFNAMSIZ instead of INTERFACE_NAMSIZ 2023-11-21 08:08:29 -05:00
zebra_pbr.h *: Let's use the native IFNAMSIZ instead of INTERFACE_NAMSIZ 2023-11-21 08:08:29 -05:00
zebra_ptm_redistribute.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
zebra_ptm_redistribute.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
zebra_ptm.c zebra: convert to mgmtd 2024-01-28 23:28:40 +02:00
zebra_ptm.h zebra: convert to mgmtd 2024-01-28 23:28:40 +02:00
zebra_pw.c zebra: Properly unregister hook on shutdown 2023-12-11 15:22:07 -05:00
zebra_pw.h zebra: Properly unregister hook on shutdown 2023-12-11 15:22:07 -05:00
zebra_rib.c zebra: Do not forget to free opaque data for route entry 2024-08-13 18:00:30 +03:00
zebra_rnh.c zebra: Do not forget to free opaque data for route entry 2024-08-13 18:00:30 +03:00
zebra_rnh.h zebra: include route source set by route-map in show output 2024-05-14 10:28:17 -04:00
zebra_routemap_nb_config.c *: Add missing SPDX-License-Identifier for some .c/.h files 2024-03-21 16:46:58 +02:00
zebra_routemap_nb.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
zebra_routemap_nb.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
zebra_routemap.c bgpd: Show which AFI is affected when prefix-list is not found 2024-07-31 13:20:59 +03:00
zebra_routemap.h zebra: convert vrf configuration output to NB 2024-01-28 23:28:40 +02:00
zebra_router.c zebra: Ensure we cannot send invalid range to kernel 2024-08-21 10:15:55 -04:00
zebra_router.h *: Add and use option for graceful (re)start 2024-07-01 13:02:52 -07:00
zebra_script.c zebra: Add code to set SRv6 encap source addr in dplane 2023-12-14 14:56:44 +01:00
zebra_script.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
zebra_snmp.c *: Introduce Local Host Routes to FRR 2023-11-01 17:13:06 -04:00
zebra_srte.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
zebra_srte.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
zebra_srv6_vty.c zebra: Fix compilation warning 2024-08-18 13:03:04 +02:00
zebra_srv6_vty.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
zebra_srv6.c zebra: Remove duplicate #include <stdio.h> 2024-07-24 23:39:34 +02:00
zebra_srv6.h zebra: Alloc/Release SIDs to daemons upon request 2024-06-13 14:54:16 +02:00
zebra_tc.c zebra: Set Free Functions for Traffic Control Hash Tables 2023-11-29 16:33:54 +04:00
zebra_tc.h zebra: Set Free Functions for Traffic Control Hash Tables 2023-11-29 16:33:54 +04:00
zebra_trace.c *: Add missing SPDX-License-Identifier for some .c/.h files 2024-03-21 16:46:58 +02:00
zebra_trace.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
zebra_vrf.c zebra: convert to mgmtd 2024-01-28 23:28:40 +02:00
zebra_vrf.h zebra: convert to mgmtd 2024-01-28 23:28:40 +02:00
zebra_vty.c zebra: Properly note that a nhg's nexthop has gone down 2024-07-03 09:34:55 -04:00
zebra_vxlan_if.c zebra: changes for code maintainability 2024-07-15 19:13:47 +05:30
zebra_vxlan_if.h zebra: Fix for mcast-group update and delete per vni for svd 2023-02-13 18:12:05 -05:00
zebra_vxlan_private.h Merge pull request #12780 from opensourcerouting/spdx-license-id 2023-02-17 09:43:05 -05:00
zebra_vxlan.c zebra: evpn: not coerce VTEP IP to IPv4 in nh_list 2024-07-08 10:32:03 +02:00
zebra_vxlan.h zebra: fix vni NB conversion 2024-01-28 23:28:40 +02:00
zserv.c *: Add and use option for graceful (re)start 2024-07-01 13:02:52 -07:00
zserv.h *: Add and use option for graceful (re)start 2024-07-01 13:02:52 -07:00