summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@opensourcerouting.org>2022-04-05 21:07:15 +0200
committerGitHub <noreply@github.com>2022-04-05 21:07:15 +0200
commit8996a815b5e43f6a1ced2e9bd4485c655e73c22e (patch)
tree7f400b921ead525ce6984631f8aef96837490727
parent9fc31ddbd55588aa4405159fa9218f0c05f14756 (diff)
parent1881b5c0cabbb1a3b88d18d14c83a33d80d17b90 (diff)
Merge pull request #10365 from SaiGomathiN/ipv6-config-cmd
-rw-r--r--pimd/pim6_cmd.c113
-rw-r--r--pimd/pim_cmd.c93
-rw-r--r--pimd/pim_cmd_common.c91
-rw-r--r--pimd/pim_cmd_common.h17
-rw-r--r--pimd/pim_nb_config.c17
5 files changed, 249 insertions, 82 deletions
diff --git a/pimd/pim6_cmd.c b/pimd/pim6_cmd.c
index 6e12b7fd39..5d7a63372f 100644
--- a/pimd/pim6_cmd.c
+++ b/pimd/pim6_cmd.c
@@ -625,6 +625,102 @@ DEFPY (interface_no_ipv6_mld_query_interval,
"frr-routing:ipv6");
}
+DEFPY (mld_group_watermark,
+ mld_group_watermark_cmd,
+ "ipv6 mld watermark-warn (1-65535)$limit",
+ IPV6_STR
+ MLD_STR
+ "Configure group limit for watermark warning\n"
+ "Group count to generate watermark warning\n")
+{
+ PIM_DECLVAR_CONTEXT(vrf, pim);
+ /* TBD Depends on MLD data structure changes */
+ return CMD_SUCCESS;
+}
+
+DEFPY (no_mld_group_watermark,
+ no_mld_group_watermark_cmd,
+ "no ipv6 mld watermark-warn [(1-65535)$limit]",
+ NO_STR
+ IPV6_STR
+ MLD_STR
+ "Unconfigure group limit for watermark warning\n"
+ IGNORED_IN_NO_STR)
+{
+ PIM_DECLVAR_CONTEXT(vrf, pim);
+ /* TBD Depends on MLD data structure changes */
+ return CMD_SUCCESS;
+}
+
+DEFPY (interface_ipv6_mld_query_max_response_time,
+ interface_ipv6_mld_query_max_response_time_cmd,
+ "ipv6 mld query-max-response-time (1-65535)$qmrt",
+ IPV6_STR
+ IFACE_MLD_STR
+ IFACE_MLD_QUERY_MAX_RESPONSE_TIME_STR
+ "Query response value in deci-seconds\n")
+{
+ return gm_process_query_max_response_time_cmd(vty, qmrt_str);
+}
+
+DEFPY (interface_no_ipv6_mld_query_max_response_time,
+ interface_no_ipv6_mld_query_max_response_time_cmd,
+ "no ipv6 mld query-max-response-time [(1-65535)]",
+ NO_STR
+ IPV6_STR
+ IFACE_MLD_STR
+ IFACE_MLD_QUERY_MAX_RESPONSE_TIME_STR
+ IGNORED_IN_NO_STR)
+{
+ return gm_process_no_query_max_response_time_cmd(vty);
+}
+
+DEFPY (interface_ipv6_mld_last_member_query_count,
+ interface_ipv6_mld_last_member_query_count_cmd,
+ "ipv6 mld last-member-query-count (1-255)$lmqc",
+ IPV6_STR
+ IFACE_MLD_STR
+ IFACE_MLD_LAST_MEMBER_QUERY_COUNT_STR
+ "Last member query count\n")
+{
+ return gm_process_last_member_query_count_cmd(vty, lmqc_str);
+}
+
+DEFPY (interface_no_ipv6_mld_last_member_query_count,
+ interface_no_ipv6_mld_last_member_query_count_cmd,
+ "no ipv6 mld last-member-query-count [(1-255)]",
+ NO_STR
+ IPV6_STR
+ IFACE_MLD_STR
+ IFACE_MLD_LAST_MEMBER_QUERY_COUNT_STR
+ IGNORED_IN_NO_STR)
+{
+ return gm_process_no_last_member_query_count_cmd(vty);
+}
+
+DEFPY (interface_ipv6_mld_last_member_query_interval,
+ interface_ipv6_mld_last_member_query_interval_cmd,
+ "ipv6 mld last-member-query-interval (1-65535)$lmqi",
+ IPV6_STR
+ IFACE_MLD_STR
+ IFACE_MLD_LAST_MEMBER_QUERY_INTERVAL_STR
+ "Last member query interval in deciseconds\n")
+{
+ return gm_process_last_member_query_interval_cmd(vty, lmqi_str);
+}
+
+DEFPY (interface_no_ipv6_mld_last_member_query_interval,
+ interface_no_ipv6_mld_last_member_query_interval_cmd,
+ "no ipv6 mld last-member-query-interval [(1-65535)]",
+ NO_STR
+ IPV6_STR
+ IFACE_MLD_STR
+ IFACE_MLD_LAST_MEMBER_QUERY_INTERVAL_STR
+ IGNORED_IN_NO_STR)
+{
+ return gm_process_no_last_member_query_interval_cmd(vty);
+}
+
DEFPY (show_ipv6_pim_rp,
show_ipv6_pim_rp_cmd,
"show ipv6 pim [vrf NAME] rp-info [X:X::X:X/M$group] [json$json]",
@@ -1501,6 +1597,23 @@ void pim_cmd_init(void)
install_element(INTERFACE_NODE, &interface_ipv6_mld_query_interval_cmd);
install_element(INTERFACE_NODE,
&interface_no_ipv6_mld_query_interval_cmd);
+ install_element(CONFIG_NODE, &mld_group_watermark_cmd);
+ install_element(VRF_NODE, &mld_group_watermark_cmd);
+ install_element(CONFIG_NODE, &no_mld_group_watermark_cmd);
+ install_element(VRF_NODE, &no_mld_group_watermark_cmd);
+ install_element(INTERFACE_NODE,
+ &interface_ipv6_mld_query_max_response_time_cmd);
+ install_element(INTERFACE_NODE,
+ &interface_no_ipv6_mld_query_max_response_time_cmd);
+ install_element(INTERFACE_NODE,
+ &interface_ipv6_mld_last_member_query_count_cmd);
+ install_element(INTERFACE_NODE,
+ &interface_no_ipv6_mld_last_member_query_count_cmd);
+ install_element(INTERFACE_NODE,
+ &interface_ipv6_mld_last_member_query_interval_cmd);
+ install_element(INTERFACE_NODE,
+ &interface_no_ipv6_mld_last_member_query_interval_cmd);
+
install_element(VIEW_NODE, &show_ipv6_pim_rp_cmd);
install_element(VIEW_NODE, &show_ipv6_pim_rp_vrf_all_cmd);
install_element(VIEW_NODE, &show_ipv6_pim_rpf_cmd);
diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c
index 3f2e248481..78fc975787 100644
--- a/pimd/pim_cmd.c
+++ b/pimd/pim_cmd.c
@@ -5664,35 +5664,15 @@ DEFUN (interface_no_ip_igmp_version,
"frr-routing:ipv4");
}
-DEFUN (interface_ip_igmp_query_max_response_time,
+DEFPY (interface_ip_igmp_query_max_response_time,
interface_ip_igmp_query_max_response_time_cmd,
- "ip igmp query-max-response-time (1-65535)",
+ "ip igmp query-max-response-time (1-65535)$qmrt",
IP_STR
IFACE_IGMP_STR
IFACE_IGMP_QUERY_MAX_RESPONSE_TIME_STR
"Query response value in deci-seconds\n")
{
- const struct lyd_node *pim_enable_dnode;
-
- pim_enable_dnode =
- yang_dnode_getf(vty->candidate_config->dnode,
- FRR_PIM_ENABLE_XPATH, VTY_CURR_XPATH,
- "frr-routing:ipv4");
-
- if (!pim_enable_dnode) {
- nb_cli_enqueue_change(vty, "./enable", NB_OP_MODIFY,
- "true");
- } else {
- if (!yang_dnode_get_bool(pim_enable_dnode, "."))
- nb_cli_enqueue_change(vty, "./enable",
- NB_OP_MODIFY, "true");
- }
-
- nb_cli_enqueue_change(vty, "./query-max-response-time", NB_OP_MODIFY,
- argv[3]->arg);
-
- return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
- "frr-routing:ipv4");
+ return gm_process_query_max_response_time_cmd(vty, qmrt_str);
}
DEFUN (interface_no_ip_igmp_query_max_response_time,
@@ -5704,10 +5684,7 @@ DEFUN (interface_no_ip_igmp_query_max_response_time,
IFACE_IGMP_QUERY_MAX_RESPONSE_TIME_STR
IGNORED_IN_NO_STR)
{
- nb_cli_enqueue_change(vty, "./query-max-response-time", NB_OP_DESTROY,
- NULL);
- return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
- "frr-routing:ipv4");
+ return gm_process_no_query_max_response_time_cmd(vty);
}
DEFUN_HIDDEN (interface_ip_igmp_query_max_response_time_dsec,
@@ -5756,34 +5733,15 @@ DEFUN_HIDDEN (interface_no_ip_igmp_query_max_response_time_dsec,
"frr-routing:ipv4");
}
-DEFUN (interface_ip_igmp_last_member_query_count,
+DEFPY (interface_ip_igmp_last_member_query_count,
interface_ip_igmp_last_member_query_count_cmd,
- "ip igmp last-member-query-count (1-255)",
+ "ip igmp last-member-query-count (1-255)$lmqc",
IP_STR
IFACE_IGMP_STR
IFACE_IGMP_LAST_MEMBER_QUERY_COUNT_STR
"Last member query count\n")
{
- const struct lyd_node *pim_enable_dnode;
-
- pim_enable_dnode =
- yang_dnode_getf(vty->candidate_config->dnode,
- FRR_PIM_ENABLE_XPATH, VTY_CURR_XPATH,
- "frr-routing:ipv4");
- if (!pim_enable_dnode) {
- nb_cli_enqueue_change(vty, "./enable", NB_OP_MODIFY,
- "true");
- } else {
- if (!yang_dnode_get_bool(pim_enable_dnode, "."))
- nb_cli_enqueue_change(vty, "./enable",
- NB_OP_MODIFY, "true");
- }
-
- nb_cli_enqueue_change(vty, "./robustness-variable", NB_OP_MODIFY,
- argv[3]->arg);
-
- return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
- "frr-routing:ipv4");
+ return gm_process_last_member_query_count_cmd(vty, lmqc_str);
}
DEFUN (interface_no_ip_igmp_last_member_query_count,
@@ -5795,41 +5753,18 @@ DEFUN (interface_no_ip_igmp_last_member_query_count,
IFACE_IGMP_LAST_MEMBER_QUERY_COUNT_STR
IGNORED_IN_NO_STR)
{
- nb_cli_enqueue_change(vty, "./robustness-variable", NB_OP_DESTROY,
- NULL);
-
- return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
- "frr-routing:ipv4");
+ return gm_process_no_last_member_query_count_cmd(vty);
}
-DEFUN (interface_ip_igmp_last_member_query_interval,
+DEFPY (interface_ip_igmp_last_member_query_interval,
interface_ip_igmp_last_member_query_interval_cmd,
- "ip igmp last-member-query-interval (1-65535)",
+ "ip igmp last-member-query-interval (1-65535)$lmqi",
IP_STR
IFACE_IGMP_STR
IFACE_IGMP_LAST_MEMBER_QUERY_INTERVAL_STR
"Last member query interval in deciseconds\n")
{
- const struct lyd_node *pim_enable_dnode;
-
- pim_enable_dnode =
- yang_dnode_getf(vty->candidate_config->dnode,
- FRR_PIM_ENABLE_XPATH, VTY_CURR_XPATH,
- "frr-routing:ipv4");
- if (!pim_enable_dnode) {
- nb_cli_enqueue_change(vty, "./enable", NB_OP_MODIFY,
- "true");
- } else {
- if (!yang_dnode_get_bool(pim_enable_dnode, "."))
- nb_cli_enqueue_change(vty, "./enable",
- NB_OP_MODIFY, "true");
- }
-
- nb_cli_enqueue_change(vty, "./last-member-query-interval", NB_OP_MODIFY,
- argv[3]->arg);
-
- return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
- "frr-routing:ipv4");
+ return gm_process_last_member_query_interval_cmd(vty, lmqi_str);
}
DEFUN (interface_no_ip_igmp_last_member_query_interval,
@@ -5841,11 +5776,7 @@ DEFUN (interface_no_ip_igmp_last_member_query_interval,
IFACE_IGMP_LAST_MEMBER_QUERY_INTERVAL_STR
IGNORED_IN_NO_STR)
{
- nb_cli_enqueue_change(vty, "./last-member-query-interval",
- NB_OP_DESTROY, NULL);
-
- return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
- "frr-routing:ipv4");
+ return gm_process_no_last_member_query_interval_cmd(vty);
}
DEFUN (interface_ip_pim_drprio,
diff --git a/pimd/pim_cmd_common.c b/pimd/pim_cmd_common.c
index 0d575a1456..0992a60de9 100644
--- a/pimd/pim_cmd_common.c
+++ b/pimd/pim_cmd_common.c
@@ -2749,3 +2749,94 @@ void pim_show_neighbors(struct pim_instance *pim, struct vty *vty,
}
}
}
+
+int gm_process_query_max_response_time_cmd(struct vty *vty,
+ const char *qmrt_str)
+{
+ const struct lyd_node *pim_enable_dnode;
+
+ pim_enable_dnode = yang_dnode_getf(vty->candidate_config->dnode,
+ FRR_PIM_ENABLE_XPATH, VTY_CURR_XPATH,
+ FRR_PIM_AF_XPATH_VAL);
+
+ if (!pim_enable_dnode) {
+ nb_cli_enqueue_change(vty, "./enable", NB_OP_MODIFY, "true");
+ } else {
+ if (!yang_dnode_get_bool(pim_enable_dnode, "."))
+ nb_cli_enqueue_change(vty, "./enable", NB_OP_MODIFY,
+ "true");
+ }
+
+ nb_cli_enqueue_change(vty, "./query-max-response-time", NB_OP_MODIFY,
+ qmrt_str);
+ return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
+ FRR_PIM_AF_XPATH_VAL);
+}
+
+int gm_process_no_query_max_response_time_cmd(struct vty *vty)
+{
+ nb_cli_enqueue_change(vty, "./query-max-response-time", NB_OP_DESTROY,
+ NULL);
+ return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
+ FRR_PIM_AF_XPATH_VAL);
+}
+
+int gm_process_last_member_query_count_cmd(struct vty *vty,
+ const char *lmqc_str)
+{
+ const struct lyd_node *pim_enable_dnode;
+
+ pim_enable_dnode = yang_dnode_getf(vty->candidate_config->dnode,
+ FRR_PIM_ENABLE_XPATH, VTY_CURR_XPATH,
+ FRR_PIM_AF_XPATH_VAL);
+ if (!pim_enable_dnode) {
+ nb_cli_enqueue_change(vty, "./enable", NB_OP_MODIFY, "true");
+ } else {
+ if (!yang_dnode_get_bool(pim_enable_dnode, "."))
+ nb_cli_enqueue_change(vty, "./enable", NB_OP_MODIFY,
+ "true");
+ }
+
+ nb_cli_enqueue_change(vty, "./robustness-variable", NB_OP_MODIFY,
+ lmqc_str);
+ return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
+ FRR_PIM_AF_XPATH_VAL);
+}
+
+int gm_process_no_last_member_query_count_cmd(struct vty *vty)
+{
+ nb_cli_enqueue_change(vty, "./robustness-variable", NB_OP_DESTROY,
+ NULL);
+ return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
+ FRR_PIM_AF_XPATH_VAL);
+}
+
+int gm_process_last_member_query_interval_cmd(struct vty *vty,
+ const char *lmqi_str)
+{
+ const struct lyd_node *pim_enable_dnode;
+
+ pim_enable_dnode = yang_dnode_getf(vty->candidate_config->dnode,
+ FRR_PIM_ENABLE_XPATH, VTY_CURR_XPATH,
+ FRR_PIM_AF_XPATH_VAL);
+ if (!pim_enable_dnode) {
+ nb_cli_enqueue_change(vty, "./enable", NB_OP_MODIFY, "true");
+ } else {
+ if (!yang_dnode_get_bool(pim_enable_dnode, "."))
+ nb_cli_enqueue_change(vty, "./enable", NB_OP_MODIFY,
+ "true");
+ }
+
+ nb_cli_enqueue_change(vty, "./last-member-query-interval", NB_OP_MODIFY,
+ lmqi_str);
+ return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
+ FRR_PIM_AF_XPATH_VAL);
+}
+
+int gm_process_no_last_member_query_interval_cmd(struct vty *vty)
+{
+ nb_cli_enqueue_change(vty, "./last-member-query-interval",
+ NB_OP_DESTROY, NULL);
+ return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
+ FRR_PIM_AF_XPATH_VAL);
+}
diff --git a/pimd/pim_cmd_common.h b/pimd/pim_cmd_common.h
index 00a9a56738..3bcd0d5d6d 100644
--- a/pimd/pim_cmd_common.h
+++ b/pimd/pim_cmd_common.h
@@ -93,6 +93,15 @@ void pim_show_neighbors_single(struct pim_instance *pim, struct vty *vty,
const char *neighbor, json_object *json);
void pim_show_neighbors(struct pim_instance *pim, struct vty *vty,
json_object *json);
+int gm_process_query_max_response_time_cmd(struct vty *vty,
+ const char *qmrt_str);
+int gm_process_no_query_max_response_time_cmd(struct vty *vty);
+int gm_process_last_member_query_count_cmd(struct vty *vty,
+ const char *lmqc_str);
+int gm_process_no_last_member_query_count_cmd(struct vty *vty);
+int gm_process_last_member_query_interval_cmd(struct vty *vty,
+ const char *lmqi_str);
+int gm_process_no_last_member_query_interval_cmd(struct vty *vty);
/*
* Special Macro to allow us to get the correct pim_instance
*/
@@ -102,4 +111,12 @@ void pim_show_neighbors(struct pim_instance *pim, struct vty *vty,
(vrf) ? vrf->info : pim_get_pim_instance(VRF_DEFAULT); \
vrf = (vrf) ? vrf : pim->vrf
+/*
+ * Special Macro to allow us to get the correct pim_instance;
+ */
+#define PIM_DECLVAR_CONTEXT(A, B) \
+ struct vrf *A = VTY_GET_CONTEXT(vrf); \
+ struct pim_instance *B = \
+ (vrf) ? vrf->info : pim_get_pim_instance(VRF_DEFAULT); \
+ vrf = (vrf) ? vrf : pim->vrf
#endif /* PIM_CMD_COMMON_H */
diff --git a/pimd/pim_nb_config.c b/pimd/pim_nb_config.c
index 0f59f1d61b..d174b8a0af 100644
--- a/pimd/pim_nb_config.c
+++ b/pimd/pim_nb_config.c
@@ -408,7 +408,6 @@ static void igmp_sock_query_interval_reconfig(struct gm_sock *igmp)
*/
igmp_startup_mode_on(igmp);
}
-#endif
static void igmp_sock_query_reschedule(struct gm_sock *igmp)
{
@@ -438,6 +437,7 @@ static void igmp_sock_query_reschedule(struct gm_sock *igmp)
assert(igmp->t_other_querier_timer);
}
}
+#endif /* PIM_IPV == 4 */
#if PIM_IPV == 4
static void change_query_interval(struct pim_interface *pim_ifp,
@@ -455,6 +455,7 @@ static void change_query_interval(struct pim_interface *pim_ifp,
}
#endif
+#if PIM_IPV == 4
static void change_query_max_response_time(struct pim_interface *pim_ifp,
int query_max_response_time_dsec)
{
@@ -502,6 +503,7 @@ static void change_query_max_response_time(struct pim_interface *pim_ifp,
}
}
}
+#endif
int routing_control_plane_protocols_name_validate(
struct nb_cb_create_args *args)
@@ -2732,6 +2734,7 @@ int lib_interface_gmp_address_family_query_interval_modify(
int lib_interface_gmp_address_family_query_max_response_time_modify(
struct nb_cb_modify_args *args)
{
+#if PIM_IPV == 4
struct interface *ifp;
int query_max_response_time_dsec;
@@ -2747,6 +2750,10 @@ int lib_interface_gmp_address_family_query_max_response_time_modify(
change_query_max_response_time(ifp->info,
query_max_response_time_dsec);
}
+#else
+ /* TBD Depends on MLD data structure changes */
+#endif
+
return NB_OK;
}
@@ -2757,6 +2764,7 @@ int lib_interface_gmp_address_family_query_max_response_time_modify(
int lib_interface_gmp_address_family_last_member_query_interval_modify(
struct nb_cb_modify_args *args)
{
+#if PIM_IPV == 4
struct interface *ifp;
struct pim_interface *pim_ifp;
int last_member_query_interval;
@@ -2776,6 +2784,9 @@ int lib_interface_gmp_address_family_last_member_query_interval_modify(
break;
}
+#else
+ /* TBD Depends on MLD data structure changes */
+#endif
return NB_OK;
}
@@ -2786,6 +2797,7 @@ int lib_interface_gmp_address_family_last_member_query_interval_modify(
int lib_interface_gmp_address_family_robustness_variable_modify(
struct nb_cb_modify_args *args)
{
+#if PIM_IPV == 4
struct interface *ifp;
struct pim_interface *pim_ifp;
int last_member_query_count;
@@ -2804,6 +2816,9 @@ int lib_interface_gmp_address_family_robustness_variable_modify(
break;
}
+#else
+ /* TBD Depends on MLD data structure changes */
+#endif
return NB_OK;
}