summaryrefslogtreecommitdiff
path: root/ripngd
diff options
context:
space:
mode:
authorDonatas Abraitis <donatas@opensourcerouting.org>2023-05-17 22:17:02 +0300
committerDonatas Abraitis <donatas@opensourcerouting.org>2023-05-23 09:29:02 +0300
commit6c5ffa88963d43204c944f9c798a315d1ee5f104 (patch)
tree0c1155df591c66c4c7f5598aaeb64c78fe698002 /ripngd
parent993b236b2c1a2348ebb6a562956ff82a9e39ae25 (diff)
ripngd: Make sure we do not overuse higher values for ECMP count
Use a minimum value of a CLI version and a value of Zebra capabilities. Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
Diffstat (limited to 'ripngd')
-rw-r--r--ripngd/ripng_main.c2
-rw-r--r--ripngd/ripng_nb_config.c3
-rw-r--r--ripngd/ripng_zebra.c1
-rw-r--r--ripngd/ripngd.h2
4 files changed, 6 insertions, 2 deletions
diff --git a/ripngd/ripng_main.c b/ripngd/ripng_main.c
index 1d392efdde..9933dae5cd 100644
--- a/ripngd/ripng_main.c
+++ b/ripngd/ripng_main.c
@@ -32,6 +32,8 @@ struct option longopts[] = {{0}};
/* ripngd 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 ripngd_privs = {
#if defined(FRR_USER)
.user = FRR_USER,
diff --git a/ripngd/ripng_nb_config.c b/ripngd/ripng_nb_config.c
index de72319354..0b1bd68eca 100644
--- a/ripngd/ripng_nb_config.c
+++ b/ripngd/ripng_nb_config.c
@@ -129,7 +129,8 @@ int ripngd_instance_allow_ecmp_modify(struct nb_cb_modify_args *args)
return NB_OK;
ripng = nb_running_get_entry(args->dnode, NULL, true);
- ripng->ecmp = yang_dnode_get_uint8(args->dnode, NULL);
+ ripng->ecmp =
+ MIN(yang_dnode_get_uint8(args->dnode, NULL), zebra_ecmp_count);
if (!ripng->ecmp) {
ripng_ecmp_disable(ripng);
return NB_OK;
diff --git a/ripngd/ripng_zebra.c b/ripngd/ripng_zebra.c
index 6122c4255c..49b8a197ad 100644
--- a/ripngd/ripng_zebra.c
+++ b/ripngd/ripng_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 ripng_zebra_ipv6_send(struct ripng *ripng, struct agg_node *rp,
diff --git a/ripngd/ripngd.h b/ripngd/ripngd.h
index 3d13097dd6..c7468b6317 100644
--- a/ripngd/ripngd.h
+++ b/ripngd/ripngd.h
@@ -435,4 +435,6 @@ extern void ripng_vrf_init(void);
extern void ripng_vrf_terminate(void);
extern void ripng_cli_init(void);
+extern uint32_t zebra_ecmp_count;
+
#endif /* _ZEBRA_RIPNG_RIPNGD_H */