#include "isisd/isis_bfd.h"
#include "isisd/isis_zebra.h"
+#include "isisd/isis_common.h"
+#include "isisd/isis_constants.h"
+#include "isisd/isis_adjacency.h"
+#include "isisd/isis_circuit.h"
+#include "isisd/fabricd.h"
static int isis_bfd_interface_dest_update(int command, struct zclient *zclient,
zebra_size_t length, vrf_id_t vrf_id)
bfd_client_sendmsg(zclient, ZEBRA_BFD_CLIENT_REGISTER);
}
+void isis_bfd_circuit_cmd(struct isis_circuit *circuit, int command)
+{
+ return;
+}
+
+void isis_bfd_circuit_param_set(struct isis_circuit *circuit,
+ uint32_t min_rx, uint32_t min_tx,
+ uint32_t detect_mult, int defaults)
+{
+ int command = 0;
+
+ bfd_set_param(&circuit->bfd_info, min_rx,
+ min_tx, detect_mult, defaults, &command);
+
+ if (command)
+ isis_bfd_circuit_cmd(circuit, command);
+}
+
void isis_bfd_init(void)
{
bfd_gbl_init();
#include "command.h"
#include "spf_backoff.h"
+#include "bfd.h"
#include "isis_circuit.h"
#include "isis_csm.h"
#include "isis_misc.h"
#include "isis_mt.h"
#include "isisd.h"
+#include "isis_bfd.h"
#include "isis_vty_common.h"
struct isis_circuit *isis_circuit_lookup(struct vty *vty)
return isis_circuit_mt_enabled_set(circuit, mtid, false);
}
+DEFUN (isis_bfd,
+ isis_bfd_cmd,
+ PROTO_NAME " bfd",
+ PROTO_HELP
+ "Enable BFD support\n")
+{
+ struct isis_circuit *circuit = isis_circuit_lookup(vty);
+ if (!circuit)
+ return CMD_ERR_NO_MATCH;
+
+ if (circuit->bfd_info
+ && CHECK_FLAG(circuit->bfd_info->flags, BFD_FLAG_PARAM_CFG)) {
+ return CMD_SUCCESS;
+ }
+
+ isis_bfd_circuit_param_set(circuit, BFD_DEF_MIN_RX,
+ BFD_DEF_MIN_TX, BFD_DEF_DETECT_MULT, true);
+
+ return CMD_SUCCESS;
+}
+
+#if HAVE_BFDD > 0
+DEFUN_HIDDEN (
+#else
+DEFUN (
+#endif
+ isis_bfd_param,
+ isis_bfd_param_cmd,
+ PROTO_NAME " bfd (2-255) (50-60000) (50-60000)",
+ PROTO_HELP
+ "Enable BFD support\n"
+ "Detect Multiplier\n"
+ "Required min receive interval\n"
+ "Desired min transmit interval\n")
+{
+ struct isis_circuit *circuit = isis_circuit_lookup(vty);
+ if (!circuit)
+ return CMD_ERR_NO_MATCH;
+
+ uint32_t rx_val;
+ uint32_t tx_val;
+ uint8_t dm_val;
+ int ret;
+
+ if ((ret = bfd_validate_param(vty, argv[2]->arg, argv[3]->arg,
+ argv[4]->arg, &dm_val, &rx_val,
+ &tx_val)) != CMD_SUCCESS)
+ return ret;
+
+ isis_bfd_circuit_param_set(circuit, rx_val, tx_val, dm_val, false);
+ return CMD_SUCCESS;
+}
+
+DEFUN (no_isis_bfd,
+ no_isis_bfd_cmd,
+#if HAVE_BFDD > 0
+ "no " PROTO_NAME " bfd",
+#else
+ "no " PROTO_NAME " bfd [(2-255) (50-60000) (50-60000)]",
+#endif
+ NO_STR
+ PROTO_HELP
+ "Disables BFD support\n"
+#if HAVE_BFDD == 0
+ "Detect Multiplier\n"
+ "Required min receive interval\n"
+ "Desired min transmit interval\n"
+#endif
+)
+{
+ struct isis_circuit *circuit = isis_circuit_lookup(vty);
+ if (!circuit)
+ return CMD_ERR_NO_MATCH;
+
+ if (!circuit->bfd_info)
+ return CMD_SUCCESS;
+
+ isis_bfd_circuit_cmd(circuit, ZEBRA_BFD_DEST_DEREGISTER);
+ bfd_info_free(&circuit->bfd_info);
+ return CMD_SUCCESS;
+}
+
DEFUN (set_overload_bit,
set_overload_bit_cmd,
"set-overload-bit",
install_element(INTERFACE_NODE, &circuit_topology_cmd);
install_element(INTERFACE_NODE, &no_circuit_topology_cmd);
+ install_element(INTERFACE_NODE, &isis_bfd_cmd);
+ install_element(INTERFACE_NODE, &isis_bfd_param_cmd);
+ install_element(INTERFACE_NODE, &no_isis_bfd_cmd);
+
install_element(ROUTER_NODE, &set_overload_bit_cmd);
install_element(ROUTER_NODE, &no_set_overload_bit_cmd);