summaryrefslogtreecommitdiff
path: root/pimd/pim_nht.c
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2018-07-07 08:43:27 -0400
committerDonald Sharp <sharpd@cumulusnetworks.com>2018-07-07 10:13:28 -0400
commit8a5134aaa65c6cca70bc41a1f03f5703d2bd06cd (patch)
tree6e6f9f6425e0a79285c3b60e9ce16b94ac68d172 /pimd/pim_nht.c
parentab9ac14351f53f0072433c29d9af178ed777b503 (diff)
pimd: Refactor function to use pim_ecmp_nexthop_lookup
The pim_ecmp_fib_looikup_if_vif_index does practically the same work as pim_ecmp_nexthop_lookup, refactor to use that function so that we do not have more code that must parse the results from zclient_lookup_nexthop. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Diffstat (limited to 'pimd/pim_nht.c')
-rw-r--r--pimd/pim_nht.c30
1 files changed, 7 insertions, 23 deletions
diff --git a/pimd/pim_nht.c b/pimd/pim_nht.c
index 4b349077ea..75507f65e9 100644
--- a/pimd/pim_nht.c
+++ b/pimd/pim_nht.c
@@ -979,17 +979,11 @@ int pim_ecmp_fib_lookup_if_vif_index(struct pim_instance *pim,
struct in_addr addr, struct prefix *src,
struct prefix *grp)
{
- struct pim_zlookup_nexthop nexthop_tab[MULTIPATH_NUM];
- int num_ifindex;
+ struct pim_nexthop nhop;
int vif_index;
- ifindex_t first_ifindex;
- uint32_t hash_val = 0, mod_val = 0;
+ ifindex_t ifindex;
- memset(nexthop_tab, 0,
- sizeof(struct pim_zlookup_nexthop) * MULTIPATH_NUM);
- num_ifindex = zclient_lookup_nexthop(pim, nexthop_tab, MULTIPATH_NUM,
- addr, PIM_NEXTHOP_LOOKUP_MAX);
- if (num_ifindex < 1) {
+ if (!pim_ecmp_nexthop_lookup(pim, &nhop, addr, src, grp, 0)) {
if (PIM_DEBUG_PIM_NHT) {
char addr_str[INET_ADDRSTRLEN];
pim_inet4_dump("<addr?>", addr, addr_str,
@@ -1001,28 +995,18 @@ int pim_ecmp_fib_lookup_if_vif_index(struct pim_instance *pim,
return -1;
}
- // If PIM ECMP enable then choose ECMP path.
- if (pim->ecmp_enable) {
- hash_val = pim_compute_ecmp_hash(src, grp);
- mod_val = hash_val % num_ifindex;
- if (PIM_DEBUG_PIM_NHT_DETAIL)
- zlog_debug("%s: hash_val %u mod_val %u",
- __PRETTY_FUNCTION__, hash_val, mod_val);
- }
-
- first_ifindex = nexthop_tab[mod_val].ifindex;
-
+ ifindex = nhop.interface->ifindex;
if (PIM_DEBUG_PIM_NHT) {
char addr_str[INET_ADDRSTRLEN];
pim_inet4_dump("<ifaddr?>", addr, addr_str, sizeof(addr_str));
zlog_debug(
"%s: found nexthop ifindex=%d (interface %s(%s)) for address %s",
- __PRETTY_FUNCTION__, first_ifindex,
- ifindex2ifname(first_ifindex, pim->vrf_id),
+ __PRETTY_FUNCTION__, ifindex,
+ ifindex2ifname(ifindex, pim->vrf_id),
pim->vrf->name, addr_str);
}
- vif_index = pim_if_find_vifindex_by_ifindex(pim, first_ifindex);
+ vif_index = pim_if_find_vifindex_by_ifindex(pim, ifindex);
if (vif_index < 0) {
if (PIM_DEBUG_PIM_NHT) {