* pim_sendmsg_zebra_rnh -- Format and send a nexthop register/Unregister
* command to Zebra.
*/
-void pim_sendmsg_zebra_rnh(struct zclient *zclient,
+void pim_sendmsg_zebra_rnh(struct zclient *zclient, struct pim_instance *pim,
struct pim_nexthop_cache *pnc, int command)
{
struct stream *s;
p = &(pnc->rpf.rpf_addr);
s = zclient->obuf;
stream_reset(s);
- zclient_create_header(s, command, pimg->vrf_id);
+ zclient_create_header(s, command, pim->vrf_id);
/* get update for all routes for a prefix */
stream_putc(s, 0);
if (!pnc) {
pnc = pim_nexthop_cache_add(pim, &rpf);
if (pnc)
- pim_sendmsg_zebra_rnh(zclient, pnc,
+ pim_sendmsg_zebra_rnh(zclient, pim, pnc,
ZEBRA_NEXTHOP_REGISTER);
else {
char rpf_str[PREFIX_STRLEN];
if (pnc->rp_list->count == 0
&& pnc->upstream_list->count == 0) {
- pim_sendmsg_zebra_rnh(zclient, pnc,
+ pim_sendmsg_zebra_rnh(zclient, pim, pnc,
ZEBRA_NEXTHOP_UNREGISTER);
list_delete(pnc->rp_list);
}
/* Update Upstream nexthop info based on Nexthop update received from Zebra.*/
-static int pim_update_upstream_nh(struct pim_nexthop_cache *pnc)
+static int pim_update_upstream_nh(struct pim_instance *pim,
+ struct pim_nexthop_cache *pnc)
{
struct listnode *up_node;
struct listnode *ifnode;
struct interface *ifp1 = NULL;
struct pim_interface *pim_ifp = NULL;
char str[INET_ADDRSTRLEN];
+ struct vrf *vrf = vrf_lookup_by_id(vrf_id);
+ struct pim_instance *pim = vrf->info;
s = zclient->ibuf;
memset(&p, 0, sizeof(struct prefix));
if (listcount(pnc->rp_list))
pim_update_rp_nh(pnc);
if (listcount(pnc->upstream_list))
- pim_update_upstream_nh(pnc);
+ pim_update_upstream_nh(pim, pnc);
return 0;
}
int pim_ecmp_nexthop_lookup(struct pim_nexthop *nexthop, struct in_addr addr,
struct prefix *src, struct prefix *grp,
int neighbor_needed);
-void pim_sendmsg_zebra_rnh(struct zclient *zclient,
+void pim_sendmsg_zebra_rnh(struct zclient *zclient, struct pim_instance *pim,
struct pim_nexthop_cache *pnc, int command);
int pim_update_rp_nh(struct pim_nexthop_cache *pnc);
void pim_resolve_upstream_nh(struct prefix *nht_p);