]> git.proxmox.com Git - mirror_frr.git/commitdiff
pim: Keeping list of address-family under gmp container
authorsarita patra <saritap@vmware.com>
Tue, 4 Jan 2022 11:26:06 +0000 (03:26 -0800)
committersarita patra <saritap@vmware.com>
Mon, 17 Jan 2022 13:10:20 +0000 (05:10 -0800)
Renamed frr-igmp.yang to frr-gmp.yang, igmp to gmp container.
to support IGMP and MLD protocol.

frr-gmp.yang, created a list of address family under mgmd
container. For PIMV4 the key is IPV4, where as for PIMV6
the key is IPV6. This is done for PIMV6 development.

This commit will have all the northbound changes to support
IPV4 address family.

Signed-off-by: sarita patra <saritap@vmware.com>
pimd/pim_cmd.c
pimd/pim_main.c
pimd/pim_nb.c
pimd/pim_nb.h
pimd/pim_nb_config.c
pimd/subdir.am
yang/frr-gmp.yang [new file with mode: 0644]
yang/frr-igmp.yang [deleted file]
yang/subdir.am

index 7b41c58f51573b8f4fa892a8e4f63834f9bfdf1a..c0401b83ce3392ba2d92bc50009032da035ebbea 100644 (file)
@@ -7845,9 +7845,10 @@ DEFUN (interface_ip_igmp,
        IP_STR
        IFACE_IGMP_STR)
 {
-       nb_cli_enqueue_change(vty, "./igmp-enable", NB_OP_MODIFY, "true");
+       nb_cli_enqueue_change(vty, "./enable", NB_OP_MODIFY, "true");
 
-       return nb_cli_apply_changes(vty, "./frr-igmp:igmp");
+       return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
+                                   "frr-routing:ipv4");
 }
 
 DEFUN (interface_no_ip_igmp,
@@ -7876,11 +7877,12 @@ DEFUN (interface_no_ip_igmp,
                                              NULL);
                        nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
                } else
-                       nb_cli_enqueue_change(vty, "./igmp-enable",
+                       nb_cli_enqueue_change(vty, "./enable",
                                              NB_OP_MODIFY, "false");
        }
 
