zebra: Move protodown_r_bit to a better spot

Since we are moving some code handling out of the dataplane
and into zebra proper, lets move the protodown r bit as well.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
This commit is contained in:
Donald Sharp 2023-04-27 07:37:58 -04:00
parent 6a3ae11c9b
commit c3c9683f99
5 changed files with 35 additions and 49 deletions

View file

@ -63,7 +63,6 @@
#include "zebra/zebra_trace.h"
extern struct zebra_privs_t zserv_privs;
uint8_t frr_protodown_r_bit = FRR_PROTODOWN_REASON_DEFAULT_BIT;
/* Note: on netlink systems, there should be a 1-to-1 mapping between interface
names and ifindex values. */
@ -920,9 +919,7 @@ static int netlink_bridge_interface(struct nlmsghdr *h, int len, ns_id_t ns_id,
static bool is_if_protodown_reason_only_frr(uint32_t rc_bitfield)
{
/* This shouldn't be possible */
assert(frr_protodown_r_bit < 32);
return (rc_bitfield == (((uint32_t)1) << frr_protodown_r_bit));
return (rc_bitfield == (((uint32_t)1) << if_netlink_get_frr_protodown_r_bit()));
}
/*
@ -2393,9 +2390,10 @@ ssize_t netlink_intf_msg_encode(uint16_t cmd,
return -1;
nl_attr_put32(&req->n, buflen, IFLA_PROTO_DOWN_REASON_MASK,
(1 << frr_protodown_r_bit));
(1 << if_netlink_get_frr_protodown_r_bit()));
nl_attr_put32(&req->n, buflen, IFLA_PROTO_DOWN_REASON_VALUE,
((int)pd_reason_val) << frr_protodown_r_bit);
((int)pd_reason_val)
<< if_netlink_get_frr_protodown_r_bit());
nl_attr_nest_end(&req->n, nest_protodown_reason);
@ -2420,37 +2418,6 @@ void interface_list(struct zebra_ns *zns)
interface_addr_lookup_netlink(zns);
}
void if_netlink_set_frr_protodown_r_bit(uint8_t bit)
{
if (IS_ZEBRA_DEBUG_KERNEL)
zlog_debug(
"Protodown reason bit index changed: bit-index %u -> bit-index %u",
frr_protodown_r_bit, bit);
frr_protodown_r_bit = bit;
}
void if_netlink_unset_frr_protodown_r_bit(void)
{
if (IS_ZEBRA_DEBUG_KERNEL)
zlog_debug(
"Protodown reason bit index changed: bit-index %u -> bit-index %u",
frr_protodown_r_bit, FRR_PROTODOWN_REASON_DEFAULT_BIT);
frr_protodown_r_bit = FRR_PROTODOWN_REASON_DEFAULT_BIT;
}
bool if_netlink_frr_protodown_r_bit_is_set(void)
{
return (frr_protodown_r_bit != FRR_PROTODOWN_REASON_DEFAULT_BIT);
}
uint8_t if_netlink_get_frr_protodown_r_bit(void)
{
return frr_protodown_r_bit;
}
/**
* netlink_request_tunneldump() - Request all tunnels from the linux kernel
*

View file

@ -42,17 +42,6 @@ extern int netlink_tunneldump_read(struct zebra_ns *zns);
extern enum netlink_msg_status
netlink_put_intf_update_msg(struct nl_batch *bth, struct zebra_dplane_ctx *ctx);
#define FRR_PROTODOWN_REASON_DEFAULT_BIT 7
/* Protodown bit setter/getter
*
* Allow users to change the bit if it conflicts with another
* on their system.
*/
extern void if_netlink_set_frr_protodown_r_bit(uint8_t bit);
extern void if_netlink_unset_frr_protodown_r_bit(void);
extern bool if_netlink_frr_protodown_r_bit_is_set(void);
extern uint8_t if_netlink_get_frr_protodown_r_bit(void);
#ifdef __cplusplus
}
#endif

View file

@ -259,6 +259,8 @@ void zebra_router_init(bool asic_offload, bool notify_on_ack)
{
zrouter.sequence_num = 0;
zrouter.protodown_r_bit = FRR_PROTODOWN_REASON_DEFAULT_BIT;
zrouter.allow_delete = false;
zrouter.packets_to_process = ZEBRA_ZAPI_PACKETS_TO_PROCESS;

View file

@ -228,6 +228,8 @@ struct zebra_router {
/* Should we allow non FRR processes to delete our routes */
bool allow_delete;
uint8_t protodown_r_bit;
};
#define GRACEFUL_RESTART_TIME 60
@ -286,6 +288,32 @@ static inline bool zebra_router_in_shutdown(void)
return atomic_load_explicit(&zrouter.in_shutdown, memory_order_relaxed);
}
#define FRR_PROTODOWN_REASON_DEFAULT_BIT 7
/* Protodown bit setter/getter
*
* Allow users to change the bit if it conflicts with another
* on their system.
*/
static inline void if_netlink_set_frr_protodown_r_bit(uint8_t bit)
{
zrouter.protodown_r_bit = bit;
}
static inline void if_netlink_unset_frr_protodown_r_bit(void)
{
zrouter.protodown_r_bit = FRR_PROTODOWN_REASON_DEFAULT_BIT;
}
static inline bool if_netlink_frr_protodown_r_bit_is_set(void)
{
return (zrouter.protodown_r_bit != FRR_PROTODOWN_REASON_DEFAULT_BIT);
}
static inline uint8_t if_netlink_get_frr_protodown_r_bit(void)
{
return zrouter.protodown_r_bit;
}
/* zebra_northbound.c */
extern const struct frr_yang_module_info frr_zebra_info;

View file

@ -377,7 +377,7 @@ struct zebra_vrf *zebra_vrf_alloc(struct vrf *vrf)
}
/*
Pending: create an efficient table_id (in a tree/hash) based lookup)
* Pending: create an efficient table_id (in a tree/hash) based lookup)
*/
vrf_id_t zebra_vrf_lookup_by_table(uint32_t table_id, ns_id_t ns_id)
{