]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Link the instance to the global BGP list as soon as possible.
authorMartin Mares <mj@ucw.cz>
Mon, 8 May 2000 11:04:22 +0000 (11:04 +0000)
committerMartin Mares <mj@ucw.cz>
Mon, 8 May 2000 11:04:22 +0000 (11:04 +0000)
proto/bgp/bgp.c

index ecaa9e36acdff09e5cbf8ea96b3bedc4d556ae1a..b7f65d123e2b783387f56198fe74d873dc6e8e41 100644 (file)
@@ -290,7 +290,8 @@ bgp_incoming_connection(sock *sk, int dummy)
   WALK_LIST(n, bgp_list)
     {
       struct bgp_proto *p = SKIP_BACK(struct bgp_proto, bgp_node, n);
-      if (ipa_equal(p->cf->remote_ip, sk->daddr))
+      if (ipa_equal(p->cf->remote_ip, sk->daddr) &&
+         (p->p.proto_state == PS_START || p->p.proto_state == PS_UP))
        {
          BGP_TRACE(D_EVENTS, "Incoming connection from %I port %d", sk->daddr, sk->dport);
          if (p->incoming_conn.sk)
@@ -338,12 +339,6 @@ bgp_start_neighbor(struct bgp_proto *p)
 {
   p->local_addr = p->neigh->iface->addr->ip;
   DBG("BGP: local=%I remote=%I\n", p->local_addr, p->next_hop);
-  if (!bgp_counter++)
-    init_list(&bgp_list);
-  bgp_setup_listen_sk();
-  if (!bgp_linpool)
-    bgp_linpool = lp_new(&root_pool, 4080);
-  add_tail(&bgp_list, &p->bgp_node);
   bgp_initiate(p);
 }
 
@@ -400,6 +395,13 @@ bgp_start(struct proto *P)
   p->incoming_conn.state = BS_IDLE;
   p->startup_delay = 0;
 
+  if (!bgp_counter++)
+    init_list(&bgp_list);
+  bgp_setup_listen_sk();
+  if (!bgp_linpool)
+    bgp_linpool = lp_new(&root_pool, 4080);
+  add_tail(&bgp_list, &p->bgp_node);
+
   /*
    *  Before attempting to create the connection, we need to lock the
    *  port, so that are sure we're the only instance attempting to talk