summaryrefslogtreecommitdiff
path: root/bgpd/bgpd.h
diff options
context:
space:
mode:
authorPaul Jakma <paul.jakma@sun.com>2006-02-21 01:09:01 +0000
committerPaul Jakma <paul.jakma@sun.com>2006-02-21 01:09:01 +0000
commitafb226bebd8350f8f6523f4692658b944bc2997f (patch)
tree4435ee62f31050298f98dca0fe157fb7c9ca7e34 /bgpd/bgpd.h
parent4528ffa280f93ce64213bd79311dc9d7b3c6a12f (diff)
[bgpd] Record afi/safi in bgp_table. Serialise peer clear with FSM.
2006-02-21 Paul Jakma <paul.jakma@sun.com> * bgpd.h: move the clear_node_queue to be peer specific. Add a new peer status flag, PEER_STATUS_CLEARING. * bgp_table.h: (struct bgp_table) Add fields to record afi, safi of the table. (bgp_table_init) Take afi and safi to create table for. * bgp_table.c: (bgp_table_init) record the afi and safi. * bgp_nexthop.c: Update all calls to bgp_table_init. * bgp_vty.c: ditto. * bgpd.c: ditto. * bgp_fsm.c: (bgp_timer_set) dont bring up a session which is clearing. * bgp_route.c: (general) Update all bgp_table_init calls. (bgp_process_{rsclient,main}) clear_node is serialised via PEER_STATUS_CLEARING and fsm now. (struct bgp_clear_node_queue) can be removed. struct bgp_node can be the queue item data directly, as struct peer can be kept in the new wq global user data and afi/safi can be retrieved via bgp_node -> bgp_table. (bgp_clear_route_node) fix to get peer via wq->spec.data, afi/safi via bgp_node->bgp_table. (bgp_clear_node_queue_del) no more item data to delete, only unlock the bgp_node. (bgp_clear_node_complete) only need to unset CLEARING flag and unlock struct peer. (bgp_clear_node_queue_init) queue attaches to struct peer now. record peer name as queue name. (bgp_clear_route_table) If queue transitions to active, serialise clearing by setting PEER_STATUS_CLEARING rather than plugging process queue, and lock peer while queue active. Update to pass only bgp_node as per-queue-item specific data.
Diffstat (limited to 'bgpd/bgpd.h')
-rw-r--r--bgpd/bgpd.h8
1 files changed, 5 insertions, 3 deletions
diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h
index 44045c06..9e2aa3e0 100644
--- a/bgpd/bgpd.h
+++ b/bgpd/bgpd.h
@@ -40,7 +40,6 @@ struct bgp_master
/* work queues */
struct work_queue *process_main_queue;
struct work_queue *process_rsclient_queue;
- struct work_queue *clear_node_queue;
/* BGP port number. */
u_int16_t port;
@@ -387,6 +386,7 @@ struct peer
#define PEER_STATUS_GROUP (1 << 4) /* peer-group conf */
#define PEER_STATUS_NSF_MODE (1 << 5) /* NSF aware peer */
#define PEER_STATUS_NSF_WAIT (1 << 6) /* wait comeback peer */
+#define PEER_STATUS_CLEARING (1 << 7) /* peers table being cleared */
/* Peer status af flags (reset in bgp_stop) */
u_int16_t af_sflags[AFI_MAX][SAFI_MAX];
@@ -398,7 +398,6 @@ struct peer
#define PEER_STATUS_EOR_SEND (1 << 5) /* end-of-rib send to peer */
#define PEER_STATUS_EOR_RECEIVED (1 << 6) /* end-of-rib received from peer */
-
/* Default attribute value for the peer. */
u_int32_t config;
#define PEER_CONFIG_WEIGHT (1 << 0) /* Default weight. */
@@ -433,7 +432,10 @@ struct peer
struct thread *t_pmax_restart;
struct thread *t_gr_restart;
struct thread *t_gr_stale;
-
+
+ /* workqueues */
+ struct work_queue *clear_node_queue;
+
/* Statistics field */
u_int32_t open_in; /* Open message input count */
u_int32_t open_out; /* Open message output count */