diff options
author | Stephen Worley <sworley@nvidia.com> | 2022-01-19 20:36:10 +0100 |
---|---|---|
committer | Stephen Worley <sworley@nvidia.com> | 2022-03-09 23:52:44 +0100 |
commit | c40e1b1cfbbf8db7b03f9faa51afbea8cda722c3 (patch) | |
tree | e0bc54da822f99c55cca5723d5203920a751f6f5 /zebra | |
parent | sharpd: add support for setting protodown (diff) | |
download | frr-c40e1b1cfbbf8db7b03f9faa51afbea8cda722c3.tar.xz frr-c40e1b1cfbbf8db7b03f9faa51afbea8cda722c3.zip |
zebra: add command for setting protodown bit
Add command for use to set protodown via frr.conf in
the case our default conflicts with another application
they are using.
Signed-off-by: Stephen Worley <sworley@nvidia.com>
Diffstat (limited to 'zebra')
-rw-r--r-- | zebra/if_netlink.c | 30 | ||||
-rw-r--r-- | zebra/if_netlink.h | 10 | ||||
-rw-r--r-- | zebra/kernel_netlink.c | 4 | ||||
-rw-r--r-- | zebra/zebra_vty.c | 28 |
4 files changed, 72 insertions, 0 deletions
diff --git a/zebra/if_netlink.c b/zebra/if_netlink.c index 748f239db..71a26c8d5 100644 --- a/zebra/if_netlink.c +++ b/zebra/if_netlink.c @@ -2214,4 +2214,34 @@ 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("FRR protodown reason bit change %u -> %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("FRR protodown reason bit change %u -> %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; +} + #endif /* GNU_LINUX */ diff --git a/zebra/if_netlink.h b/zebra/if_netlink.h index d5a73bb46..3d9e934fb 100644 --- a/zebra/if_netlink.h +++ b/zebra/if_netlink.h @@ -72,6 +72,16 @@ netlink_put_intf_update_msg(struct nl_batch *bth, struct zebra_dplane_ctx *ctx); */ int netlink_protodown(struct interface *ifp, bool down, uint32_t r_bitfield); +/* 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/kernel_netlink.c b/zebra/kernel_netlink.c index 60bce6e03..0dd76e325 100644 --- a/zebra/kernel_netlink.c +++ b/zebra/kernel_netlink.c @@ -210,6 +210,10 @@ int netlink_config_write_helper(struct vty *vty) vty_out(vty, "zebra kernel netlink batch-tx-buf %u %u\n", size, threshold); + if (if_netlink_frr_protodown_r_bit_is_set()) + vty_out(vty, "zebra protodown reason-bit %u\n", + if_netlink_get_frr_protodown_r_bit()); + return 0; } diff --git a/zebra/zebra_vty.c b/zebra/zebra_vty.c index bb1623211..6b155b881 100644 --- a/zebra/zebra_vty.c +++ b/zebra/zebra_vty.c @@ -60,6 +60,7 @@ #include "northbound_cli.h" #include "zebra/zebra_nb.h" #include "zebra/kernel_netlink.h" +#include "zebra/if_netlink.h" #include "zebra/table_manager.h" #include "zebra/zebra_script.h" #include "zebra/rtadv.h" @@ -4356,6 +4357,31 @@ DEFUN_HIDDEN(no_zebra_kernel_netlink_batch_tx_buf, return CMD_SUCCESS; } +DEFPY (zebra_protodown_bit, + zebra_protodown_bit_cmd, + "zebra protodown reason-bit (0-31)$bit", + ZEBRA_STR + "Protodown Configuration\n" + "Reason Bit used in the kernel for application\n" + "Reason Bit range\n") +{ + if_netlink_set_frr_protodown_r_bit(bit); + return CMD_SUCCESS; +} + +DEFPY (no_zebra_protodown_bit, + no_zebra_protodown_bit_cmd, + "no zebra protodown reason-bit [(0-31)$bit]", + NO_STR + ZEBRA_STR + "Protodown Configuration\n" + "Reason Bit used in the kernel for setting protodown\n" + "Reason Bit Range\n") +{ + if_netlink_unset_frr_protodown_r_bit(); + return CMD_SUCCESS; +} + #endif /* HAVE_NETLINK */ DEFUN(ip_table_range, ip_table_range_cmd, @@ -4561,6 +4587,8 @@ void zebra_vty_init(void) #ifdef HAVE_NETLINK install_element(CONFIG_NODE, &zebra_kernel_netlink_batch_tx_buf_cmd); install_element(CONFIG_NODE, &no_zebra_kernel_netlink_batch_tx_buf_cmd); + install_element(CONFIG_NODE, &zebra_protodown_bit_cmd); + install_element(CONFIG_NODE, &no_zebra_protodown_bit_cmd); #endif /* HAVE_NETLINK */ #ifdef HAVE_SCRIPTING |