]> git.puffer.fish Git - mirror/frr.git/commitdiff
pimd, yang: add cli for igmp proxy
authorBarry A. Trent <barry.trent@atcorp.com>
Thu, 8 Aug 2024 22:03:06 +0000 (15:03 -0700)
committerBarry A. Trent <barry.trent@atcorp.com>
Fri, 20 Sep 2024 20:44:27 +0000 (13:44 -0700)
Signed-off-by: Barry A. Trent <barry.trent@atcorp.com>
pimd/pim_cmd.c
pimd/pim_iface.h
pimd/pim_nb.c
pimd/pim_nb.h
pimd/pim_nb_config.c
yang/frr-gmp.yang

index d71b174487413bb3d4f5fe58a4e20647abe3a1c3..d1427830cb551e1a3ed8ea14410737e584bc5330 100644 (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);
index 4d20379665982f31dfb1157c6fd334a30c1fd26e..77e3f5191d6b381d0eed2a0ec89809bc64fa5153 100644 (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;
index 0e8aa48f9dde76b34e3228b77ce2c838974b797d..3c36512a3dc3526c0a3b1be9041637656252e7d7 100644 (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,
index 55883ad29ad67c9d4d9fe6923c05c03d812fa751..dfab582968c177abf87f92b0005e3038cb6bef1a 100644 (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(
index 0c7481c27a8a96683282930a6c296705524432e6..781bd5a9a198dc9d2a0892f4be41213dd5b33327 100644 (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
  */
index e6a1f7f640bb4cf24acf5eeea08ef19bee889cfd..5636010d91a403a4aed4e258b7e9fbf740731f89 100644 (file)
@@ -146,6 +146,13 @@ module frr-gmp {
         "Querier's Robustness Variable allows tuning for the
          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";