summaryrefslogtreecommitdiff
path: root/pimd/pim_nb_config.c
diff options
context:
space:
mode:
Diffstat (limited to 'pimd/pim_nb_config.c')
-rw-r--r--pimd/pim_nb_config.c98
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;
}