summaryrefslogtreecommitdiff
path: root/pimd/pim_cmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'pimd/pim_cmd.c')
-rw-r--r--pimd/pim_cmd.c101
1 files changed, 101 insertions, 0 deletions
diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c
index da07dcb4ac..60b0b9bf2e 100644
--- a/pimd/pim_cmd.c
+++ b/pimd/pim_cmd.c
@@ -57,6 +57,8 @@
#include "pim_msdp.h"
#include "pim_ssm.h"
#include "pim_nht.h"
+#include "pim_bfd.h"
+#include "bfd.h"
static struct cmd_node pim_global_node = {
PIM_NODE,
@@ -1508,6 +1510,7 @@ static void pim_show_neighbors_single(struct vty *vty, const char *neighbor, u_c
vty_out(vty, " Hello Option - Holdtime : %s%s", option_holdtime ? "yes" : "no", VTY_NEWLINE);
vty_out(vty, " Hello Option - LAN Prune Delay : %s%s", option_lan_prune_delay ? "yes" : "no", VTY_NEWLINE);
vty_out(vty, " Hello Option - T-bit : %s%s", option_t_bit ? "yes" : "no", VTY_NEWLINE);
+ pim_bfd_show_info (vty, neigh->bfd_info, json_ifp, uj, 0);
vty_out(vty, "%s", VTY_NEWLINE);
}
}
@@ -5927,6 +5930,99 @@ DEFUN (interface_no_pim_use_source,
return interface_pim_use_src_cmd_worker (vty, "0.0.0.0");
}
+DEFUN (ip_pim_bfd,
+ ip_pim_bfd_cmd,
+ "ip pim bfd",
+ IP_STR
+ PIM_STR
+ "Enables BFD support\n")
+{
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ struct pim_interface *pim_ifp = NULL;
+ struct bfd_info *bfd_info = NULL;
+
+ if (!ifp)
+ return CMD_SUCCESS;
+ pim_ifp = ifp->info;
+ if (!pim_ifp)
+ return CMD_SUCCESS;
+ bfd_info = pim_ifp->bfd_info;
+
+ if (!bfd_info || !CHECK_FLAG (bfd_info->flags, BFD_FLAG_PARAM_CFG))
+ pim_bfd_if_param_set (ifp, BFD_DEF_MIN_RX, BFD_DEF_MIN_TX,
+ BFD_DEF_DETECT_MULT, 1);
+
+ return CMD_SUCCESS;
+}
+
+DEFUN (no_ip_pim_bfd,
+ no_ip_pim_bfd_cmd,
+ "no ip pim bfd",
+ NO_STR
+ IP_STR
+ PIM_STR
+ "Disables BFD support\n")
+{
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ struct pim_interface *pim_ifp = NULL;
+
+ assert (ifp);
+
+ pim_ifp = ifp->info;
+ if (!pim_ifp)
+ return CMD_SUCCESS;
+
+ if (pim_ifp->bfd_info)
+ {
+ pim_bfd_reg_dereg_all_nbr (ifp, ZEBRA_BFD_DEST_DEREGISTER);
+ bfd_info_free (&(pim_ifp->bfd_info));
+ }
+
+ return CMD_SUCCESS;
+}
+
+DEFUN (ip_pim_bfd_param,
+ ip_pim_bfd_param_cmd,
+ "ip pim bfd (2-255) (50-60000) (50-60000)",
+ IP_STR
+ PIM_STR
+ "Enables BFD support\n"
+ "Detect Multiplier\n"
+ "Required min receive interval\n"
+ "Desired min transmit interval\n")
+{
+ VTY_DECLVAR_CONTEXT(interface, ifp);
+ int idx_number = 3;
+ int idx_number_2 = 4;
+ int idx_number_3 = 5;
+ u_int32_t rx_val;
+ u_int32_t tx_val;
+ u_int8_t dm_val;
+ int ret;
+
+
+ if ((ret = bfd_validate_param (vty, argv[idx_number]->arg,
+ argv[idx_number_2]->arg,
+ argv[idx_number_3]->arg,
+ &dm_val, &rx_val, &tx_val)) != CMD_SUCCESS)
+ return ret;
+
+ pim_bfd_if_param_set (ifp, rx_val, tx_val, dm_val, 0);
+
+ return CMD_SUCCESS;
+}
+
+ALIAS (no_ip_pim_bfd,
+ no_ip_pim_bfd_param_cmd,
+ "no ip pim bfd (2-255) (50-60000) (50-60000)",
+ NO_STR
+ IP_STR
+ PIM_STR
+ "Enables BFD support\n"
+ "Detect Multiplier\n"
+ "Required min receive interval\n"
+ "Desired min transmit interval\n")
+
static int
ip_msdp_peer_cmd_worker (struct vty *vty, const char *peer, const char *local)
{
@@ -6910,4 +7006,9 @@ void pim_cmd_init()
install_element (VIEW_NODE, &show_ip_pim_group_type_cmd);
install_element (INTERFACE_NODE, &interface_pim_use_source_cmd);
install_element (INTERFACE_NODE, &interface_no_pim_use_source_cmd);
+ /* Install BFD command */
+ install_element (INTERFACE_NODE, &ip_pim_bfd_cmd);
+ install_element (INTERFACE_NODE, &ip_pim_bfd_param_cmd);
+ install_element (INTERFACE_NODE, &no_ip_pim_bfd_cmd);
+ install_element (INTERFACE_NODE, &no_ip_pim_bfd_param_cmd);
}