diff options
Diffstat (limited to 'pimd/pim_nb_config.c')
| -rw-r--r-- | pimd/pim_nb_config.c | 98 |
1 files changed, 44 insertions, 54 deletions
diff --git a/pimd/pim_nb_config.c b/pimd/pim_nb_config.c index 27cac0c1a7..21f57e2d11 100644 --- a/pimd/pim_nb_config.c +++ b/pimd/pim_nb_config.c @@ -34,6 +34,7 @@ #include "pim_util.h" #include "log.h" #include "lib_errors.h" +#include "pim_util.h" #if PIM_IPV == 6 #define pim6_msdp_err(funcname, argtype) \ @@ -256,21 +257,17 @@ static int pim_ssm_cmd_worker(struct pim_instance *pim, const char *plist, return ret; } -static int pim_rp_cmd_worker(struct pim_instance *pim, - struct in_addr rp_addr, - struct prefix group, const char *plist, - char *errmsg, size_t errmsg_len) +static int pim_rp_cmd_worker(struct pim_instance *pim, pim_addr rp_addr, + struct prefix group, const char *plist, + char *errmsg, size_t errmsg_len) { - char rp_str[INET_ADDRSTRLEN]; int result; - inet_ntop(AF_INET, &rp_addr, rp_str, sizeof(rp_str)); - result = pim_rp_new(pim, rp_addr, group, plist, RP_SRC_STATIC); if (result == PIM_RP_NO_PATH) { - snprintf(errmsg, errmsg_len, - "No Path to RP address specified: %s", rp_str); + snprintfrr(errmsg, errmsg_len, + "No Path to RP address specified: %pPA", &rp_addr); return NB_ERR_INCONSISTENCY; } @@ -295,16 +292,13 @@ static int pim_rp_cmd_worker(struct pim_instance *pim, return NB_OK; } -static int pim_no_rp_cmd_worker(struct pim_instance *pim, - struct in_addr rp_addr, struct prefix group, - const char *plist, +static int pim_no_rp_cmd_worker(struct pim_instance *pim, pim_addr rp_addr, + struct prefix group, const char *plist, char *errmsg, size_t errmsg_len) { - char rp_str[INET_ADDRSTRLEN]; char group_str[PREFIX2STR_BUFFER]; int result; - inet_ntop(AF_INET, &rp_addr, rp_str, sizeof(rp_str)); prefix2str(&group, group_str, sizeof(group_str)); result = pim_rp_del(pim, rp_addr, group, plist, RP_SRC_STATIC); @@ -316,8 +310,8 @@ static int pim_no_rp_cmd_worker(struct pim_instance *pim, } if (result == PIM_RP_BAD_ADDRESS) { - snprintf(errmsg, errmsg_len, - "Bad RP address specified: %s", rp_str); + snprintfrr(errmsg, errmsg_len, "Bad RP address specified: %pPA", + &rp_addr); return NB_ERR_INCONSISTENCY; } @@ -2340,7 +2334,7 @@ int routing_control_plane_protocols_control_plane_protocol_pim_address_family_rp struct vrf *vrf; struct pim_instance *pim; struct prefix group; - struct ipaddr rp_addr; + pim_addr rp_addr; const char *plist; int result = 0; @@ -2352,31 +2346,30 @@ int routing_control_plane_protocols_control_plane_protocol_pim_address_family_rp case NB_EV_APPLY: vrf = nb_running_get_entry(args->dnode, NULL, true); pim = vrf->info; - yang_dnode_get_ip(&rp_addr, args->dnode, "./rp-address"); + yang_dnode_get_pimaddr(&rp_addr, args->dnode, "./rp-address"); if (yang_dnode_get(args->dnode, "./group-list")) { - yang_dnode_get_ipv4p(&group, args->dnode, - "./group-list"); - apply_mask_ipv4((struct prefix_ipv4 *)&group); - result = pim_no_rp_cmd_worker(pim, rp_addr.ip._v4_addr, - group, NULL, args->errmsg, - args->errmsg_len); + yang_dnode_get_prefix(&group, args->dnode, + "./group-list"); + apply_mask(&group); + result = pim_no_rp_cmd_worker(pim, rp_addr, group, NULL, + args->errmsg, + args->errmsg_len); } else if (yang_dnode_get(args->dnode, "./prefix-list")) { plist = yang_dnode_get_string(args->dnode, "./prefix-list"); - if (!str2prefix("224.0.0.0/4", &group)) { + if (!pim_get_all_mcast_group(&group)) { flog_err( EC_LIB_DEVELOPMENT, "Unable to convert 224.0.0.0/4 to prefix"); return NB_ERR_INCONSISTENCY; } - result = pim_no_rp_cmd_worker(pim, rp_addr.ip._v4_addr, - group, plist, - args->errmsg, - args->errmsg_len); + result = pim_no_rp_cmd_worker(pim, rp_addr, group, + plist, args->errmsg, + args->errmsg_len); } if (result) @@ -2396,7 +2389,7 @@ int routing_control_plane_protocols_control_plane_protocol_pim_address_family_rp struct vrf *vrf; struct pim_instance *pim; struct prefix group; - struct ipaddr rp_addr; + pim_addr rp_addr; switch (args->event) { case NB_EV_VALIDATE: @@ -2406,12 +2399,11 @@ int routing_control_plane_protocols_control_plane_protocol_pim_address_family_rp case NB_EV_APPLY: vrf = nb_running_get_entry(args->dnode, NULL, true); pim = vrf->info; - yang_dnode_get_ip(&rp_addr, args->dnode, "../rp-address"); - yang_dnode_get_ipv4p(&group, args->dnode, NULL); - apply_mask_ipv4((struct prefix_ipv4 *)&group); - - return pim_rp_cmd_worker(pim, rp_addr.ip._v4_addr, group, - NULL, args->errmsg, args->errmsg_len); + yang_dnode_get_pimaddr(&rp_addr, args->dnode, "../rp-address"); + yang_dnode_get_prefix(&group, args->dnode, NULL); + apply_mask(&group); + return pim_rp_cmd_worker(pim, rp_addr, group, NULL, + args->errmsg, args->errmsg_len); } return NB_OK; @@ -2423,7 +2415,7 @@ int routing_control_plane_protocols_control_plane_protocol_pim_address_family_rp struct vrf *vrf; struct pim_instance *pim; struct prefix group; - struct ipaddr rp_addr; + pim_addr rp_addr; switch (args->event) { case NB_EV_VALIDATE: @@ -2433,13 +2425,12 @@ int routing_control_plane_protocols_control_plane_protocol_pim_address_family_rp case NB_EV_APPLY: vrf = nb_running_get_entry(args->dnode, NULL, true); pim = vrf->info; - yang_dnode_get_ip(&rp_addr, args->dnode, "../rp-address"); - yang_dnode_get_ipv4p(&group, args->dnode, NULL); - apply_mask_ipv4((struct prefix_ipv4 *)&group); + yang_dnode_get_pimaddr(&rp_addr, args->dnode, "../rp-address"); + yang_dnode_get_prefix(&group, args->dnode, NULL); + apply_mask(&group); - return pim_no_rp_cmd_worker(pim, rp_addr.ip._v4_addr, group, - NULL, args->errmsg, - args->errmsg_len); + return pim_no_rp_cmd_worker(pim, rp_addr, group, NULL, + args->errmsg, args->errmsg_len); } return NB_OK; @@ -2454,7 +2445,7 @@ int routing_control_plane_protocols_control_plane_protocol_pim_address_family_rp struct vrf *vrf; struct pim_instance *pim; struct prefix group; - struct ipaddr rp_addr; + pim_addr rp_addr; const char *plist; switch (args->event) { @@ -2466,14 +2457,14 @@ int routing_control_plane_protocols_control_plane_protocol_pim_address_family_rp vrf = nb_running_get_entry(args->dnode, NULL, true); pim = vrf->info; plist = yang_dnode_get_string(args->dnode, NULL); - yang_dnode_get_ip(&rp_addr, args->dnode, "../rp-address"); - if (!str2prefix("224.0.0.0/4", &group)) { + yang_dnode_get_pimaddr(&rp_addr, args->dnode, "../rp-address"); + if (!pim_get_all_mcast_group(&group)) { flog_err(EC_LIB_DEVELOPMENT, "Unable to convert 224.0.0.0/4 to prefix"); return NB_ERR_INCONSISTENCY; } - return pim_rp_cmd_worker(pim, rp_addr.ip._v4_addr, group, - plist, args->errmsg, args->errmsg_len); + return pim_rp_cmd_worker(pim, rp_addr, group, plist, + args->errmsg, args->errmsg_len); } return NB_OK; @@ -2485,7 +2476,7 @@ int routing_control_plane_protocols_control_plane_protocol_pim_address_family_rp struct vrf *vrf; struct pim_instance *pim; struct prefix group; - struct ipaddr rp_addr; + pim_addr rp_addr; const char *plist; switch (args->event) { @@ -2496,16 +2487,15 @@ int routing_control_plane_protocols_control_plane_protocol_pim_address_family_rp case NB_EV_APPLY: vrf = nb_running_get_entry(args->dnode, NULL, true); pim = vrf->info; - yang_dnode_get_ip(&rp_addr, args->dnode, "../rp-address"); + yang_dnode_get_pimaddr(&rp_addr, args->dnode, "../rp-address"); plist = yang_dnode_get_string(args->dnode, NULL); - if (!str2prefix("224.0.0.0/4", &group)) { + if (!pim_get_all_mcast_group(&group)) { flog_err(EC_LIB_DEVELOPMENT, "Unable to convert 224.0.0.0/4 to prefix"); return NB_ERR_INCONSISTENCY; } - return pim_no_rp_cmd_worker(pim, rp_addr.ip._v4_addr, group, - plist, args->errmsg, - args->errmsg_len); + return pim_no_rp_cmd_worker(pim, rp_addr, group, plist, + args->errmsg, args->errmsg_len); break; } |
