static list inactive_proto_list;
static list initial_proto_list;
static list flush_proto_list;
+static struct proto *initial_device_proto;
static event *proto_flush_event;
DBG("\n");
}
+extern struct protocol proto_unix_iface;
+
static struct proto *
proto_init(struct proto_config *c)
{
q->proto_state = PS_DOWN;
q->core_state = FS_HUNGRY;
proto_enqueue(&initial_proto_list, q);
+ if (p == &proto_unix_iface)
+ initial_device_proto = q;
+
add_tail(&proto_list, &q->glob_node);
PD(q, "Initializing%s", q->disabled ? " [disabled]" : "");
return q;
DBG("\tdone\n");
DBG("Protocol start\n");
+
+ /* Start device protocol first */
+ if (initial_device_proto)
+ {
+ proto_rethink_goal(initial_device_proto);
+ initial_device_proto = NULL;
+ }
+
WALK_LIST_DELSAFE(p, n, initial_proto_list)
proto_rethink_goal(p);
}
}
}
-extern struct protocol proto_unix_iface;
-
static void
proto_flush_all(void *unused UNUSED)
{
p->startup_timer->hook = bgp_startup_timeout;
p->startup_timer->data = p;
+ p->local_id = proto_get_router_id(P->cf);
+ if (p->rr_client)
+ p->rr_cluster_id = p->cf->rr_cluster_id ? p->cf->rr_cluster_id : p->local_id;
+
p->remote_id = 0;
p->source_addr = p->cf->source_addr;
p->local_as = c->local_as;
p->remote_as = c->remote_as;
p->is_internal = (c->local_as == c->remote_as);
- p->local_id = proto_get_router_id(C);
p->rs_client = c->rs_client;
p->rr_client = c->rr_client;
- if (p->rr_client)
- p->rr_cluster_id = c->rr_cluster_id ? c->rr_cluster_id : p->local_id;
p->igp_table = get_igp_table(c);
return P;