pimd: pim bfd vrf aware

BFD replay for all interfaces was only considering VRF_DEFAULT interface
list.
The change will walk all VRFs, interface list per VRF to register pim
neighbor with BFD.

Signed-off-by: Chirag shah <chirag@cumulusnetworks.com>
This commit is contained in:
Chirag Shah 2017-08-13 17:41:01 -07:00
parent 2fd8de7d96
commit df83d4e19d

View File

@ -295,11 +295,13 @@ static int pim_bfd_nbr_replay(int command, struct zclient *zclient,
struct listnode *node; struct listnode *node;
struct listnode *neigh_node; struct listnode *neigh_node;
struct listnode *neigh_nextnode; struct listnode *neigh_nextnode;
struct vrf *vrf = NULL;
/* Send the client registration */ /* Send the client registration */
bfd_client_sendmsg(zclient, ZEBRA_BFD_CLIENT_REGISTER); bfd_client_sendmsg(zclient, ZEBRA_BFD_CLIENT_REGISTER);
for (ALL_LIST_ELEMENTS_RO(vrf_iflist(VRF_DEFAULT), node, ifp)) { RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name) {
for (ALL_LIST_ELEMENTS_RO(vrf_iflist(vrf->vrf_id), node, ifp)) {
pim_ifp = ifp->info; pim_ifp = ifp->info;
if (!pim_ifp) if (!pim_ifp)
@ -308,18 +310,24 @@ static int pim_bfd_nbr_replay(int command, struct zclient *zclient,
if (pim_ifp->pim_sock_fd < 0) if (pim_ifp->pim_sock_fd < 0)
continue; continue;
for (ALL_LIST_ELEMENTS(pim_ifp->pim_neighbor_list, neigh_node, for (ALL_LIST_ELEMENTS(pim_ifp->pim_neighbor_list,
neigh_nextnode, neigh)) { neigh_node, neigh_nextnode,
neigh)) {
if (!neigh->bfd_info) if (!neigh->bfd_info)
continue; continue;
if (PIM_DEBUG_PIM_TRACE) { if (PIM_DEBUG_PIM_TRACE) {
char str[INET_ADDRSTRLEN]; char str[INET_ADDRSTRLEN];
pim_inet4_dump("<bfd_nbr?>", neigh->source_addr,
pim_inet4_dump("<bfd_nbr?>",
neigh->source_addr,
str, sizeof(str)); str, sizeof(str));
zlog_debug("%s: Replaying Pim Neigh %s to BFD", zlog_debug("%s: Replaying Pim Neigh %s to BFD vrf_id %u",
__PRETTY_FUNCTION__, str); __PRETTY_FUNCTION__, str,
vrf->vrf_id);
}
pim_bfd_reg_dereg_nbr(neigh,
ZEBRA_BFD_DEST_UPDATE);
} }
pim_bfd_reg_dereg_nbr(neigh, ZEBRA_BFD_DEST_UPDATE);
} }
} }
return 0; return 0;