From: Sai Gomathi N Date: Tue, 18 Jan 2022 15:16:51 +0000 (-0800) Subject: pim6d: Adding "ipv6 mld query-max-response-time" CLI X-Git-Tag: pim6-testing-20220430~95^2~4 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=c8b3d45de274f6941638a342f2d502b377e2ee7e;p=matthieu%2Ffrr.git pim6d: Adding "ipv6 mld query-max-response-time" CLI Adding the Interface level config command ipv6 mld query-max-response-time <1-65535> This command can be use to tune the max response time for general queries. The number of seconds represented by the [Query Response Interval] must be less than the [Query Interval] Signed-off-by: Sai Gomathi N --- diff --git a/pimd/pim6_cmd.c b/pimd/pim6_cmd.c index 6e12b7fd39..132ac59354 100644 --- a/pimd/pim6_cmd.c +++ b/pimd/pim6_cmd.c @@ -625,6 +625,29 @@ DEFPY (interface_no_ipv6_mld_query_interval, "frr-routing:ipv6"); } +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 (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 +1524,11 @@ 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(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(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..dfa4780d02 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, diff --git a/pimd/pim_cmd_common.c b/pimd/pim_cmd_common.c index 0d575a1456..087448ab16 100644 --- a/pimd/pim_cmd_common.c +++ b/pimd/pim_cmd_common.c @@ -2749,3 +2749,34 @@ 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); +} diff --git a/pimd/pim_cmd_common.h b/pimd/pim_cmd_common.h index 00a9a56738..9f562d43b4 100644 --- a/pimd/pim_cmd_common.h +++ b/pimd/pim_cmd_common.h @@ -93,6 +93,9 @@ 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); /* * Special Macro to allow us to get the correct pim_instance */ diff --git a/pimd/pim_nb_config.c b/pimd/pim_nb_config.c index 7fe7c0395f..97d307d14c 100644 --- a/pimd/pim_nb_config.c +++ b/pimd/pim_nb_config.c @@ -409,7 +409,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) { @@ -439,6 +438,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, @@ -456,6 +456,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) { @@ -503,6 +504,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) @@ -2733,6 +2735,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; @@ -2748,6 +2751,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; }