diff --git a/lib/zclient.c b/lib/zclient.c index deb5f519bd..b73dc688fb 100644 --- a/lib/zclient.c +++ b/lib/zclient.c @@ -4081,13 +4081,5 @@ uint32_t zclient_get_nhg_start(uint32_t proto) { assert(proto < ZEBRA_ROUTE_MAX); - return ZEBRA_NHG_SPACING * proto; -} - -/* - * Where do routing protocols IDs start overall (first ID after zebra) - */ -uint32_t zclient_get_nhg_lower_bound() -{ - return ZEBRA_NHG_SPACING * (ZEBRA_ROUTE_CONNECT + 1); + return ZEBRA_NHG_PROTO_SPACING * proto; } diff --git a/lib/zclient.h b/lib/zclient.h index db5e1ce5b9..3ac9ca9456 100644 --- a/lib/zclient.h +++ b/lib/zclient.h @@ -686,13 +686,20 @@ struct zclient_options { extern struct zclient_options zclient_options_default; /* + * We reserve the top 4 bits for l2-NHG, everything else + * is for zebra/proto l3-NHG. + * * Each client is going to get it's own nexthop group space - * and we'll separate them by 50 million, we'll figure out where - * to start based upon the route_types.h + * and we'll separate them, we'll figure out where to start based upon + * the route_types.h */ -#define ZEBRA_NHG_SPACING 50000000 +#define ZEBRA_NHG_PROTO_UPPER \ + ((uint32_t)250000000) /* Bottom 28 bits then rounded down */ +#define ZEBRA_NHG_PROTO_SPACING (ZEBRA_NHG_PROTO_UPPER / ZEBRA_ROUTE_MAX) +#define ZEBRA_NHG_PROTO_LOWER \ + (ZEBRA_NHG_PROTO_SPACING * (ZEBRA_ROUTE_CONNECT + 1)) + extern uint32_t zclient_get_nhg_start(uint32_t proto); -extern uint32_t zclient_get_nhg_lower_bound(void); extern struct zclient *zclient_new(struct thread_master *m, struct zclient_options *opt); diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c index 07135b7fc8..34841aa4a5 100644 --- a/zebra/rt_netlink.c +++ b/zebra/rt_netlink.c @@ -144,7 +144,7 @@ static bool is_proto_nhg(uint32_t id, int type) return false; } - if (id >= zclient_get_nhg_lower_bound()) + if (id >= ZEBRA_NHG_PROTO_LOWER) return true; return false; diff --git a/zebra/zebra_nhg.c b/zebra/zebra_nhg.c index 74551e31c4..c078b25ab1 100644 --- a/zebra/zebra_nhg.c +++ b/zebra/zebra_nhg.c @@ -676,7 +676,7 @@ static bool zebra_nhe_find(struct nhg_hash_entry **nhe, /* return value */ if (lookup->id == 0) lookup->id = ++id_counter; - if (lookup->id < zclient_get_nhg_lower_bound()) { + if (lookup->id < ZEBRA_NHG_PROTO_LOWER) { /* * This is a zebra hashed/owned NHG. * @@ -730,7 +730,7 @@ static bool zebra_nhe_find(struct nhg_hash_entry **nhe, /* return value */ if (CHECK_FLAG(nh->flags, NEXTHOP_FLAG_ACTIVE)) SET_FLAG(newnhe->flags, NEXTHOP_GROUP_VALID); - if (nh->next == NULL && newnhe->id < zclient_get_nhg_lower_bound()) { + if (nh->next == NULL && newnhe->id < ZEBRA_NHG_PROTO_LOWER) { if (CHECK_FLAG(nh->flags, NEXTHOP_FLAG_RECURSIVE)) { /* Single recursive nexthop */ handle_recursive_depend(&newnhe->nhg_depends, @@ -1246,7 +1246,7 @@ int zebra_nhg_kernel_find(uint32_t id, struct nexthop *nh, struct nh_grp *grp, zlog_debug("%s: nh %pNHv, id %u, count %d", __func__, nh, id, (int)count); - if (id > id_counter && id < zclient_get_nhg_lower_bound()) + if (id > id_counter && id < ZEBRA_NHG_PROTO_LOWER) /* Increase our counter so we don't try to create * an ID that already exists */ @@ -2319,7 +2319,7 @@ int nexthop_active_update(struct route_node *rn, struct route_entry *re) struct nhg_hash_entry *curr_nhe; uint32_t curr_active = 0, backup_active = 0; - if (re->nhe->id >= zclient_get_nhg_lower_bound()) + if (re->nhe->id >= ZEBRA_NHG_PROTO_LOWER) return proto_nhg_nexthop_active_update(&re->nhe->nhg); afi_t rt_afi = family2afi(rn->p.family); @@ -2525,7 +2525,7 @@ void zebra_nhg_install_kernel(struct nhg_hash_entry *nhe) if (CHECK_FLAG(nhe->flags, NEXTHOP_GROUP_VALID) && (!CHECK_FLAG(nhe->flags, NEXTHOP_GROUP_INSTALLED) - || nhe->id >= zclient_get_nhg_lower_bound()) + || nhe->id >= ZEBRA_NHG_PROTO_LOWER) && !CHECK_FLAG(nhe->flags, NEXTHOP_GROUP_QUEUED)) { /* Change its type to us since we are installing it */ if (!ZEBRA_NHG_CREATED(nhe))