summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss White <russ@riw.us>2023-05-23 08:25:46 -0400
committerGitHub <noreply@github.com>2023-05-23 08:25:46 -0400
commit6a88c7a87e01dab8cc56e669aa04447d6ac954f2 (patch)
tree4a5d7874ed42235c55b7d32680bade83edfa555b
parent7b7da41def4524670ff3ef5041b1eb4084d133bb (diff)
parent1b839d486a8a392f9122bb5483b26540603e7550 (diff)
Merge pull request #13548 from opensourcerouting/fix/use_min_value_of_cli_zebra_cap_ecmp
ripd: Make sure we do not overuse higher values for ECMP count
-rw-r--r--ripd/rip_main.c2
-rw-r--r--ripd/rip_nb_config.c3
-rw-r--r--ripd/rip_zebra.c1
-rw-r--r--ripd/ripd.h2
4 files changed, 6 insertions, 2 deletions
diff --git a/ripd/rip_main.c b/ripd/rip_main.c
index 0e26662cdb..ac358ebbaf 100644
--- a/ripd/rip_main.c
+++ b/ripd/rip_main.c
@@ -34,6 +34,8 @@ static struct option longopts[] = {{0}};
/* ripd privileges */
zebra_capabilities_t _caps_p[] = {ZCAP_NET_RAW, ZCAP_BIND, ZCAP_SYS_ADMIN};
+uint32_t zebra_ecmp_count = MULTIPATH_NUM;
+
struct zebra_privs_t ripd_privs = {
#if defined(FRR_USER)
.user = FRR_USER,
diff --git a/ripd/rip_nb_config.c b/ripd/rip_nb_config.c
index 1117ec9ff7..8d3b670596 100644
--- a/ripd/rip_nb_config.c
+++ b/ripd/rip_nb_config.c
@@ -99,7 +99,8 @@ int ripd_instance_allow_ecmp_modify(struct nb_cb_modify_args *args)
return NB_OK;
rip = nb_running_get_entry(args->dnode, NULL, true);
- rip->ecmp = yang_dnode_get_uint8(args->dnode, NULL);
+ rip->ecmp =
+ MIN(yang_dnode_get_uint8(args->dnode, NULL), zebra_ecmp_count);
if (!rip->ecmp) {
rip_ecmp_disable(rip);
return NB_OK;
diff --git a/ripd/rip_zebra.c b/ripd/rip_zebra.c
index 834c7d2d65..5bf51c2f15 100644
--- a/ripd/rip_zebra.c
+++ b/ripd/rip_zebra.c
@@ -20,7 +20,6 @@
/* All information about zebra. */
struct zclient *zclient = NULL;
-uint32_t zebra_ecmp_count = MULTIPATH_NUM;
/* Send ECMP routes to zebra. */
static void rip_zebra_ipv4_send(struct rip *rip, struct route_node *rp,
diff --git a/ripd/ripd.h b/ripd/ripd.h
index 2db1e5a6b0..ac4a51f586 100644
--- a/ripd/ripd.h
+++ b/ripd/ripd.h
@@ -539,4 +539,6 @@ DECLARE_HOOK(rip_ifaddr_del, (struct connected * ifc), (ifc));
extern void rip_ecmp_change(struct rip *rip);
+extern uint32_t zebra_ecmp_count;
+
#endif /* _ZEBRA_RIP_H */