---
 quagga/bgpd/bgp_nht.c   |  3 ++-
 quagga/bgpd/bgp_zebra.c | 11 +++++++++++
 quagga/bgpd/bgp_zebra.h |  2 ++
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/quagga/bgpd/bgp_nht.c b/quagga/bgpd/bgp_nht.c
index 591fbf9..c4acb66 100644
--- a/quagga/bgpd/bgp_nht.c
+++ b/quagga/bgpd/bgp_nht.c
@@ -192,7 +192,8 @@ bgp_find_or_add_nexthop (afi_t afi, struct bgp_info *ri, 
struct peer *peer,
   else if (peer)
     bnc->nht_info = (void *)peer; /* NHT peer reference */
 
-  return (CHECK_FLAG(bnc->flags, BGP_NEXTHOP_VALID));
+  return (bgp_zebra_num_connects() == 0 ||
+          CHECK_FLAG(bnc->flags, BGP_NEXTHOP_VALID));
 }
 
 void
diff --git a/quagga/bgpd/bgp_zebra.c b/quagga/bgpd/bgp_zebra.c
index 854d93d..974baed 100644
--- a/quagga/bgpd/bgp_zebra.c
+++ b/quagga/bgpd/bgp_zebra.c
@@ -54,6 +54,8 @@ struct in_addr router_id_zebra;
 struct stream *bgp_nexthop_buf = NULL;
 struct stream *bgp_ifindices_buf = NULL;
 
+int zclient_num_connects;
+
 /* Router-id update message from zebra. */
 static int
 bgp_router_id_update (int command, struct zclient *zclient, zebra_size_t 
length,
@@ -1187,12 +1189,15 @@ bgp_zclient_reset (void)
 static void
 bgp_zebra_connected (struct zclient *zclient)
 {
+  zclient_num_connects++;
   zclient_send_requests (zclient, VRF_DEFAULT);
 }
 
 void
 bgp_zebra_init (struct thread_master *master)
 {
+  zclient_num_connects = 0;
+
   /* Set default values. */
   zclient = zclient_new (master);
   zclient_init (zclient, ZEBRA_ROUTE_BGP);
@@ -1223,3 +1228,9 @@ bgp_zebra_destroy(void)
   zclient_free(zclient);
   zclient = NULL;
 }
+
+int
+bgp_zebra_num_connects(void)
+{
+  return zclient_num_connects;
+}
diff --git a/quagga/bgpd/bgp_zebra.h b/quagga/bgpd/bgp_zebra.h
index 9a592c3..5d4ed62 100644
--- a/quagga/bgpd/bgp_zebra.h
+++ b/quagga/bgpd/bgp_zebra.h
@@ -48,4 +48,6 @@ extern struct interface *if_lookup_by_ipv4_exact (struct 
in_addr *);
 extern struct interface *if_lookup_by_ipv6 (struct in6_addr *);
 extern struct interface *if_lookup_by_ipv6_exact (struct in6_addr *);
 
+extern int bgp_zebra_num_connects(void);
+
 #endif /* _QUAGGA_BGP_ZEBRA_H */
-- 
2.1.3


_______________________________________________
Quagga-dev mailing list
Quagga-dev@lists.quagga.net
https://lists.quagga.net/mailman/listinfo/quagga-dev

Reply via email to