From c3c9683f99c004ea88f519e6dc023c79ebb4f4d9 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 27 Apr 2023 07:37:58 -0400 Subject: [PATCH] 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 --- zebra/if_netlink.c | 41 ++++------------------------------------- zebra/if_netlink.h | 11 ----------- zebra/zebra_router.c | 2 ++ zebra/zebra_router.h | 28 ++++++++++++++++++++++++++++ zebra/zebra_vrf.c | 2 +- 5 files changed, 35 insertions(+), 49 deletions(-) diff --git a/zebra/if_netlink.c b/zebra/if_netlink.c index cea47b4c30..6178b8e16d 100644 --- a/zebra/if_netlink.c +++ b/zebra/if_netlink.c @@ -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 * diff --git a/zebra/if_netlink.h b/zebra/if_netlink.h index ede6224188..9b31906a17 100644 --- a/zebra/if_netlink.h +++ b/zebra/if_netlink.h @@ -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 diff --git a/zebra/zebra_router.c b/zebra/zebra_router.c index a477287913..1b3e31ee42 100644 --- a/zebra/zebra_router.c +++ b/zebra/zebra_router.c @@ -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; diff --git a/zebra/zebra_router.h b/zebra/zebra_router.h index d81c7df589..a7f0f135f9 100644 --- a/zebra/zebra_router.h +++ b/zebra/zebra_router.h @@ -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; diff --git a/zebra/zebra_vrf.c b/zebra/zebra_vrf.c index 74b9d106cd..b246d445da 100644 --- a/zebra/zebra_vrf.c +++ b/zebra/zebra_vrf.c @@ -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) {