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.c156
1 files changed, 79 insertions, 77 deletions
diff --git a/pimd/pim_nb_config.c b/pimd/pim_nb_config.c
index 27cac0c1a7..7fe7c0395f 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;
}
@@ -354,6 +348,7 @@ static bool is_pim_interface(const struct lyd_node *dnode)
return false;
}
+#if PIM_IPV == 4
static int pim_cmd_igmp_start(struct interface *ifp)
{
struct pim_interface *pim_ifp;
@@ -382,12 +377,14 @@ static int pim_cmd_igmp_start(struct interface *ifp)
return NB_OK;
}
+#endif /* PIM_IPV == 4 */
/*
* CLI reconfiguration affects the interface level (struct pim_interface).
* This function propagates the reconfiguration to every active socket
* for that interface.
*/
+#if PIM_IPV == 4
static void igmp_sock_query_interval_reconfig(struct gm_sock *igmp)
{
struct interface *ifp;
@@ -412,6 +409,7 @@ static void igmp_sock_query_interval_reconfig(struct gm_sock *igmp)
*/
igmp_startup_mode_on(igmp);
}
+#endif
static void igmp_sock_query_reschedule(struct gm_sock *igmp)
{
@@ -442,6 +440,7 @@ static void igmp_sock_query_reschedule(struct gm_sock *igmp)
}
}
+#if PIM_IPV == 4
static void change_query_interval(struct pim_interface *pim_ifp,
int query_interval)
{
@@ -455,6 +454,7 @@ static void change_query_interval(struct pim_interface *pim_ifp,
igmp_sock_query_reschedule(igmp);
}
}
+#endif
static void change_query_max_response_time(struct pim_interface *pim_ifp,
int query_max_response_time_dsec)
@@ -936,7 +936,7 @@ int routing_control_plane_protocols_control_plane_protocol_pim_address_family_ss
struct vrf *vrf;
struct pim_instance *pim;
int result;
- struct ipaddr source_addr;
+ pim_addr source_addr;
switch (args->event) {
case NB_EV_VALIDATE:
@@ -946,16 +946,14 @@ int routing_control_plane_protocols_control_plane_protocol_pim_address_family_ss
case NB_EV_APPLY:
vrf = nb_running_get_entry(args->dnode, NULL, true);
pim = vrf->info;
- yang_dnode_get_ip(&source_addr, args->dnode, NULL);
- result = pim_ssmpingd_start(pim, source_addr.ip._v4_addr);
+ yang_dnode_get_pimaddr(&source_addr, args->dnode,
+ "./source-addr");
+ result = pim_ssmpingd_start(pim, source_addr);
if (result) {
- char source_str[INET_ADDRSTRLEN];
-
- ipaddr2str(&source_addr, source_str,
- sizeof(source_str));
- snprintf(args->errmsg, args->errmsg_len,
- "%% Failure starting ssmpingd for source %s: %d",
- source_str, result);
+ snprintf(
+ args->errmsg, args->errmsg_len,
+ "%% Failure starting ssmpingd for source %pPA: %d",
+ &source_addr, result);
return NB_ERR_INCONSISTENCY;
}
}
@@ -969,7 +967,7 @@ int routing_control_plane_protocols_control_plane_protocol_pim_address_family_ss
struct vrf *vrf;
struct pim_instance *pim;
int result;
- struct ipaddr source_addr;
+ pim_addr source_addr;
switch (args->event) {
case NB_EV_VALIDATE:
@@ -979,16 +977,14 @@ int routing_control_plane_protocols_control_plane_protocol_pim_address_family_ss
case NB_EV_APPLY:
vrf = nb_running_get_entry(args->dnode, NULL, true);
pim = vrf->info;
- yang_dnode_get_ip(&source_addr, args->dnode, NULL);
- result = pim_ssmpingd_stop(pim, source_addr.ip._v4_addr);
+ yang_dnode_get_pimaddr(&source_addr, args->dnode,
+ "./source-addr");
+ result = pim_ssmpingd_stop(pim, source_addr);
if (result) {
- char source_str[INET_ADDRSTRLEN];
-
- ipaddr2str(&source_addr, source_str,
- sizeof(source_str));
- snprintf(args->errmsg, args->errmsg_len,
- "%% Failure stopping ssmpingd for source %s: %d",
- source_str, result);
+ snprintf(
+ args->errmsg, args->errmsg_len,
+ "%% Failure stopping ssmpingd for source %pPA: %d",
+ &source_addr, result);
return NB_ERR_INCONSISTENCY;
}
@@ -2340,7 +2336,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 +2348,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 +2391,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 +2401,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 +2417,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 +2427,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 +2447,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 +2459,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 +2478,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 +2489,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;
}
@@ -2564,6 +2556,7 @@ 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)
{
+#if PIM_IPV == 4
struct interface *ifp;
bool igmp_enable;
struct pim_interface *pim_ifp;
@@ -2611,7 +2604,9 @@ int lib_interface_gmp_address_family_enable_modify(
pim_if_delete(ifp);
}
}
-
+#else
+ /* TBD Depends on MLD data structure changes */
+#endif /* PIM_IPV == 4 */
return NB_OK;
}
@@ -2685,6 +2680,7 @@ int lib_interface_gmp_address_family_mld_version_modify(
case NB_EV_PREPARE:
case NB_EV_ABORT:
case NB_EV_APPLY:
+ /* TBD depends on MLD data structure changes */
break;
}
@@ -2711,6 +2707,7 @@ int lib_interface_gmp_address_family_mld_version_destroy(
int lib_interface_gmp_address_family_query_interval_modify(
struct nb_cb_modify_args *args)
{
+#if PIM_IPV == 4
struct interface *ifp;
int query_interval;
@@ -2724,7 +2721,9 @@ int lib_interface_gmp_address_family_query_interval_modify(
query_interval = yang_dnode_get_uint16(args->dnode, NULL);
change_query_interval(ifp->info, query_interval);
}
-
+#else
+ /* TBD Depends on MLD data structure changes */
+#endif
return NB_OK;
}
@@ -2816,6 +2815,7 @@ int lib_interface_gmp_address_family_robustness_variable_modify(
int lib_interface_gmp_address_family_static_group_create(
struct nb_cb_create_args *args)
{
+#if PIM_IPV == 4
struct interface *ifp;
struct ipaddr source_addr;
struct ipaddr group_addr;
@@ -2858,7 +2858,9 @@ int lib_interface_gmp_address_family_static_group_create(
return NB_ERR_INCONSISTENCY;
}
}
-
+#else
+ /* TBD Depends on MLD data structure changes */
+#endif /* PIM_IPV == 4 */
return NB_OK;
}