pimd: Make zlookup 'struct pim_instance' aware

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
Donald Sharp 2017-05-21 09:03:07 -04:00
parent 6f932b0c91
commit 71edad0fd5
4 changed files with 22 additions and 18 deletions

View File

@ -901,8 +901,8 @@ int pim_ecmp_nexthop_lookup(struct pim_instance *pim,
memset(nexthop_tab, 0, memset(nexthop_tab, 0,
sizeof(struct pim_zlookup_nexthop) * MULTIPATH_NUM); sizeof(struct pim_zlookup_nexthop) * MULTIPATH_NUM);
num_ifindex = zclient_lookup_nexthop(nexthop_tab, MULTIPATH_NUM, addr, num_ifindex = zclient_lookup_nexthop(pim, nexthop_tab, MULTIPATH_NUM,
PIM_NEXTHOP_LOOKUP_MAX); addr, PIM_NEXTHOP_LOOKUP_MAX);
if (num_ifindex < 1) { if (num_ifindex < 1) {
char addr_str[INET_ADDRSTRLEN]; char addr_str[INET_ADDRSTRLEN];
pim_inet4_dump("<addr?>", addr, addr_str, sizeof(addr_str)); pim_inet4_dump("<addr?>", addr, addr_str, sizeof(addr_str));
@ -1030,8 +1030,8 @@ int pim_ecmp_fib_lookup_if_vif_index(struct pim_instance *pim,
memset(nexthop_tab, 0, memset(nexthop_tab, 0,
sizeof(struct pim_zlookup_nexthop) * MULTIPATH_NUM); sizeof(struct pim_zlookup_nexthop) * MULTIPATH_NUM);
num_ifindex = zclient_lookup_nexthop(nexthop_tab, MULTIPATH_NUM, addr, num_ifindex = zclient_lookup_nexthop(pim, nexthop_tab, MULTIPATH_NUM,
PIM_NEXTHOP_LOOKUP_MAX); addr, PIM_NEXTHOP_LOOKUP_MAX);
if (num_ifindex < 1) { if (num_ifindex < 1) {
if (PIM_DEBUG_ZEBRA) { if (PIM_DEBUG_ZEBRA) {
char addr_str[INET_ADDRSTRLEN]; char addr_str[INET_ADDRSTRLEN];

View File

@ -92,8 +92,8 @@ int pim_nexthop_lookup(struct pim_instance *pim, struct pim_nexthop *nexthop,
memset(nexthop_tab, 0, memset(nexthop_tab, 0,
sizeof(struct pim_zlookup_nexthop) * MULTIPATH_NUM); sizeof(struct pim_zlookup_nexthop) * MULTIPATH_NUM);
num_ifindex = zclient_lookup_nexthop(nexthop_tab, MULTIPATH_NUM, addr, num_ifindex = zclient_lookup_nexthop(pim, nexthop_tab, MULTIPATH_NUM,
PIM_NEXTHOP_LOOKUP_MAX); addr, PIM_NEXTHOP_LOOKUP_MAX);
if (num_ifindex < 1) { if (num_ifindex < 1) {
char addr_str[INET_ADDRSTRLEN]; char addr_str[INET_ADDRSTRLEN];
pim_inet4_dump("<addr?>", addr, addr_str, sizeof(addr_str)); pim_inet4_dump("<addr?>", addr, addr_str, sizeof(addr_str));

View File

@ -135,7 +135,8 @@ void zclient_lookup_new(void)
__PRETTY_FUNCTION__); __PRETTY_FUNCTION__);
} }
static int zclient_read_nexthop(struct zclient *zlookup, static int zclient_read_nexthop(struct pim_instance *pim,
struct zclient *zlookup,
struct pim_zlookup_nexthop nexthop_tab[], struct pim_zlookup_nexthop nexthop_tab[],
const int tab_size, struct in_addr addr) const int tab_size, struct in_addr addr)
{ {
@ -256,17 +257,17 @@ static int zclient_read_nexthop(struct zclient *zlookup,
* If we are sending v6 secondary assume we receive v6 * If we are sending v6 secondary assume we receive v6
* secondary * secondary
*/ */
if (pimg->send_v6_secondary) if (pim->send_v6_secondary)
nbr = pim_neighbor_find_by_secondary( nbr = pim_neighbor_find_by_secondary(
if_lookup_by_index( if_lookup_by_index(
nexthop_tab[num_ifindex] nexthop_tab[num_ifindex]
.ifindex, .ifindex,
pimg->vrf_id), vrf_id),
&p); &p);
else else
nbr = pim_neighbor_find_if(if_lookup_by_index( nbr = pim_neighbor_find_if(if_lookup_by_index(
nexthop_tab[num_ifindex].ifindex, nexthop_tab[num_ifindex].ifindex,
pimg->vrf_id)); vrf_id));
if (nbr) { if (nbr) {
nexthop_tab[num_ifindex].nexthop_addr.family = nexthop_tab[num_ifindex].nexthop_addr.family =
AF_INET; AF_INET;
@ -294,7 +295,8 @@ static int zclient_read_nexthop(struct zclient *zlookup,
return num_ifindex; return num_ifindex;
} }
static int zclient_lookup_nexthop_once(struct pim_zlookup_nexthop nexthop_tab[], 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, struct in_addr addr)
{ {
struct stream *s; struct stream *s;
@ -316,7 +318,7 @@ static int zclient_lookup_nexthop_once(struct pim_zlookup_nexthop nexthop_tab[],
s = zlookup->obuf; s = zlookup->obuf;
stream_reset(s); stream_reset(s);
zclient_create_header(s, ZEBRA_IPV4_NEXTHOP_LOOKUP_MRIB, pimg->vrf_id); zclient_create_header(s, ZEBRA_IPV4_NEXTHOP_LOOKUP_MRIB, pim->vrf_id);
stream_put_in_addr(s, &addr); stream_put_in_addr(s, &addr);
stream_putw_at(s, 0, stream_get_endp(s)); stream_putw_at(s, 0, stream_get_endp(s));
@ -335,10 +337,11 @@ static int zclient_lookup_nexthop_once(struct pim_zlookup_nexthop nexthop_tab[],
return -3; return -3;
} }
return zclient_read_nexthop(zlookup, nexthop_tab, tab_size, addr); return zclient_read_nexthop(pim, zlookup, nexthop_tab, tab_size, addr);
} }
int zclient_lookup_nexthop(struct pim_zlookup_nexthop nexthop_tab[], int zclient_lookup_nexthop(struct pim_instance *pim,
struct pim_zlookup_nexthop nexthop_tab[],
const int tab_size, struct in_addr addr, const int tab_size, struct in_addr addr,
int max_lookup) int max_lookup)
{ {
@ -353,8 +356,8 @@ int zclient_lookup_nexthop(struct pim_zlookup_nexthop nexthop_tab[],
int first_ifindex; int first_ifindex;
struct prefix nexthop_addr; struct prefix nexthop_addr;
num_ifindex = zclient_lookup_nexthop_once(nexthop_tab, tab_size, num_ifindex = zclient_lookup_nexthop_once(pim, nexthop_tab,
addr); tab_size, addr);
if (num_ifindex < 1) { if (num_ifindex < 1) {
if (PIM_DEBUG_ZEBRA) { if (PIM_DEBUG_ZEBRA) {
char addr_str[INET_ADDRSTRLEN]; char addr_str[INET_ADDRSTRLEN];
@ -488,7 +491,7 @@ int pim_zlookup_sg_statistics(struct channel_oil *c_oil)
return -1; return -1;
stream_reset(s); stream_reset(s);
zclient_create_header(s, ZEBRA_IPMR_ROUTE_STATS, pimg->vrf_id); zclient_create_header(s, ZEBRA_IPMR_ROUTE_STATS, c_oil->pim->vrf_id);
stream_put_in_addr(s, &c_oil->oil.mfcc_origin); stream_put_in_addr(s, &c_oil->oil.mfcc_origin);
stream_put_in_addr(s, &c_oil->oil.mfcc_mcastgrp); stream_put_in_addr(s, &c_oil->oil.mfcc_mcastgrp);
stream_putl(s, ifp->ifindex); stream_putl(s, ifp->ifindex);

View File

@ -36,7 +36,8 @@ struct pim_zlookup_nexthop {
void zclient_lookup_new(void); void zclient_lookup_new(void);
void zclient_lookup_free(void); void zclient_lookup_free(void);
int zclient_lookup_nexthop(struct pim_zlookup_nexthop nexthop_tab[], int zclient_lookup_nexthop(struct pim_instance *pim,
struct pim_zlookup_nexthop nexthop_tab[],
const int tab_size, struct in_addr addr, const int tab_size, struct in_addr addr,
int max_lookup); int max_lookup);