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",
&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);
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;
.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,
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(
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
*/
"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";