summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pimd/pim6_cmd.c7
-rw-r--r--pimd/pim_cmd.c14
-rw-r--r--pimd/pim_cmd_common.c28
-rw-r--r--pimd/pim_igmp_mtrace.c8
-rw-r--r--pimd/pim_msdp.c4
-rw-r--r--pimd/pim_nht.c44
-rw-r--r--pimd/pim_rpf.c26
-rw-r--r--pimd/pim_rpf.h2
-rw-r--r--pimd/pim_upstream.c6
-rw-r--r--pimd/pim_zlookup.c105
-rw-r--r--pimd/pim_zlookup.h2
11 files changed, 91 insertions, 155 deletions
diff --git a/pimd/pim6_cmd.c b/pimd/pim6_cmd.c
index b86975949b..f0ea4a03a1 100644
--- a/pimd/pim6_cmd.c
+++ b/pimd/pim6_cmd.c
@@ -1541,7 +1541,6 @@ DEFPY (show_ipv6_pim_nexthop_lookup,
pim_addr vif_source;
struct prefix grp;
struct pim_nexthop nexthop;
- char nexthop_addr_str[PIM_ADDRSTRLEN];
struct vrf *v;
v = vrf_lookup_by_name(vrf ? vrf : VRF_DEFAULT_NAME);
@@ -1564,10 +1563,8 @@ DEFPY (show_ipv6_pim_nexthop_lookup,
return CMD_SUCCESS;
}
- pim_addr_dump("<nexthop?>", &nexthop.mrib_nexthop_addr,
- nexthop_addr_str, sizeof(nexthop_addr_str));
- vty_out(vty, "Group %s --- Nexthop %s Interface %s\n", group_str,
- nexthop_addr_str, nexthop.interface->name);
+ vty_out(vty, "Group %s --- Nexthop %pPAs Interface %s\n", group_str,
+ &nexthop.mrib_nexthop_addr, nexthop.interface->name);
return CMD_SUCCESS;
}
diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c
index ba39593603..2deb6e0952 100644
--- a/pimd/pim_cmd.c
+++ b/pimd/pim_cmd.c
@@ -3525,7 +3525,6 @@ DEFPY (show_ip_pim_nexthop_lookup,
pim_addr vif_source;
struct prefix grp;
struct pim_nexthop nexthop;
- char nexthop_addr_str[PREFIX_STRLEN];
struct vrf *v;
v = vrf_lookup_by_name(vrf ? vrf : VRF_DEFAULT_NAME);
@@ -3560,10 +3559,8 @@ DEFPY (show_ip_pim_nexthop_lookup,
return CMD_SUCCESS;
}
- pim_addr_dump("<nexthop?>", &nexthop.mrib_nexthop_addr,
- nexthop_addr_str, sizeof(nexthop_addr_str));
- vty_out(vty, "Group %s --- Nexthop %s Interface %s \n", group_str,
- nexthop_addr_str, nexthop.interface->name);
+ vty_out(vty, "Group %s --- Nexthop %pPAs Interface %s \n", group_str,
+ &nexthop.mrib_nexthop_addr, nexthop.interface->name);
return CMD_SUCCESS;
}
@@ -4680,7 +4677,6 @@ DEFUN (show_ip_rib,
struct in_addr addr;
const char *addr_str;
struct pim_nexthop nexthop;
- char nexthop_addr_str[PREFIX_STRLEN];
int result;
if (!vrf)
@@ -4706,10 +4702,8 @@ DEFUN (show_ip_rib,
vty_out(vty,
"Address NextHop Interface Metric Preference\n");
- pim_addr_dump("<nexthop?>", &nexthop.mrib_nexthop_addr,
- nexthop_addr_str, sizeof(nexthop_addr_str));
-
- vty_out(vty, "%-15s %-15s %-9s %6d %10d\n", addr_str, nexthop_addr_str,
+ vty_out(vty, "%-15s %-15pPAs %-9s %6d %10d\n", addr_str,
+ &nexthop.mrib_nexthop_addr,
nexthop.interface ? nexthop.interface->name : "<ifname?>",
nexthop.mrib_route_metric, nexthop.mrib_metric_preference);
diff --git a/pimd/pim_cmd_common.c b/pimd/pim_cmd_common.c
index f7cd0dceab..dfba369e5b 100644
--- a/pimd/pim_cmd_common.c
+++ b/pimd/pim_cmd_common.c
@@ -882,15 +882,11 @@ void pim_show_rpf(struct pim_instance *pim, struct vty *vty, json_object *json)
frr_each (rb_pim_upstream, &pim->upstream_head, up) {
char rpf_addr_str[PREFIX_STRLEN];
- char rib_nexthop_str[PREFIX_STRLEN];
const char *rpf_ifname;
struct pim_rpf *rpf = &up->rpf;
pim_addr_dump("<rpf?>", &rpf->rpf_addr, rpf_addr_str,
sizeof(rpf_addr_str));
- pim_addr_dump("<nexthop?>",
- &rpf->source_nexthop.mrib_nexthop_addr,
- rib_nexthop_str, sizeof(rib_nexthop_str));
rpf_ifname =
rpf->source_nexthop.interface ? rpf->source_nexthop
@@ -921,8 +917,9 @@ void pim_show_rpf(struct pim_instance *pim, struct vty *vty, json_object *json)
rpf_ifname);
json_object_string_add(json_row, "rpfAddress",
rpf_addr_str);
- json_object_string_add(json_row, "ribNexthop",
- rib_nexthop_str);
+ json_object_string_addf(
+ json_row, "ribNexthop", "%pPAs",
+ &rpf->source_nexthop.mrib_nexthop_addr);
json_object_int_add(
json_row, "routeMetric",
rpf->source_nexthop.mrib_route_metric);
@@ -933,9 +930,10 @@ void pim_show_rpf(struct pim_instance *pim, struct vty *vty, json_object *json)
} else {
vty_out(vty,
- "%-15pPAs %-15pPAs %-16s %-15s %-15s %6d %4d\n",
+ "%-15pPAs %-15pPAs %-16s %-15s %-15pPAs %6d %4d\n",
&up->sg.src, &up->sg.grp, rpf_ifname,
- rpf_addr_str, rib_nexthop_str,
+ rpf_addr_str,
+ &rpf->source_nexthop.mrib_nexthop_addr,
rpf->source_nexthop.mrib_route_metric,
rpf->source_nexthop.mrib_metric_preference);
}
@@ -1519,16 +1517,12 @@ void pim_show_upstream_rpf(struct pim_instance *pim, struct vty *vty, bool uj)
"Source Group RpfIface RibNextHop RpfAddress \n");
frr_each (rb_pim_upstream, &pim->upstream_head, up) {
- char rpf_nexthop_str[PREFIX_STRLEN];
char rpf_addr_str[PREFIX_STRLEN];
struct pim_rpf *rpf;
const char *rpf_ifname;
rpf = &up->rpf;
- pim_addr_dump("<nexthop?>",
- &rpf->source_nexthop.mrib_nexthop_addr,
- rpf_nexthop_str, sizeof(rpf_nexthop_str));
pim_addr_dump("<rpf?>", &rpf->rpf_addr, rpf_addr_str,
sizeof(rpf_addr_str));
@@ -1559,15 +1553,17 @@ void pim_show_upstream_rpf(struct pim_instance *pim, struct vty *vty, bool uj)
json_object_string_add(json_row, "group", grp_str);
json_object_string_add(json_row, "rpfInterface",
rpf_ifname);
- json_object_string_add(json_row, "ribNexthop",
- rpf_nexthop_str);
+ json_object_string_addf(
+ json_row, "ribNexthop", "%pPAs",
+ &rpf->source_nexthop.mrib_nexthop_addr);
json_object_string_add(json_row, "rpfAddress",
rpf_addr_str);
json_object_object_add(json_group, src_str, json_row);
} else {
- vty_out(vty, "%-15pPAs %-15pPAs %-16s %-15s %-15s\n",
+ vty_out(vty, "%-15pPAs %-15pPAs %-16s %-15pPA %-15s\n",
&up->sg.src, &up->sg.grp, rpf_ifname,
- rpf_nexthop_str, rpf_addr_str);
+ &rpf->source_nexthop.mrib_nexthop_addr,
+ rpf_addr_str);
}
}
diff --git a/pimd/pim_igmp_mtrace.c b/pimd/pim_igmp_mtrace.c
index 11bb2db7eb..9148d1050a 100644
--- a/pimd/pim_igmp_mtrace.c
+++ b/pimd/pim_igmp_mtrace.c
@@ -81,11 +81,9 @@ static bool mtrace_fwd_info_weak(struct pim_instance *pim,
zlog_debug("mtrace pim_nexthop_lookup OK");
if (PIM_DEBUG_MTRACE)
- zlog_debug("mtrace next_hop=%pI4",
- &nexthop.mrib_nexthop_addr.u.prefix4);
+ zlog_debug("mtrace next_hop=%pPAs", &nexthop.mrib_nexthop_addr);
- if (nexthop.mrib_nexthop_addr.family == AF_INET)
- nh_addr = nexthop.mrib_nexthop_addr.u.prefix4;
+ nh_addr = nexthop.mrib_nexthop_addr;
ifp_in = nexthop.interface;
@@ -134,7 +132,7 @@ static bool mtrace_fwd_info(struct pim_instance *pim,
}
ifp_in = up->rpf.source_nexthop.interface;
- nh_addr = up->rpf.source_nexthop.mrib_nexthop_addr.u.prefix4;
+ nh_addr = up->rpf.source_nexthop.mrib_nexthop_addr;
total = htonl(MTRACE_UNKNOWN_COUNT);
if (PIM_DEBUG_MTRACE)
diff --git a/pimd/pim_msdp.c b/pimd/pim_msdp.c
index 7c1c80f71a..10e515cb56 100644
--- a/pimd/pim_msdp.c
+++ b/pimd/pim_msdp.c
@@ -709,8 +709,8 @@ bool pim_msdp_peer_rpf_check(struct pim_msdp_peer *mp, struct in_addr rp)
}
/* check if the MSDP peer is the nexthop for the RP */
- if (pim_nexthop_lookup(mp->pim, &nexthop, rp, 0)
- && nexthop.mrib_nexthop_addr.u.prefix4.s_addr == mp->peer.s_addr) {
+ if (pim_nexthop_lookup(mp->pim, &nexthop, rp, 0) &&
+ nexthop.mrib_nexthop_addr.s_addr == mp->peer.s_addr) {
return true;
}
diff --git a/pimd/pim_nht.c b/pimd/pim_nht.c
index 106bce61db..eec763a4ff 100644
--- a/pimd/pim_nht.c
+++ b/pimd/pim_nht.c
@@ -331,13 +331,12 @@ bool pim_nht_bsr_rpf_check(struct pim_instance *pim, struct in_addr bsr_addr,
if (if_is_loopback(ifp) && if_is_loopback(src_ifp))
return true;
- nbr = pim_neighbor_find_prefix(ifp, &znh->nexthop_addr);
+ nbr = pim_neighbor_find(ifp, znh->nexthop_addr);
if (!nbr)
continue;
- return znh->ifindex == src_ifp->ifindex
- && znh->nexthop_addr.u.prefix4.s_addr
- == src_ip.s_addr;
+ return znh->ifindex == src_ifp->ifindex &&
+ (!pim_addr_cmp(znh->nexthop_addr, src_ip));
}
return false;
}
@@ -406,8 +405,7 @@ bool pim_nht_bsr_rpf_check(struct pim_instance *pim, struct in_addr bsr_addr,
void pim_rp_nexthop_del(struct rp_info *rp_info)
{
rp_info->rp.source_nexthop.interface = NULL;
- pim_addr_to_prefix(&rp_info->rp.source_nexthop.mrib_nexthop_addr,
- PIMADDR_ANY);
+ rp_info->rp.source_nexthop.mrib_nexthop_addr = PIMADDR_ANY;
rp_info->rp.source_nexthop.mrib_metric_preference =
router->infinite_assert_metric.metric_preference;
rp_info->rp.source_nexthop.mrib_route_metric =
@@ -510,7 +508,7 @@ static int pim_ecmp_nexthop_search(struct pim_instance *pim,
uint32_t hash_val = 0, mod_val = 0;
uint8_t nh_iter = 0, found = 0;
uint32_t i, num_nbrs = 0;
- pim_addr nh_addr = pim_addr_from_prefix(&(nexthop->mrib_nexthop_addr));
+ pim_addr nh_addr = nexthop->mrib_nexthop_addr;
pim_addr src_addr = pim_addr_from_prefix(src);
pim_addr grp_addr = pim_addr_from_prefix(grp);
@@ -546,9 +544,9 @@ static int pim_ecmp_nexthop_search(struct pim_instance *pim,
if (curr_route_valid &&
!pim_if_connected_to_source(nexthop->interface,
src_addr)) {
- nbr = pim_neighbor_find_prefix(
+ nbr = pim_neighbor_find(
nexthop->interface,
- &nexthop->mrib_nexthop_addr);
+ nexthop->mrib_nexthop_addr);
if (!nbr
&& !if_is_loopback(nexthop->interface)) {
if (PIM_DEBUG_PIM_NHT)
@@ -655,14 +653,10 @@ static int pim_ecmp_nexthop_search(struct pim_instance *pim,
if (nh_iter == mod_val) {
nexthop->interface = ifp;
- nexthop->mrib_nexthop_addr.family = PIM_AF;
- nexthop->mrib_nexthop_addr.prefixlen = PIM_MAX_BITLEN;
#if PIM_IPV == 4
- nexthop->mrib_nexthop_addr.u.prefix4 =
- nh_node->gate.ipv4;
+ nexthop->mrib_nexthop_addr = nh_node->gate.ipv4;
#else
- nexthop->mrib_nexthop_addr.u.prefix6 =
- nh_node->gate.ipv6;
+ nexthop->mrib_nexthop_addr = nh_node->gate.ipv6;
#endif
nexthop->mrib_metric_preference = pnc->distance;
nexthop->mrib_route_metric = pnc->metric;
@@ -942,8 +936,8 @@ int pim_ecmp_nexthop_lookup(struct pim_instance *pim,
ifps[i] = if_lookup_by_index(nexthop_tab[i].ifindex,
pim->vrf->vrf_id);
if (ifps[i]) {
- nbrs[i] = pim_neighbor_find_prefix(
- ifps[i], &nexthop_tab[i].nexthop_addr);
+ nbrs[i] = pim_neighbor_find(
+ ifps[i], nexthop_tab[i].nexthop_addr);
if (nbrs[i] ||
pim_if_connected_to_source(ifps[i], src_addr))
num_nbrs++;
@@ -1006,7 +1000,7 @@ int pim_ecmp_nexthop_lookup(struct pim_instance *pim,
mod_val++;
if (PIM_DEBUG_PIM_NHT)
zlog_debug(
- "%s: NBR (%pFXh) not found on input interface %s(%s) (RPF for source %pPA)",
+ "%s: NBR (%pPA) not found on input interface %s(%s) (RPF for source %pPA)",
__func__,
&nexthop_tab[i].nexthop_addr,
ifp->name, pim->vrf->name,
@@ -1017,19 +1011,13 @@ int pim_ecmp_nexthop_lookup(struct pim_instance *pim,
}
if (i == mod_val) {
- if (PIM_DEBUG_PIM_NHT) {
- char nexthop_str[PREFIX_STRLEN];
-
- pim_addr_dump("<nexthop?>",
- &nexthop_tab[i].nexthop_addr,
- nexthop_str, sizeof(nexthop_str));
+ if (PIM_DEBUG_PIM_NHT)
zlog_debug(
- "%s: found nhop %s for addr %pPA interface %s(%s) metric %d dist %d",
- __func__, nexthop_str, &src_addr,
- ifp->name, pim->vrf->name,
+ "%s: found nhop %pPA for addr %pPA interface %s(%s) metric %d dist %d",
+ __func__, &nexthop_tab[i].nexthop_addr,
+ &src_addr, ifp->name, pim->vrf->name,
nexthop_tab[i].route_metric,
nexthop_tab[i].protocol_distance);
- }
/* update nexthop data */
nexthop->interface = ifp;
nexthop->mrib_nexthop_addr =
diff --git a/pimd/pim_rpf.c b/pimd/pim_rpf.c
index cee542aa13..4e812ae3f0 100644
--- a/pimd/pim_rpf.c
+++ b/pimd/pim_rpf.c
@@ -76,7 +76,7 @@ bool pim_nexthop_lookup(struct pim_instance *pim, struct pim_nexthop *nexthop,
if (PIM_DEBUG_PIM_NHT)
zlog_debug(
"%s: Using last lookup for %pPAs at %lld, %" PRId64
- " addr %pFX",
+ " addr %pPAs",
__func__, &addr, nexthop->last_lookup_time,
pim->last_route_change_time,
&nexthop->mrib_nexthop_addr);
@@ -124,8 +124,8 @@ bool pim_nexthop_lookup(struct pim_instance *pim, struct pim_nexthop *nexthop,
i++;
} else if (neighbor_needed
&& !pim_if_connected_to_source(ifp, addr)) {
- nbr = pim_neighbor_find_prefix(
- ifp, &nexthop_tab[i].nexthop_addr);
+ nbr = pim_neighbor_find(ifp,
+ nexthop_tab[i].nexthop_addr);
if (PIM_DEBUG_PIM_TRACE_DETAIL)
zlog_debug("ifp name: %s, pim nbr: %p",
ifp->name, nbr);
@@ -140,11 +140,12 @@ bool pim_nexthop_lookup(struct pim_instance *pim, struct pim_nexthop *nexthop,
if (found) {
if (PIM_DEBUG_ZEBRA)
zlog_debug(
- "%s %s: found nexthop %pFX for address %pPAs: interface %s ifindex=%d metric=%d pref=%d",
+ "%s %s: found nexthop %pPAs for address %pPAs: interface %s ifindex=%d metric=%d pref=%d",
__FILE__, __func__,
&nexthop_tab[i].nexthop_addr, &addr, ifp->name,
first_ifindex, nexthop_tab[i].route_metric,
nexthop_tab[i].protocol_distance);
+
/* update nexthop data */
nexthop->interface = ifp;
nexthop->mrib_nexthop_addr = nexthop_tab[i].nexthop_addr;
@@ -162,11 +163,8 @@ bool pim_nexthop_lookup(struct pim_instance *pim, struct pim_nexthop *nexthop,
static int nexthop_mismatch(const struct pim_nexthop *nh1,
const struct pim_nexthop *nh2)
{
- pim_addr nh_addr1 = pim_addr_from_prefix(&nh1->mrib_nexthop_addr);
- pim_addr nh_addr2 = pim_addr_from_prefix(&nh2->mrib_nexthop_addr);
-
return (nh1->interface != nh2->interface) ||
- (pim_addr_cmp(nh_addr1, nh_addr2)) ||
+ (pim_addr_cmp(nh1->mrib_nexthop_addr, nh2->mrib_nexthop_addr)) ||
(nh1->mrib_metric_preference != nh2->mrib_metric_preference) ||
(nh1->mrib_route_metric != nh2->mrib_route_metric);
}
@@ -257,7 +255,7 @@ enum pim_rpf_result pim_rpf_update(struct pim_instance *pim,
if (nexthop_mismatch(&rpf->source_nexthop, &saved.source_nexthop)) {
if (PIM_DEBUG_ZEBRA)
- zlog_debug("%s(%s): (S,G)=%s source nexthop now is: interface=%s address=%pFX pref=%d metric=%d",
+ zlog_debug("%s(%s): (S,G)=%s source nexthop now is: interface=%s address=%pPAs pref=%d metric=%d",
__func__, caller,
up->sg_str,
rpf->source_nexthop.interface ? rpf->source_nexthop.interface->name : "<ifname?>",
@@ -316,8 +314,7 @@ void pim_upstream_rpf_clear(struct pim_instance *pim,
if (up->rpf.source_nexthop.interface) {
pim_upstream_switch(pim, up, PIM_UPSTREAM_NOTJOINED);
up->rpf.source_nexthop.interface = NULL;
- pim_addr_to_prefix(&up->rpf.source_nexthop.mrib_nexthop_addr,
- PIMADDR_ANY);
+ up->rpf.source_nexthop.mrib_nexthop_addr = PIMADDR_ANY;
up->rpf.source_nexthop.mrib_metric_preference =
router->infinite_assert_metric.metric_preference;
up->rpf.source_nexthop.mrib_route_metric =
@@ -364,11 +361,8 @@ static pim_addr pim_rpf_find_rpf_addr(struct pim_upstream *up)
/* return NBR( RPF_interface(S), MRIB.next_hop( S ) ) */
- pim_addr nhaddr;
-
- nhaddr =
- pim_addr_from_prefix(&up->rpf.source_nexthop.mrib_nexthop_addr);
- neigh = pim_if_find_neighbor(up->rpf.source_nexthop.interface, nhaddr);
+ neigh = pim_if_find_neighbor(up->rpf.source_nexthop.interface,
+ up->rpf.source_nexthop.mrib_nexthop_addr);
if (neigh)
rpf_addr = neigh->source_addr;
else
diff --git a/pimd/pim_rpf.h b/pimd/pim_rpf.h
index 74aca43d54..40cd066bd1 100644
--- a/pimd/pim_rpf.h
+++ b/pimd/pim_rpf.h
@@ -39,7 +39,7 @@ struct pim_nexthop {
pim_addr last_lookup;
long long last_lookup_time;
struct interface *interface; /* RPF_interface(S) */
- struct prefix mrib_nexthop_addr; /* MRIB.next_hop(S) */
+ pim_addr mrib_nexthop_addr; /* MRIB.next_hop(S) */
uint32_t mrib_metric_preference; /* MRIB.pref(S) */
uint32_t mrib_route_metric; /* MRIB.metric(S) */
struct pim_neighbor *nbr;
diff --git a/pimd/pim_upstream.c b/pimd/pim_upstream.c
index 2b5b4bcf53..3817d5d9e1 100644
--- a/pimd/pim_upstream.c
+++ b/pimd/pim_upstream.c
@@ -838,8 +838,7 @@ void pim_upstream_fill_static_iif(struct pim_upstream *up,
up->rpf.source_nexthop.interface = incoming;
/* reset other parameters to matched a connected incoming interface */
- pim_addr_to_prefix(&up->rpf.source_nexthop.mrib_nexthop_addr,
- PIMADDR_ANY);
+ up->rpf.source_nexthop.mrib_nexthop_addr = PIMADDR_ANY;
up->rpf.source_nexthop.mrib_metric_preference =
ZEBRA_CONNECT_DISTANCE_DEFAULT;
up->rpf.source_nexthop.mrib_route_metric = 0;
@@ -899,8 +898,7 @@ static struct pim_upstream *pim_upstream_new(struct pim_instance *pim,
up->sptbit = PIM_UPSTREAM_SPTBIT_FALSE;
up->rpf.source_nexthop.interface = NULL;
- pim_addr_to_prefix(&up->rpf.source_nexthop.mrib_nexthop_addr,
- PIMADDR_ANY);
+ up->rpf.source_nexthop.mrib_nexthop_addr = PIMADDR_ANY;
up->rpf.source_nexthop.mrib_metric_preference =
router->infinite_assert_metric.metric_preference;
up->rpf.source_nexthop.mrib_route_metric =
diff --git a/pimd/pim_zlookup.c b/pimd/pim_zlookup.c
index 5d99f131a8..c3f0b44431 100644
--- a/pimd/pim_zlookup.c
+++ b/pimd/pim_zlookup.c
@@ -156,7 +156,7 @@ void zclient_lookup_new(void)
static int zclient_read_nexthop(struct pim_instance *pim,
struct zclient *zlookup,
struct pim_zlookup_nexthop nexthop_tab[],
- const int tab_size, struct in_addr addr)
+ const int tab_size, pim_addr addr)
{
int num_ifindex = 0;
struct stream *s;
@@ -165,19 +165,15 @@ static int zclient_read_nexthop(struct pim_instance *pim,
uint8_t version;
vrf_id_t vrf_id;
uint16_t command = 0;
- struct in_addr raddr;
+ pim_addr raddr;
uint8_t distance;
uint32_t metric;
int nexthop_num;
int i, err;
- if (PIM_DEBUG_PIM_NHT_DETAIL) {
- char addr_str[INET_ADDRSTRLEN];
-
- pim_inet4_dump("<addr?>", addr, addr_str, sizeof(addr_str));
- zlog_debug("%s: addr=%s(%s)", __func__, addr_str,
+ if (PIM_DEBUG_PIM_NHT_DETAIL)
+ zlog_debug("%s: addr=%pPAs(%s)", __func__, &addr,
pim->vrf->name);
- }
s = zlookup->ibuf;
@@ -201,17 +197,15 @@ static int zclient_read_nexthop(struct pim_instance *pim,
}
}
+#if PIM_IPV == 4
raddr.s_addr = stream_get_ipv4(s);
-
- if (raddr.s_addr != addr.s_addr) {
- char addr_str[INET_ADDRSTRLEN];
- char raddr_str[INET_ADDRSTRLEN];
- pim_inet4_dump("<addr?>", addr, addr_str, sizeof(addr_str));
- pim_inet4_dump("<raddr?>", raddr, raddr_str, sizeof(raddr_str));
- zlog_warn("%s: address mismatch: addr=%s(%s) raddr=%s",
- __func__, addr_str, pim->vrf->name, raddr_str);
- /* warning only */
- }
+#else
+ stream_get(&raddr, s, sizeof(struct in6_addr));
+#endif
+ if (pim_addr_cmp(raddr, addr))
+ zlog_warn("%s: address mismatch: addr=%pPAs(%s) raddr=%pPAs",
+ __func__, &addr, pim->vrf->name, &raddr);
+ /* warning only */
distance = stream_getc(s);
metric = stream_getl(s);
@@ -233,12 +227,9 @@ static int zclient_read_nexthop(struct pim_instance *pim,
nexthop_vrf_id = stream_getl(s);
nexthop_type = stream_getc(s);
if (num_ifindex >= tab_size) {
- char addr_str[INET_ADDRSTRLEN];
- pim_inet4_dump("<addr?>", addr, addr_str,
- sizeof(addr_str));
zlog_warn(
- "%s: found too many nexthop ifindexes (%d > %d) for address %s(%s)",
- __func__, (num_ifindex + 1), tab_size, addr_str,
+ "%s: found too many nexthop ifindexes (%d > %d) for address %pPAs(%s)",
+ __func__, (num_ifindex + 1), tab_size, &addr,
pim->vrf->name);
return num_ifindex;
}
@@ -254,32 +245,25 @@ static int zclient_read_nexthop(struct pim_instance *pim,
* allow us to work in cases where we are
* trying to find a route for this box.
*/
- nexthop_tab[num_ifindex].nexthop_addr.family = AF_INET;
- nexthop_tab[num_ifindex].nexthop_addr.prefixlen =
- IPV4_MAX_BITLEN;
- nexthop_tab[num_ifindex].nexthop_addr.u.prefix4 =
- addr;
+ nexthop_tab[num_ifindex].nexthop_addr = addr;
++num_ifindex;
break;
case NEXTHOP_TYPE_IPV4_IFINDEX:
case NEXTHOP_TYPE_IPV4:
- nexthop_tab[num_ifindex].nexthop_addr.family = AF_INET;
- nexthop_tab[num_ifindex].nexthop_addr.u.prefix4.s_addr =
+ nexthop_tab[num_ifindex].nexthop_addr.s_addr =
stream_get_ipv4(s);
nexthop_tab[num_ifindex].ifindex = stream_getl(s);
++num_ifindex;
break;
case NEXTHOP_TYPE_IPV6_IFINDEX:
- nexthop_tab[num_ifindex].nexthop_addr.family = AF_INET6;
- stream_get(&nexthop_tab[num_ifindex]
- .nexthop_addr.u.prefix6,
- s, sizeof(struct in6_addr));
+ stream_get(&nexthop_tab[num_ifindex].nexthop_addr, s,
+ sizeof(struct in6_addr));
nexthop_tab[num_ifindex].ifindex = stream_getl(s);
p.family = AF_INET6;
p.prefixlen = IPV6_MAX_BITLEN;
memcpy(&p.u.prefix6,
- &nexthop_tab[num_ifindex].nexthop_addr.u.prefix6,
+ &nexthop_tab[num_ifindex].nexthop_addr,
sizeof(struct in6_addr));
/*
@@ -298,23 +282,17 @@ static int zclient_read_nexthop(struct pim_instance *pim,
nbr = pim_neighbor_find_if(ifp);
if (nbr) {
- nexthop_tab[num_ifindex].nexthop_addr.family =
- AF_INET;
- pim_addr_to_prefix(
- &nexthop_tab[num_ifindex].nexthop_addr,
- nbr->source_addr);
+ nexthop_tab[num_ifindex].nexthop_addr =
+ nbr->source_addr;
}
++num_ifindex;
break;
default:
/* do nothing */
{
- char addr_str[INET_ADDRSTRLEN];
- pim_inet4_dump("<addr?>", addr, addr_str,
- sizeof(addr_str));
zlog_warn(
- "%s: found non-ifindex nexthop type=%d for address %s(%s)",
- __func__, nexthop_type, addr_str,
+ "%s: found non-ifindex nexthop type=%d for address %pPAs(%s)",
+ __func__, nexthop_type, &addr,
pim->vrf->name);
}
break;
@@ -326,17 +304,14 @@ static int zclient_read_nexthop(struct pim_instance *pim,
static int zclient_lookup_nexthop_once(struct pim_instance *pim,
struct pim_zlookup_nexthop nexthop_tab[],
- const int tab_size, struct in_addr addr)
+ const int tab_size, pim_addr addr)
{
struct stream *s;
int ret;
- if (PIM_DEBUG_PIM_NHT_DETAIL) {
- char addr_str[INET_ADDRSTRLEN];
- pim_inet4_dump("<addr?>", addr, addr_str, sizeof(addr_str));
- zlog_debug("%s: addr=%s(%s)", __func__, addr_str,
+ if (PIM_DEBUG_PIM_NHT_DETAIL)
+ zlog_debug("%s: addr=%pPAs(%s)", __func__, &addr,
pim->vrf->name);
- }
/* Check socket. */
if (zlookup->sock < 0) {
@@ -358,7 +333,11 @@ static int zclient_lookup_nexthop_once(struct pim_instance *pim,
stream_reset(s);
zclient_create_header(s, ZEBRA_IPV4_NEXTHOP_LOOKUP_MRIB,
pim->vrf->vrf_id);
+#if PIM_IPV == 4
stream_put_in_addr(s, &addr);
+#else
+ stream_write(s, (uint8_t *)&addr, 16);
+#endif
stream_putw_at(s, 0, stream_get_endp(s));
ret = writen(zlookup->sock, s->data, stream_get_endp(s));
@@ -386,7 +365,7 @@ void zclient_lookup_read_pipe(struct thread *thread)
struct zclient *zlookup = THREAD_ARG(thread);
struct pim_instance *pim = pim_get_pim_instance(VRF_DEFAULT);
struct pim_zlookup_nexthop nexthop_tab[10];
- struct in_addr l = {.s_addr = INADDR_ANY};
+ pim_addr l = PIMADDR_ANY;
if (!pim) {
if (PIM_DEBUG_PIM_NHT_DETAIL)
@@ -413,7 +392,7 @@ int zclient_lookup_nexthop(struct pim_instance *pim,
for (lookup = 0; lookup < max_lookup; ++lookup) {
int num_ifindex;
int first_ifindex;
- struct prefix nexthop_addr;
+ pim_addr nexthop_addr;
num_ifindex = zclient_lookup_nexthop_once(pim, nexthop_tab,
tab_size, addr);
@@ -462,8 +441,7 @@ int zclient_lookup_nexthop(struct pim_instance *pim,
nexthop_tab[0].route_metric);
/* use last address as nexthop address */
- pim_addr_to_prefix(
- &(nexthop_tab[0].nexthop_addr), addr);
+ nexthop_tab[0].nexthop_addr = addr;
/* report original route metric/distance */
nexthop_tab[0].route_metric = route_metric;
@@ -474,23 +452,16 @@ int zclient_lookup_nexthop(struct pim_instance *pim,
return num_ifindex;
}
- if (PIM_DEBUG_PIM_NHT) {
- char addr_str[INET_ADDRSTRLEN];
- char nexthop_str[PREFIX_STRLEN];
- pim_inet4_dump("<addr?>", addr, addr_str,
- sizeof(addr_str));
- pim_addr_dump("<nexthop?>", &nexthop_addr, nexthop_str,
- sizeof(nexthop_str));
+ if (PIM_DEBUG_PIM_NHT)
zlog_debug(
- "%s: lookup=%d/%d: zebra returned recursive nexthop %s for address %pPA(%s) dist=%d met=%d",
- __func__, lookup, max_lookup, nexthop_str,
+ "%s: lookup=%d/%d: zebra returned recursive nexthop %pPAs for address %pPA(%s) dist=%d met=%d",
+ __func__, lookup, max_lookup, &nexthop_addr,
&addr, pim->vrf->name,
nexthop_tab[0].protocol_distance,
nexthop_tab[0].route_metric);
- }
- addr = pim_addr_from_prefix(&(nexthop_addr)); /* use nexthop
- addr for recursive lookup */
+ addr = nexthop_addr; /* use nexthop
+ addr for recursive lookup */
} /* for (max_lookup) */
diff --git a/pimd/pim_zlookup.h b/pimd/pim_zlookup.h
index c3818dbdbc..4ea865a7e7 100644
--- a/pimd/pim_zlookup.h
+++ b/pimd/pim_zlookup.h
@@ -28,7 +28,7 @@
struct pim_zlookup_nexthop {
vrf_id_t vrf_id;
- struct prefix nexthop_addr;
+ pim_addr nexthop_addr;
ifindex_t ifindex;
uint32_t route_metric;
uint8_t protocol_distance;