diff options
| author | Donald Sharp <sharpd@cumulusnetworks.com> | 2018-07-07 08:43:27 -0400 |
|---|---|---|
| committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2018-07-07 10:13:28 -0400 |
| commit | 8a5134aaa65c6cca70bc41a1f03f5703d2bd06cd (patch) | |
| tree | 6e6f9f6425e0a79285c3b60e9ce16b94ac68d172 /pimd/pim_nht.c | |
| parent | ab9ac14351f53f0072433c29d9af178ed777b503 (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.c | 30 |
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) { |
