pimd, yang: add cli for igmp proxy

Signed-off-by: Barry A. Trent <barry.trent@atcorp.com>
This commit is contained in:
Barry A. Trent 2024-08-08 15:03:06 -07:00
parent f07579254a
commit 26b67993d0
6 changed files with 51 additions and 1 deletions

View file

@ -5756,6 +5756,18 @@ DEFUN (interface_no_ip_pim_hello,
return pim_process_no_ip_pim_hello_cmd(vty);
}
DEFPY (interface_ip_igmp_proxy,
interface_ip_igmp_proxy_cmd,
"[no] ip igmp proxy",
NO_STR
IP_STR
IGMP_STR
"Proxy IGMP join/prune operations\n")
{
return CMD_SUCCESS;
}
DEFUN (debug_igmp,
debug_igmp_cmd,
"debug igmp",
@ -8718,6 +8730,7 @@ void pim_cmd_init(void)
&interface_ip_igmp_last_member_query_interval_cmd);
install_element(INTERFACE_NODE,
&interface_no_ip_igmp_last_member_query_interval_cmd);
install_element(INTERFACE_NODE, &interface_ip_igmp_proxy_cmd);
install_element(INTERFACE_NODE, &interface_ip_pim_activeactive_cmd);
install_element(INTERFACE_NODE, &interface_ip_pim_ssm_cmd);
install_element(INTERFACE_NODE, &interface_no_ip_pim_ssm_cmd);

View file

@ -63,6 +63,7 @@ struct pim_interface {
bool pim_passive_enable : 1;
bool gm_enable : 1;
bool gm_proxy : 1; /* proxy IGMP joins/prunes */
ifindex_t mroute_vif_index;
struct pim_instance *pim;

View file

@ -553,7 +553,13 @@ const struct frr_yang_module_info frr_gmp_info = {
.destroy = lib_interface_gmp_address_family_join_group_destroy,
}
},
{
{
.xpath = "/frr-interface:lib/interface/frr-gmp:gmp/address-family/proxy",
.cbs = {
.modify = lib_interface_gmp_address_family_proxy_modify,
}
},
{
.xpath = "/frr-interface:lib/interface/frr-gmp:gmp/address-family/static-group",
.cbs = {
.create = lib_interface_gmp_address_family_static_group_create,

View file

@ -221,6 +221,7 @@ int lib_interface_gmp_address_family_join_group_create(
struct nb_cb_create_args *args);
int lib_interface_gmp_address_family_join_group_destroy(
struct nb_cb_destroy_args *args);
int lib_interface_gmp_address_family_proxy_modify(struct nb_cb_modify_args *args);
int lib_interface_gmp_address_family_static_group_create(
struct nb_cb_create_args *args);
int lib_interface_gmp_address_family_static_group_destroy(

View file

@ -3381,6 +3381,28 @@ int lib_interface_gmp_address_family_robustness_variable_modify(
return NB_OK;
}
/*
* XPath: /frr-interface:lib/interface/frr-gmp:gmp/address-family/proxy
*/
int lib_interface_gmp_address_family_proxy_modify(struct nb_cb_modify_args *args)
{
struct interface *ifp;
struct pim_interface *pim_ifp;
switch (args->event) {
case NB_EV_VALIDATE:
case NB_EV_PREPARE:
case NB_EV_ABORT:
break;
case NB_EV_APPLY:
ifp = nb_running_get_entry(args->dnode, NULL, true);
pim_ifp = ifp->info;
if (pim_ifp)
pim_ifp->gm_proxy = yang_dnode_get_bool(args->dnode,
NULL);
}
return NB_OK;
}
/*
* XPath: /frr-interface:lib/interface/frr-gmp:gmp/address-family/join-group
*/

View file

@ -147,6 +147,13 @@ module frr-gmp {
expected packet loss on a network.";
}
leaf proxy {
type boolean;
default "false";
description
"Enable IGMP proxy on the interface.";
}
list join-group {
key "group-addr source-addr";
description