-       return nb_cli_apply_changes(vty, "./frr-igmp:igmp");
+       return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
+                                   "frr-routing:ipv4");
 }
 
 DEFUN (interface_ip_igmp_join,
@@ -7908,7 +7910,7 @@ DEFUN (interface_ip_igmp_join,
        } else
                source_str = "0.0.0.0";
 
-       snprintf(xpath, sizeof(xpath), FRR_IGMP_JOIN_XPATH,
+       snprintf(xpath, sizeof(xpath), FRR_GMP_JOIN_XPATH,
                 "frr-routing:ipv4", argv[idx_group]->arg, source_str);
 
        nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
@@ -7942,7 +7944,7 @@ DEFUN (interface_no_ip_igmp_join,
        } else
                source_str = "0.0.0.0";
 
-       snprintf(xpath, sizeof(xpath), FRR_IGMP_JOIN_XPATH,
+       snprintf(xpath, sizeof(xpath), FRR_GMP_JOIN_XPATH,
                 "frr-routing:ipv4", argv[idx_group]->arg, source_str);
 
        nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
@@ -7969,14 +7971,15 @@ DEFUN (interface_ip_igmp_query_interval,
                                      "true");
        } else {
                if (!yang_dnode_get_bool(pim_enable_dnode, "."))
-                       nb_cli_enqueue_change(vty, "./igmp-enable",
+                       nb_cli_enqueue_change(vty, "./enable",
                                              NB_OP_MODIFY, "true");
        }
 
        nb_cli_enqueue_change(vty, "./query-interval", NB_OP_MODIFY,
                              argv[3]->arg);
 
-       return nb_cli_apply_changes(vty, "./frr-igmp:igmp");
+       return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
+                                   "frr-routing:ipv4");
 }
 
 DEFUN (interface_no_ip_igmp_query_interval,
@@ -7990,7 +7993,8 @@ DEFUN (interface_no_ip_igmp_query_interval,
 {
        nb_cli_enqueue_change(vty, "./query-interval", NB_OP_DESTROY, NULL);
 
-       return nb_cli_apply_changes(vty, "./frr-igmp:igmp");
+       return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
+                                   "frr-routing:ipv4");
 }
 
 DEFUN (interface_ip_igmp_version,
@@ -8001,11 +8005,13 @@ DEFUN (interface_ip_igmp_version,
        "IGMP version\n"
        "IGMP version number\n")
 {
-       nb_cli_enqueue_change(vty, "./igmp-enable", NB_OP_MODIFY,
+       nb_cli_enqueue_change(vty, "./enable", NB_OP_MODIFY,
                              "true");
-       nb_cli_enqueue_change(vty, "./version", NB_OP_MODIFY, argv[3]->arg);
+       nb_cli_enqueue_change(vty, "./igmp-version", NB_OP_MODIFY,
+                             argv[3]->arg);
 
-       return nb_cli_apply_changes(vty, "./frr-igmp:igmp");
+       return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
+                                   "frr-routing:ipv4");
 }
 
 DEFUN (interface_no_ip_igmp_version,
@@ -8017,9 +8023,10 @@ DEFUN (interface_no_ip_igmp_version,
        "IGMP version\n"
        "IGMP version number\n")
 {
-       nb_cli_enqueue_change(vty, "./version", NB_OP_DESTROY, NULL);
+       nb_cli_enqueue_change(vty, "./igmp-version", NB_OP_DESTROY, NULL);
 
-       return nb_cli_apply_changes(vty, "./frr-igmp:igmp");
+       return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
+                                   "frr-routing:ipv4");
 }
 
 DEFUN (interface_ip_igmp_query_max_response_time,
@@ -8038,18 +8045,19 @@ DEFUN (interface_ip_igmp_query_max_response_time,
                                "frr-routing:ipv4");
 
        if (!pim_enable_dnode) {
-               nb_cli_enqueue_change(vty, "./igmp-enable", NB_OP_MODIFY,
+               nb_cli_enqueue_change(vty, "./enable", NB_OP_MODIFY,
                                      "true");
        } else {
                if (!yang_dnode_get_bool(pim_enable_dnode, "."))
-                       nb_cli_enqueue_change(vty, "./igmp-enable",
+                       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-igmp:igmp");
+       return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
+                                   "frr-routing:ipv4");
 }
 
 DEFUN (interface_no_ip_igmp_query_max_response_time,
@@ -8063,7 +8071,8 @@ DEFUN (interface_no_ip_igmp_query_max_response_time,
 {
        nb_cli_enqueue_change(vty, "./query-max-response-time", NB_OP_DESTROY,
                              NULL);
-       return nb_cli_apply_changes(vty, "./frr-igmp:igmp");
+       return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
+                                   "frr-routing:ipv4");
 }
 
 DEFUN_HIDDEN (interface_ip_igmp_query_max_response_time_dsec,
@@ -8081,18 +8090,19 @@ DEFUN_HIDDEN (interface_ip_igmp_query_max_response_time_dsec,
                                FRR_PIM_ENABLE_XPATH, VTY_CURR_XPATH,
                                "frr-routing:ipv4");
        if (!pim_enable_dnode) {
-               nb_cli_enqueue_change(vty, "./igmp-enable", NB_OP_MODIFY,
+               nb_cli_enqueue_change(vty, "./enable", NB_OP_MODIFY,
                                      "true");
        } else {
                if (!yang_dnode_get_bool(pim_enable_dnode, "."))
-                       nb_cli_enqueue_change(vty, "./igmp-enable",
+                       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-igmp:igmp");
+       return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
+                                   "frr-routing:ipv4");
 }
 
 DEFUN_HIDDEN (interface_no_ip_igmp_query_max_response_time_dsec,
@@ -8107,7 +8117,8 @@ DEFUN_HIDDEN (interface_no_ip_igmp_query_max_response_time_dsec,
        nb_cli_enqueue_change(vty, "./query-max-response-time", NB_OP_DESTROY,
                              NULL);
 
-       return nb_cli_apply_changes(vty, "./frr-igmp:igmp");
+       return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
+                                   "frr-routing:ipv4");
 }
 
 DEFUN (interface_ip_igmp_last_member_query_count,
@@ -8125,18 +8136,19 @@ DEFUN (interface_ip_igmp_last_member_query_count,
                                FRR_PIM_ENABLE_XPATH, VTY_CURR_XPATH,
                                "frr-routing:ipv4");
        if (!pim_enable_dnode) {
-               nb_cli_enqueue_change(vty, "./igmp-enable", NB_OP_MODIFY,
+               nb_cli_enqueue_change(vty, "./enable", NB_OP_MODIFY,
                                      "true");
        } else {
                if (!yang_dnode_get_bool(pim_enable_dnode, "."))
-                       nb_cli_enqueue_change(vty, "./igmp-enable",
+                       nb_cli_enqueue_change(vty, "./enable",
                                              NB_OP_MODIFY, "true");
        }
 
        nb_cli_enqueue_change(vty, "./robustness-variable", NB_OP_MODIFY,
                              argv[3]->arg);
 
-       return nb_cli_apply_changes(vty, "./frr-igmp:igmp");
+       return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
+                                   "frr-routing:ipv4");
 }
 
 DEFUN (interface_no_ip_igmp_last_member_query_count,
@@ -8151,7 +8163,8 @@ DEFUN (interface_no_ip_igmp_last_member_query_count,
        nb_cli_enqueue_change(vty, "./robustness-variable", NB_OP_DESTROY,
                              NULL);
 
-       return nb_cli_apply_changes(vty, "./frr-igmp:igmp");
+       return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
+                                   "frr-routing:ipv4");
 }
 
 DEFUN (interface_ip_igmp_last_member_query_interval,
@@ -8169,18 +8182,19 @@ DEFUN (interface_ip_igmp_last_member_query_interval,
                                FRR_PIM_ENABLE_XPATH, VTY_CURR_XPATH,
                                "frr-routing:ipv4");
        if (!pim_enable_dnode) {
-               nb_cli_enqueue_change(vty, "./igmp-enable", NB_OP_MODIFY,
+               nb_cli_enqueue_change(vty, "./enable", NB_OP_MODIFY,
                                      "true");
        } else {
                if (!yang_dnode_get_bool(pim_enable_dnode, "."))
-                       nb_cli_enqueue_change(vty, "./igmp-enable",
+                       nb_cli_enqueue_change(vty, "./enable",
                                              NB_OP_MODIFY, "true");
        }
 
        nb_cli_enqueue_change(vty, "./last-member-query-interval", NB_OP_MODIFY,
                              argv[3]->arg);
 
-       return nb_cli_apply_changes(vty, "./frr-igmp:igmp");
+       return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
+                                   "frr-routing:ipv4");
 }
 
 DEFUN (interface_no_ip_igmp_last_member_query_interval,
@@ -8195,7 +8209,8 @@ DEFUN (interface_no_ip_igmp_last_member_query_interval,
        nb_cli_enqueue_change(vty, "./last-member-query-interval",
                              NB_OP_DESTROY, NULL);
 
-       return nb_cli_apply_changes(vty, "./frr-igmp:igmp");
+       return nb_cli_apply_changes(vty, FRR_GMP_INTERFACE_XPATH,
+                                   "frr-routing:ipv4");
 }
 
 DEFUN (interface_ip_pim_drprio,
@@ -8394,10 +8409,12 @@ DEFUN_HIDDEN (interface_no_ip_pim_ssm,
        char igmp_if_xpath[XPATH_MAXLEN + 20];
 
        snprintf(igmp_if_xpath, sizeof(igmp_if_xpath),
-                "%s/frr-igmp:igmp", VTY_CURR_XPATH);
+                "%s/frr-gmp:gmp/address-family[address-family='%s']",
+                VTY_CURR_XPATH, "frr-routing:ipv4");
        igmp_enable_dnode = yang_dnode_getf(vty->candidate_config->dnode,
-                                           "%s/igmp-enable", igmp_if_xpath);
-
+                                           FRR_GMP_ENABLE_XPATH,
+                                           VTY_CURR_XPATH,
+                                           "frr-routing:ipv4");
        if (!igmp_enable_dnode) {
                nb_cli_enqueue_change(vty, igmp_if_xpath, NB_OP_DESTROY, NULL);
                nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
@@ -8427,9 +8444,12 @@ DEFUN_HIDDEN (interface_no_ip_pim_sm,
        char igmp_if_xpath[XPATH_MAXLEN + 20];
 
        snprintf(igmp_if_xpath, sizeof(igmp_if_xpath),
-                "%s/frr-igmp:igmp", VTY_CURR_XPATH);
-       igmp_enable_dnode = yang_dnode_getf(vty->candidate_config->dnode,
-                                           "%s/igmp-enable", igmp_if_xpath);
+                "%s/frr-gmp:gmp/address-family[address-family='%s']",
+                VTY_CURR_XPATH, "frr-routing:ipv4");
+       igmp_enable_dnode =
+               yang_dnode_getf(vty->candidate_config->dnode,
+                               FRR_GMP_ENABLE_XPATH, VTY_CURR_XPATH,
+                               "frr-routing:ipv4");
 
        if (!igmp_enable_dnode) {
                nb_cli_enqueue_change(vty, igmp_if_xpath, NB_OP_DESTROY, NULL);
@@ -8460,9 +8480,12 @@ DEFUN (interface_no_ip_pim,
        char igmp_if_xpath[XPATH_MAXLEN + 20];
 
        snprintf(igmp_if_xpath, sizeof(igmp_if_xpath),
-                "%s/frr-igmp:igmp", VTY_CURR_XPATH);
-       igmp_enable_dnode = yang_dnode_getf(vty->candidate_config->dnode,
-                                           "%s/igmp-enable", igmp_if_xpath);
+                "%s/frr-gmp:gmp/address-family[address-family='%s']",
+                VTY_CURR_XPATH, "frr-routing:ipv4");
+       igmp_enable_dnode =
+               yang_dnode_getf(vty->candidate_config->dnode,
+                               FRR_GMP_ENABLE_XPATH, VTY_CURR_XPATH,
+                               "frr-routing:ipv4");
 
        if (!igmp_enable_dnode) {
                nb_cli_enqueue_change(vty, igmp_if_xpath, NB_OP_DESTROY, NULL);
@@ -8587,7 +8610,8 @@ DEFUN (interface_ip_pim_hello,
 
        igmp_enable_dnode =
                yang_dnode_getf(vty->candidate_config->dnode,
-                               "%s/frr-igmp:igmp/igmp-enable", VTY_CURR_XPATH);
+                               FRR_GMP_ENABLE_XPATH, VTY_CURR_XPATH,
+                               "frr-routing:ipv4");
        if (!igmp_enable_dnode) {
                nb_cli_enqueue_change(vty, "./pim-enable", NB_OP_MODIFY,
                                      "true");
@@ -9305,7 +9329,8 @@ DEFPY (ip_pim_bfd,
 
        igmp_enable_dnode =
                yang_dnode_getf(vty->candidate_config->dnode,
-                               "%s/frr-igmp:igmp/igmp-enable", VTY_CURR_XPATH);
+                               FRR_GMP_ENABLE_XPATH, VTY_CURR_XPATH,
+                               "frr-routing:ipv4");
        if (!igmp_enable_dnode)
                nb_cli_enqueue_change(vty, "./pim-enable", NB_OP_MODIFY,
                                      "true");
@@ -9366,7 +9391,8 @@ DEFUN (ip_pim_bsm,
 
        igmp_enable_dnode =
                yang_dnode_getf(vty->candidate_config->dnode,
-                               "%s/frr-igmp:igmp/igmp-enable", VTY_CURR_XPATH);
+                               FRR_GMP_ENABLE_XPATH, VTY_CURR_XPATH,
+                               "frr-routing:ipv4");
        if (!igmp_enable_dnode)
                nb_cli_enqueue_change(vty, "./pim-enable", NB_OP_MODIFY,
                                      "true");
@@ -9407,7 +9433,8 @@ DEFUN (ip_pim_ucast_bsm,
 
        igmp_enable_dnode =
                yang_dnode_getf(vty->candidate_config->dnode,
-                               "%s/frr-igmp:igmp/igmp-enable", VTY_CURR_XPATH);
+                               FRR_GMP_ENABLE_XPATH, VTY_CURR_XPATH,
+                               "frr-routing:ipv4");
        if (!igmp_enable_dnode)
                nb_cli_enqueue_change(vty, "./pim-enable", NB_OP_MODIFY,
                                      "true");
@@ -9469,7 +9496,8 @@ DEFUN_HIDDEN (
 
        igmp_enable_dnode =
                yang_dnode_getf(vty->candidate_config->dnode,
-                               "%s/frr-igmp:igmp/igmp-enable", VTY_CURR_XPATH);
+                               FRR_GMP_ENABLE_XPATH, VTY_CURR_XPATH,
+                               "frr-routing:ipv4");
        if (!igmp_enable_dnode)
                nb_cli_enqueue_change(vty, "./pim-enable", NB_OP_MODIFY,
                                      "true");
index 780595ca11fb979fb3e4344a43c2b79bec883855..eb1cedd90ddafa2b948034fbd0fe1365764e198e 100644 (file)
@@ -81,7 +81,7 @@ static const struct frr_yang_module_info *const pimd_yang_modules[] = {
        &frr_routing_info,
        &frr_pim_info,
        &frr_pim_rp_info,
-       &frr_igmp_info,
+       &frr_gmp_info,
 };
 
 FRR_DAEMON_INFO(pimd, PIM, .vty_port = PIMD_VTY_PORT,
index 3542d804a8ea5b04ca0bc3ec427e5da4080b93d6..86dd8c490c8e6aa02111ba738f097f130b27b3b9 100644 (file)
@@ -366,65 +366,65 @@ const struct frr_yang_module_info frr_pim_rp_info = {
 };
 
 /* clang-format off */
-const struct frr_yang_module_info frr_igmp_info = {
-       .name = "frr-igmp",
+const struct frr_yang_module_info frr_gmp_info = {
+       .name = "frr-gmp",
        .nodes = {
                {
-                       .xpath = "/frr-interface:lib/interface/frr-igmp:igmp",
+                       .xpath = "/frr-interface:lib/interface/frr-gmp:gmp/address-family",
                        .cbs = {
-                               .create = lib_interface_igmp_create,
-                               .destroy = lib_interface_igmp_destroy,
+                               .create = lib_interface_gmp_address_family_create,
+                               .destroy = lib_interface_gmp_address_family_destroy,
                        }
                },
                {
-                       .xpath = "/frr-interface:lib/interface/frr-igmp:igmp/igmp-enable",
+                       .xpath = "/frr-interface:lib/interface/frr-gmp:gmp/address-family/enable",
                        .cbs = {
-                               .modify = lib_interface_igmp_igmp_enable_modify,
+                               .modify = lib_interface_gmp_address_family_enable_modify,
                        }
                },
                {
-                       .xpath = "/frr-interface:lib/interface/frr-igmp:igmp/version",
+                       .xpath = "/frr-interface:lib/interface/frr-gmp:gmp/address-family/igmp-version",
                        .cbs = {
-                               .modify = lib_interface_igmp_version_modify,
-                               .destroy = lib_interface_igmp_version_destroy,
+                               .modify = lib_interface_gmp_address_family_igmp_version_modify,
+                               .destroy = lib_interface_gmp_address_family_igmp_version_destroy,
                        }
                },
                {
-                       .xpath = "/frr-interface:lib/interface/frr-igmp:igmp/query-interval",
+                       .xpath = "/frr-interface:lib/interface/frr-gmp:gmp/address-family/mld-version",
                        .cbs = {
-                               .modify = lib_interface_igmp_query_interval_modify,
+                               .modify = lib_interface_gmp_address_family_mld_version_modify,
+                               .destroy = lib_interface_gmp_address_family_mld_version_destroy,
                        }
                },
                {
-                       .xpath = "/frr-interface:lib/interface/frr-igmp:igmp/query-max-response-time",
+                       .xpath = "/frr-interface:lib/interface/frr-gmp:gmp/address-family/query-interval",
                        .cbs = {
-                               .modify = lib_interface_igmp_query_max_response_time_modify,
+                               .modify = lib_interface_gmp_address_family_query_interval_modify,
                        }
                },
                {
-                       .xpath = "/frr-interface:lib/interface/frr-igmp:igmp/last-member-query-interval",
+                       .xpath = "/frr-interface:lib/interface/frr-gmp:gmp/address-family/query-max-response-time",
                        .cbs = {
-                               .modify = lib_interface_igmp_last_member_query_interval_modify,
+                               .modify = lib_interface_gmp_address_family_query_max_response_time_modify,
                        }
                },
                {
-                       .xpath = "/frr-interface:lib/interface/frr-igmp:igmp/robustness-variable",
+                       .xpath = "/frr-interface:lib/interface/frr-gmp:gmp/address-family/last-member-query-interval",
                        .cbs = {
-                               .modify = lib_interface_igmp_robustness_variable_modify,
+                               .modify = lib_interface_gmp_address_family_last_member_query_interval_modify,
                        }
                },
                {
-                       .xpath = "/frr-interface:lib/interface/frr-igmp:igmp/address-family",
+                       .xpath = "/frr-interface:lib/interface/frr-gmp:gmp/address-family/robustness-variable",
                        .cbs = {
-                               .create = lib_interface_igmp_address_family_create,
-                               .destroy = lib_interface_igmp_address_family_destroy,
+                               .modify = lib_interface_gmp_address_family_robustness_variable_modify,
                        }
                },
                {
-                       .xpath = "/frr-interface:lib/interface/frr-igmp:igmp/address-family/static-group",
+                       .xpath = "/frr-interface:lib/interface/frr-gmp:gmp/address-family/static-group",
                        .cbs = {
-                               .create = lib_interface_igmp_address_family_static_group_create,
-                               .destroy = lib_interface_igmp_address_family_static_group_destroy,
+                               .create = lib_interface_gmp_address_family_static_group_create,
+                               .destroy = lib_interface_gmp_address_family_static_group_destroy,
                        }
                },
                {
@@ -432,3 +432,4 @@ const struct frr_yang_module_info frr_igmp_info = {
                },
        }
 };
+
index 2e528af23f48828d2770f7a7f0cbe3a408ffe867..72c96d7d7309fb5af9e00fd94290afce47ba8154 100644 (file)
@@ -22,7 +22,7 @@
 
 extern const struct frr_yang_module_info frr_pim_info;
 extern const struct frr_yang_module_info frr_pim_rp_info;
-extern const struct frr_yang_module_info frr_igmp_info;
+extern const struct frr_yang_module_info frr_gmp_info;
 
 /* frr-pim prototypes*/
 int routing_control_plane_protocols_control_plane_protocol_pim_address_family_ecmp_modify(
@@ -163,25 +163,33 @@ int routing_control_plane_protocols_control_plane_protocol_pim_address_family_rp
 int routing_control_plane_protocols_control_plane_protocol_pim_address_family_rp_static_rp_rp_list_prefix_list_destroy(
        struct nb_cb_destroy_args *args);
 
-/* frr-igmp prototypes*/
-int lib_interface_igmp_create(struct nb_cb_create_args *args);
-int lib_interface_igmp_destroy(struct nb_cb_destroy_args *args);
-int lib_interface_igmp_igmp_enable_modify(struct nb_cb_modify_args *args);
-int lib_interface_igmp_version_modify(struct nb_cb_modify_args *args);
-int lib_interface_igmp_version_destroy(struct nb_cb_destroy_args *args);
-int lib_interface_igmp_query_interval_modify(struct nb_cb_modify_args *args);
-int lib_interface_igmp_query_max_response_time_modify(
-       struct nb_cb_modify_args *args);
-int lib_interface_igmp_last_member_query_interval_modify(
-       struct nb_cb_modify_args *args);
-int lib_interface_igmp_robustness_variable_modify(
-       struct nb_cb_modify_args *args);
-int lib_interface_igmp_address_family_create(struct nb_cb_create_args *args);
-int lib_interface_igmp_address_family_destroy(struct nb_cb_destroy_args *args);
-int lib_interface_igmp_address_family_static_group_create(
+/* frr-gmp prototypes*/
+int lib_interface_gmp_address_family_create(
        struct nb_cb_create_args *args);
-int lib_interface_igmp_address_family_static_group_destroy(
+int lib_interface_gmp_address_family_destroy(
        struct nb_cb_destroy_args *args);
+int lib_interface_gmp_address_family_enable_modify(
+       struct nb_cb_modify_args *args);
+int lib_interface_gmp_address_family_igmp_version_modify(
+       struct nb_cb_modify_args *args);
+int lib_interface_gmp_address_family_igmp_version_destroy(
+       struct nb_cb_destroy_args *args);
+int lib_interface_gmp_address_family_mld_version_modify(
+       struct nb_cb_modify_args *args);
+int lib_interface_gmp_address_family_mld_version_destroy(
+       struct nb_cb_destroy_args *args);
+int lib_interface_gmp_address_family_query_interval_modify(
+       struct nb_cb_modify_args *args);
+int lib_interface_gmp_address_family_query_max_response_time_modify(
+               struct nb_cb_modify_args *args);
+int lib_interface_gmp_address_family_last_member_query_interval_modify(
+               struct nb_cb_modify_args *args);
+int lib_interface_gmp_address_family_robustness_variable_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(
+               struct nb_cb_destroy_args *args);
 
 /*
  * Callback registered with routing_nb lib to validate only
@@ -208,8 +216,12 @@ int routing_control_plane_protocols_name_validate(
        "control-plane-protocol[type='%s'][name='%s'][vrf='%s']/"       \
        "frr-pim:pim/address-family[address-family='%s']/"              \
        "frr-pim-rp:rp/static-rp/rp-list[rp-address='%s']"
-#define FRR_IGMP_JOIN_XPATH                                             \
-       "./frr-igmp:igmp/address-family[address-family='%s']/"          \
+#define FRR_GMP_INTERFACE_XPATH                                         \
+       "./frr-gmp:gmp/address-family[address-family='%s']"
+#define FRR_GMP_ENABLE_XPATH                                            \
+       "%s/frr-gmp:gmp/address-family[address-family='%s']/enable"
+#define FRR_GMP_JOIN_XPATH                                              \
+       "./frr-gmp:gmp/address-family[address-family='%s']/"            \
        "static-group[group-addr='%s'][source-addr='%s']"
 #define FRR_PIM_MSDP_XPATH FRR_PIM_VRF_XPATH "/msdp"
 
index 85cb0d3438a0817f2db32c42942d089c06f2d83c..3766157295c3923b84784067e203deed27997ae3 100644 (file)
@@ -337,8 +337,9 @@ static bool is_pim_interface(const struct lyd_node *dnode)
                yang_dnode_getf(dnode,
                                "%s/frr-pim:pim/address-family[address-family='%s']/pim-enable",
                                if_xpath, "frr-routing:ipv4");
-       igmp_enable_dnode = yang_dnode_getf(
-               dnode, "%s/frr-igmp:igmp/igmp-enable", if_xpath);
+       igmp_enable_dnode = yang_dnode_getf(dnode,
+                       "%s/frr-gmp:gmp/address-family[address-family='%s']/enable",
+                       if_xpath, "frr-routing:ipv4");
 
        if (((pim_enable_dnode) &&
             (yang_dnode_get_bool(pim_enable_dnode, "."))) ||
@@ -2512,9 +2513,9 @@ int routing_control_plane_protocols_control_plane_protocol_pim_address_family_rp
 }
 
 /*
- * XPath: /frr-interface:lib/interface/frr-igmp:igmp
+ * XPath: /frr-interface:lib/interface/frr-gmp:gmp/address-family
  */
-int lib_interface_igmp_create(struct nb_cb_create_args *args)
+int lib_interface_gmp_address_family_create(struct nb_cb_create_args *args)
 {
        switch (args->event) {
        case NB_EV_VALIDATE:
@@ -2527,7 +2528,7 @@ int lib_interface_igmp_create(struct nb_cb_create_args *args)
        return NB_OK;
 }
 
-int lib_interface_igmp_destroy(struct nb_cb_destroy_args *args)
+int lib_interface_gmp_address_family_destroy(struct nb_cb_destroy_args *args)
 {
        struct interface *ifp;
        struct pim_interface *pim_ifp;
@@ -2558,9 +2559,10 @@ int lib_interface_igmp_destroy(struct nb_cb_destroy_args *args)
 }
 
 /*
- * XPath: /frr-interface:lib/interface/frr-igmp:igmp/igmp-enable
+ * XPath: /frr-interface:lib/interface/frr-gmp:gmp/address-family/enable
  */
-int lib_interface_igmp_igmp_enable_modify(struct nb_cb_modify_args *args)
+int lib_interface_gmp_address_family_enable_modify(
+       struct nb_cb_modify_args *args)
 {
        struct interface *ifp;
        bool igmp_enable;
@@ -2614,9 +2616,10 @@ int lib_interface_igmp_igmp_enable_modify(struct nb_cb_modify_args *args)
 }
 
 /*
- * XPath: /frr-interface:lib/interface/frr-igmp:igmp/version
+ * XPath: /frr-interface:lib/interface/frr-gmp:gmp/address-family/igmp-version
  */
-int lib_interface_igmp_version_modify(struct nb_cb_modify_args *args)
+int lib_interface_gmp_address_family_igmp_version_modify(
+       struct nb_cb_modify_args *args)
 {
        struct interface *ifp;
        struct pim_interface *pim_ifp;
@@ -2650,7 +2653,8 @@ int lib_interface_igmp_version_modify(struct nb_cb_modify_args *args)
        return NB_OK;
 }
 
-int lib_interface_igmp_version_destroy(struct nb_cb_destroy_args *args)
+int lib_interface_gmp_address_family_igmp_version_destroy(
+       struct nb_cb_destroy_args *args)
 {
        struct interface *ifp;
        struct pim_interface *pim_ifp;
@@ -2671,9 +2675,41 @@ int lib_interface_igmp_version_destroy(struct nb_cb_destroy_args *args)
 }
 
 /*
- * XPath: /frr-interface:lib/interface/frr-igmp:igmp/query-interval
+ * XPath: /frr-interface:lib/interface/frr-gmp:gmp/address-family/mld-version
+ */
+int lib_interface_gmp_address_family_mld_version_modify(
+       struct nb_cb_modify_args *args)
+{
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+       case NB_EV_APPLY:
+               break;
+       }
+
+       return NB_OK;
+}
+
+int lib_interface_gmp_address_family_mld_version_destroy(
+       struct nb_cb_destroy_args *args)
+{
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+       case NB_EV_PREPARE:
+       case NB_EV_ABORT:
+       case NB_EV_APPLY:
+               break;
+       }
+
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/frr-gmp:gmp/address-family/query-interval
  */
-int lib_interface_igmp_query_interval_modify(struct nb_cb_modify_args *args)
+int lib_interface_gmp_address_family_query_interval_modify(
+       struct nb_cb_modify_args *args)
 {
        struct interface *ifp;
        int query_interval;
@@ -2693,9 +2729,9 @@ int lib_interface_igmp_query_interval_modify(struct nb_cb_modify_args *args)
 }
 
 /*
- * XPath: /frr-interface:lib/interface/frr-igmp:igmp/query-max-response-time
+ * XPath: /frr-interface:lib/interface/frr-gmp:gmp/address-family/query-max-response-time
  */
-int lib_interface_igmp_query_max_response_time_modify(
+int lib_interface_gmp_address_family_query_max_response_time_modify(
        struct nb_cb_modify_args *args)
 {
        struct interface *ifp;
@@ -2718,9 +2754,9 @@ int lib_interface_igmp_query_max_response_time_modify(
 }
 
 /*
- * XPath: /frr-interface:lib/interface/frr-igmp:igmp/last-member-query-interval
+ * XPath: /frr-interface:lib/interface/frr-gmp:gmp/address-family/last-member-query-interval
  */
-int lib_interface_igmp_last_member_query_interval_modify(
+int lib_interface_gmp_address_family_last_member_query_interval_modify(
        struct nb_cb_modify_args *args)
 {
        struct interface *ifp;
@@ -2747,9 +2783,9 @@ int lib_interface_igmp_last_member_query_interval_modify(
 }
 
 /*
- * XPath: /frr-interface:lib/interface/frr-igmp:igmp/robustness-variable
+ * XPath: /frr-interface:lib/interface/frr-gmp:gmp/address-family/robustness-variable
  */
-int lib_interface_igmp_robustness_variable_modify(
+int lib_interface_gmp_address_family_robustness_variable_modify(
        struct nb_cb_modify_args *args)
 {
        struct interface *ifp;
@@ -2775,38 +2811,9 @@ int lib_interface_igmp_robustness_variable_modify(
 }
 
 /*
- * XPath: /frr-interface:lib/interface/frr-igmp:igmp/address-family
- */
-int lib_interface_igmp_address_family_create(struct nb_cb_create_args *args)
-{
-       switch (args->event) {
-       case NB_EV_VALIDATE:
-       case NB_EV_PREPARE:
-       case NB_EV_ABORT:
-       case NB_EV_APPLY:
-               break;
-       }
-
-       return NB_OK;
-}
-
-int lib_interface_igmp_address_family_destroy(struct nb_cb_destroy_args *args)
-{
-       switch (args->event) {
-       case NB_EV_VALIDATE:
-       case NB_EV_PREPARE:
-       case NB_EV_ABORT:
-       case NB_EV_APPLY:
-               break;
-       }
-
-       return NB_OK;
-}
-
-/*
- * XPath: /frr-interface:lib/interface/frr-igmp:igmp/address-family/static-group
+ * XPath: /frr-interface:lib/interface/frr-gmp:gmp/address-family/static-group
  */
-int lib_interface_igmp_address_family_static_group_create(
+int lib_interface_gmp_address_family_static_group_create(
        struct nb_cb_create_args *args)
 {
        struct interface *ifp;
@@ -2847,7 +2854,7 @@ int lib_interface_igmp_address_family_static_group_create(
        return NB_OK;
 }
 
-int lib_interface_igmp_address_family_static_group_destroy(
+int lib_interface_gmp_address_family_static_group_destroy(
        struct nb_cb_destroy_args *args)
 {
        struct interface *ifp;
index c5a8d2052031472a3ad7d59887f736ad4363cb0c..6c267f290cedd7110aefa1fa989873e4f4d42585 100644 (file)
@@ -76,7 +76,7 @@ pimd_pimd_SOURCES = \
 nodist_pimd_pimd_SOURCES = \
        yang/frr-pim.yang.c \
        yang/frr-pim-rp.yang.c \
-       yang/frr-igmp.yang.c \
+       yang/frr-gmp.yang.c \
        # end
 
 pimd_pim6d_SOURCES = \
diff --git a/yang/frr-gmp.yang b/yang/frr-gmp.yang
new file mode 100644 (file)
index 0000000..f48fcd4
--- /dev/null
@@ -0,0 +1,181 @@
+module frr-gmp {
+  yang-version "1.1";
+  namespace "http://frrouting.org/yang/gmp";
+
+  prefix frr-gmp;
+
+  import frr-routing {
+    prefix "frr-rt";
+  }
+
+  import ietf-routing-types {
+    prefix "rt-types";
+  }
+
+  import ietf-inet-types {
+    prefix "inet";
+  }
+
+  import frr-interface {
+    prefix frr-interface;
+  }
+
+  organization
+    "FRRouting";
+
+  contact
+    "FRR Users List:       <mailto:frog@lists.frrouting.org>
+     FRR Development List: <mailto:dev@lists.frrouting.org>";
+
+  description
+    "This module defines a model for managing FRR pimd daemon.
+
+     Copyright 2020 FRRouting
+
+     Redistribution and use in source and binary forms, with or without
+     modification, are permitted provided that the following conditions
+     are met:
+
+     1. Redistributions of source code must retain the above copyright notice,
+     this list of conditions and the following disclaimer.
+
+     2. Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in the
+     documentation and/or other materials provided with the distribution.
+
+     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+     \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+     LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+     A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+     HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+     DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+     THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+     OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.";
+
+  revision 2021-11-22 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 2236: IGMP v2.
+       RFC 3376: IGMP v3.
+       RFC 2710: MLD.
+       RFC 3810: MLD v2.";
+  }
+
+  grouping interface-config-attributes {
+    description
+      "Configuration IGMP/MLD attributes applied to the interface level.";
+
+    leaf enable {
+      type boolean;
+      default "false";
+      description
+        "Enable IGMP/MLD flag on the interface.";
+    }
+
+    leaf igmp-version {
+      when "../frr-gmp:address-family = 'frr-rt:ipv4'" {
+        description
+          "Only applicable to IPv4 address family.";
+      }
+      type uint8 {
+        range "2..3";
+      }
+      description
+        "IGMP version.";
+    }
+
+    leaf mld-version {
+      when "../frr-gmp:address-family = 'frr-rt:ipv6'" {
+        description
+          "Only applicable to IPv6 address family.";
+      }
+      type uint8 {
+        range "1..2";
+      }
+      description
+        "MLD version.";
+    }
+
+    leaf query-interval {
+      type uint16 {
+        range "1..max";
+      }
+      units seconds;
+      must ". * 10 >= ../query-max-response-time";
+      default "125";
+      description
+        "The Query Interval is the interval between General Queries
+         sent by the Querier.";
+    }
+
+    leaf query-max-response-time {
+      type uint16 {
+        range "1..max";
+      }
+      units deciseconds;
+      must ". <= ../query-interval * 10";
+      default "100";
+      description
+        "Query maximum response time specifies the maximum time
+         allowed before sending a responding report.";
+    }
+
+    leaf last-member-query-interval {
+      type uint16 {
+        range "1..max";
+      }
+      units deciseconds;
+      default "10";
+      description
+        "Last Member Query Interval, which may be tuned to modify
+         the leave latency of the network.";
+    }
+
+    leaf robustness-variable {
+      type uint8 {
+        range "1..max";
+      }
+      default "2";
+      description
+        "Querier's Robustness Variable allows tuning for the
+         expected packet loss on a network.";
+    }
+
+    list static-group {
+      key "group-addr source-addr";
+      description
+        "A static multicast route, (*,G) or (S,G).
+         The version of IGMP must be 3 to support (S,G).";
+
+      leaf group-addr {
+        type rt-types:ip-multicast-group-address;
+        description
+          "Multicast group address.";
+      }
+      leaf source-addr {
+        type inet:ip-address;
+        description
+          "Multicast source address.";
+      }
+    }
+  } // interface-config-attributes
+
+  /*
+   * Per-interface configuration data
+   */
+  augment "/frr-interface:lib/frr-interface:interface" {
+    container gmp {
+      list address-family {
+        key "address-family";
+        description
+          "Each list entry for one address family.";
+        uses frr-rt:address-family;
+        uses interface-config-attributes;
+      } //address-family
+    }
+  }
+}
diff --git a/yang/frr-igmp.yang b/yang/frr-igmp.yang
deleted file mode 100644 (file)
index 8d151e4..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-module frr-igmp {
-  yang-version "1.1";
-  namespace "http://frrouting.org/yang/igmp";
-
-  prefix frr-igmp;
-
-  import frr-routing {
-    prefix "frr-rt";
-  }
-
-  import ietf-routing-types {
-    prefix "rt-types";
-  }
-
-  import ietf-inet-types {
-    prefix "inet";
-  }
-
-  import frr-interface {
-    prefix frr-interface;
-  }
-
-  organization
-    "FRRouting";
-
-  contact
-    "FRR Users List:       <mailto:frog@lists.frrouting.org>
-     FRR Development List: <mailto:dev@lists.frrouting.org>";
-
-  description
-    "This module defines a model for managing FRR pimd daemon.
-
-     Copyright 2020 FRRouting
-
-     Redistribution and use in source and binary forms, with or without
-     modification, are permitted provided that the following conditions
-     are met:
-
-     1. Redistributions of source code must retain the above copyright notice,
-     this list of conditions and the following disclaimer.
-
-     2. Redistributions in binary form must reproduce the above copyright
-     notice, this list of conditions and the following disclaimer in the
-     documentation and/or other materials provided with the distribution.
-
-     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-     \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-     LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-     A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-     HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-     DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-     THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-     OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.";
-
-  revision 2019-11-06 {
-    description
-      "Initial revision.";
-    reference
-      "RFC 2236: IGMP v2.
-       RFC 3376: IGMP v3.";
-  }
-
-  grouping interface-config-attributes {
-    description
-      "Configuration attributes applied to the interface level.";
-
-    leaf igmp-enable {
-      type boolean;
-      default "false";
-      description
-        "Enable IGMP flag on the interface.";
-    }
-
-    leaf version {
-      type uint8 {
-        range "2..3";
-      }
-      description
-        "IGMP version.";
-    }
-
-    leaf query-interval {
-      type uint16 {
-        range "1..max";
-      }
-      units seconds;
-      must ". * 10 >= ../query-max-response-time";
-      default "125";
-      description
-        "The Query Interval is the interval between General Queries
-         sent by the Querier.";
-    }
-
-    leaf query-max-response-time {
-      type uint16 {
-        range "1..max";
-      }
-      units deciseconds;
-      must ". <= ../query-interval * 10";
-      default "100";
-      description
-        "Query maximum response time specifies the maximum time
-         allowed before sending a responding report.";
-    }
-
-    leaf last-member-query-interval {
-      type uint16 {
-        range "1..max";
-      }
-      units deciseconds;
-      default "10";
-      description
-        "Last Member Query Interval, which may be tuned to modify
-         the leave latency of the network.";
-    }
-
-    leaf robustness-variable {
-      type uint8 {
-        range "1..max";
-      }
-      default "2";
-      description
-        "Querier's Robustness Variable allows tuning for the
-         expected packet loss on a network.";
-    }
-  }
-
-  grouping per-af-interface-config-attributes {
-    description
-      "Configuration attributes applied to the interface level per address family.";
-
-    list static-group {
-      key "group-addr source-addr";
-      description
-        "A static multicast route, (*,G) or (S,G).
-         The version of IGMP must be 3 to support (S,G).";
-
-      leaf group-addr {
-        type rt-types:ip-multicast-group-address;
-        description
-          "Multicast group address.";
-      }
-      leaf source-addr {
-        type inet:ip-address;
-        description
-          "Multicast source address.";
-      }
-    }
-
-  } // per-af-interface-config-attributes
-
-  /*
-   * Per-interface configuration data
-   */
-  augment "/frr-interface:lib/frr-interface:interface" {
-    container igmp {
-      presence
-        "Configure IGMP on an interface.";
-      uses interface-config-attributes;
-      list address-family {
-        key "address-family";
-        description
-          "Each list entry for one address family.";
-        uses frr-rt:address-family;
-        uses per-af-interface-config-attributes;
-
-        } //address-family
-    }
-  }
-}
index 828ebd908692a1c8ba8659e12bbd787da244cbf7..80028fcb18294bebd03dca35e7d1319097c8a61c 100644 (file)
@@ -70,7 +70,7 @@ dist_yangmodels_DATA += yang/frr-zebra.yang
 endif
 
 if PIMD
-dist_yangmodels_DATA += yang/frr-igmp.yang
+dist_yangmodels_DATA += yang/frr-gmp.yang
 dist_yangmodels_DATA += yang/frr-pim.yang
 dist_yangmodels_DATA += yang/frr-pim-rp.yang
 endif