summaryrefslogtreecommitdiffstats
path: root/pimd
diff options
context:
space:
mode:
authorBarry A. Trent <barry.trent@atcorp.com>2024-08-09 00:03:06 +0200
committerBarry A. Trent <barry.trent@atcorp.com>2024-09-20 22:44:27 +0200
commit26b67993d0de7e64d3409858bc0f165b9f8d4c1c (patch)
treed5370cb4eac9f5851fe3e33a50ecbeee99157f1d /pimd
parentMerge pull request #16857 from donaldsharp/logger_warning (diff)
downloadfrr-26b67993d0de7e64d3409858bc0f165b9f8d4c1c.tar.xz
frr-26b67993d0de7e64d3409858bc0f165b9f8d4c1c.zip
pimd, yang: add cli for igmp proxy
Signed-off-by: Barry A. Trent <barry.trent@atcorp.com>
Diffstat (limited to 'pimd')
-rw-r--r--pimd/pim_cmd.c13
-rw-r--r--pimd/pim_iface.h1
-rw-r--r--pimd/pim_nb.c8
-rw-r--r--pimd/pim_nb.h1
-rw-r--r--pimd/pim_nb_config.c22
5 files changed, 44 insertions, 1 deletions
diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c
index d71b17448..d1427830c 100644
--- a/pimd/pim_cmd.c
+++ b/pimd/pim_cmd.c
@@ -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);
diff --git a/pimd/pim_iface.h b/pimd/pim_iface.h
index 4d2037966..77e3f5191 100644
--- a/pimd/pim_iface.h
+++ b/pimd/pim_iface.h
@@ -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;
diff --git a/pimd/pim_nb.c b/pimd/pim_nb.c
index 0e8aa48f9..3c36512a3 100644
--- a/pimd/pim_nb.c
+++ b/pimd/pim_nb.c
@@ -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,
diff --git a/pimd/pim_nb.h b/pimd/pim_nb.h
index 55883ad29..dfab58296 100644
--- a/pimd/pim_nb.h
+++ b/pimd/pim_nb.h
@@ -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(
diff --git a/pimd/pim_nb_config.c b/pimd/pim_nb_config.c
index 0c7481c27..781bd5a9a 100644
--- a/pimd/pim_nb_config.c
+++ b/pimd/pim_nb_config.c
@@ -3382,6 +3382,28 @@ int lib_interface_gmp_address_family_robustness_variable_modify(
}
/*
+ * 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
*/
int lib_interface_gmp_address_family_join_group_create(