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;