From 6c5ffa88963d43204c944f9c798a315d1ee5f104 Mon Sep 17 00:00:00 2001 From: Donatas Abraitis Date: Wed, 17 May 2023 22:17:02 +0300 Subject: [PATCH] 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 --- ripngd/ripng_main.c | 2 ++ ripngd/ripng_nb_config.c | 3 ++- ripngd/ripng_zebra.c | 1 - ripngd/ripngd.h | 2 ++ 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 */