Run DR election when hello packet is received.
diff --git a/pimd/pim_pim.c b/pimd/pim_pim.c
index 8dd71d6..4fda26e 100644
--- a/pimd/pim_pim.c
+++ b/pimd/pim_pim.c
@@ -208,10 +208,14 @@
}
if (pim_type == PIM_MSG_TYPE_HELLO) {
- return pim_hello_recv(ifp,
- ip_hdr->ip_src,
- pim_msg + PIM_MSG_HEADER_LEN,
- pim_msg_len - PIM_MSG_HEADER_LEN);
+ int result = pim_hello_recv(ifp,
+ ip_hdr->ip_src,
+ pim_msg + PIM_MSG_HEADER_LEN,
+ pim_msg_len - PIM_MSG_HEADER_LEN);
+ if (!result) {
+ pim_if_dr_election(ifp); /* PIM Hello message is received */
+ }
+ return result;
}
neigh = pim_neighbor_find(ifp, ip_hdr->ip_src);
@@ -324,7 +328,10 @@
}
#endif
- if (pim_pim_packet(ifp, buf, len)) {
+ int fail = pim_pim_packet(ifp, buf, len);
+ if (fail) {
+ zlog_warn("%s: pim_pim_packet() return=%d",
+ __PRETTY_FUNCTION__, fail);
goto done;
}
@@ -429,6 +436,7 @@
/* DR Election */
pim_ifp->pim_dr_election_last = 0; /* timestamp */
pim_ifp->pim_dr_election_count = 0;
+ pim_ifp->pim_dr_election_changes = 0;
pim_ifp->pim_dr_num_nondrpri_neighbors = 0; /* neighbors without dr_pri */
pim_ifp->pim_dr_addr = pim_ifp->primary_address;