forked from Mirror/frr
zebra: NHG ID bounds macros
Determine the NHG ID spacing and lower bound with ZEBRA_ROUTE_MAX in macros. Directly set the upperbound to be the lower 28bits of the uint32_t ID space (the top 4 are reserved for l2-NHGs). Round that number down a bit to make it more even. Convert all former lower_bound calls to just use the macro. Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
This commit is contained in:
parent
16b20ad062
commit
54c89c9377
|
@ -4081,13 +4081,5 @@ uint32_t zclient_get_nhg_start(uint32_t proto)
|
||||||
{
|
{
|
||||||
assert(proto < ZEBRA_ROUTE_MAX);
|
assert(proto < ZEBRA_ROUTE_MAX);
|
||||||
|
|
||||||
return ZEBRA_NHG_SPACING * proto;
|
return ZEBRA_NHG_PROTO_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);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -686,13 +686,20 @@ struct zclient_options {
|
||||||
extern struct zclient_options zclient_options_default;
|
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
|
* 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
|
* and we'll separate them, we'll figure out where to start based upon
|
||||||
* to start based upon the route_types.h
|
* 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_start(uint32_t proto);
|
||||||
extern uint32_t zclient_get_nhg_lower_bound(void);
|
|
||||||
|
|
||||||
extern struct zclient *zclient_new(struct thread_master *m,
|
extern struct zclient *zclient_new(struct thread_master *m,
|
||||||
struct zclient_options *opt);
|
struct zclient_options *opt);
|
||||||
|
|
|
@ -144,7 +144,7 @@ static bool is_proto_nhg(uint32_t id, int type)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (id >= zclient_get_nhg_lower_bound())
|
if (id >= ZEBRA_NHG_PROTO_LOWER)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -676,7 +676,7 @@ static bool zebra_nhe_find(struct nhg_hash_entry **nhe, /* return value */
|
||||||
if (lookup->id == 0)
|
if (lookup->id == 0)
|
||||||
lookup->id = ++id_counter;
|
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.
|
* 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))
|
if (CHECK_FLAG(nh->flags, NEXTHOP_FLAG_ACTIVE))
|
||||||
SET_FLAG(newnhe->flags, NEXTHOP_GROUP_VALID);
|
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)) {
|
if (CHECK_FLAG(nh->flags, NEXTHOP_FLAG_RECURSIVE)) {
|
||||||
/* Single recursive nexthop */
|
/* Single recursive nexthop */
|
||||||
handle_recursive_depend(&newnhe->nhg_depends,
|
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",
|
zlog_debug("%s: nh %pNHv, id %u, count %d",
|
||||||
__func__, nh, id, (int)count);
|
__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
|
/* Increase our counter so we don't try to create
|
||||||
* an ID that already exists
|
* 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;
|
struct nhg_hash_entry *curr_nhe;
|
||||||
uint32_t curr_active = 0, backup_active = 0;
|
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);
|
return proto_nhg_nexthop_active_update(&re->nhe->nhg);
|
||||||
|
|
||||||
afi_t rt_afi = family2afi(rn->p.family);
|
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)
|
if (CHECK_FLAG(nhe->flags, NEXTHOP_GROUP_VALID)
|
||||||
&& (!CHECK_FLAG(nhe->flags, NEXTHOP_GROUP_INSTALLED)
|
&& (!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)) {
|
&& !CHECK_FLAG(nhe->flags, NEXTHOP_GROUP_QUEUED)) {
|
||||||
/* Change its type to us since we are installing it */
|
/* Change its type to us since we are installing it */
|
||||||
if (!ZEBRA_NHG_CREATED(nhe))
|
if (!ZEBRA_NHG_CREATED(nhe))
|
||||||
|
|
Loading…
Reference in a new issue