0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-12-22 09:41:54 +00:00

Link the instance to the global BGP list as soon as possible.

This commit is contained in:
Martin Mares 2000-05-08 11:04:22 +00:00
parent 94e935d8a2
commit 79681f4a19

View File

@ -290,7 +290,8 @@ bgp_incoming_connection(sock *sk, int dummy)
WALK_LIST(n, bgp_list) WALK_LIST(n, bgp_list)
{ {
struct bgp_proto *p = SKIP_BACK(struct bgp_proto, bgp_node, n); 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); BGP_TRACE(D_EVENTS, "Incoming connection from %I port %d", sk->daddr, sk->dport);
if (p->incoming_conn.sk) if (p->incoming_conn.sk)
@ -338,12 +339,6 @@ bgp_start_neighbor(struct bgp_proto *p)
{ {
p->local_addr = p->neigh->iface->addr->ip; p->local_addr = p->neigh->iface->addr->ip;
DBG("BGP: local=%I remote=%I\n", p->local_addr, p->next_hop); 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); bgp_initiate(p);
} }
@ -400,6 +395,13 @@ bgp_start(struct proto *P)
p->incoming_conn.state = BS_IDLE; p->incoming_conn.state = BS_IDLE;
p->startup_delay = 0; 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 * Before attempting to create the connection, we need to lock the
* port, so that are sure we're the only instance attempting to talk * port, so that are sure we're the only instance attempting to talk