summaryrefslogtreecommitdiffstats
path: root/lib/mqueue.h
diff options
context:
space:
mode:
authorChris Hall <GMCH@hestia.halldom.com>2010-01-04 15:09:29 +0000
committerChris Hall <GMCH@hestia.halldom.com>2010-01-04 15:09:29 +0000
commit6746ef8cd683a5e0afa57a5fc90a28f533be68be (patch)
treed7608f3253abe75208db6c789752dd91840e1fcc /lib/mqueue.h
parent152acaa5615afcb6d5a06aaed74d2fdd4b5a1233 (diff)
downloadquagga-6746ef8cd683a5e0afa57a5fc90a28f533be68be.tar.bz2
quagga-6746ef8cd683a5e0afa57a5fc90a28f533be68be.tar.xz
Initial commit for bgp_engine branch -- seeding new files...
On branch bgp_engine modified: .gitignore modified: bgpd/Makefile.am new file: bgpd/bgp.h new file: bgpd/bgp_common.c new file: bgpd/bgp_common.h new file: bgpd/bgp_connection.c new file: bgpd/bgp_connection.h modified: bgpd/bgp_debug.c new file: bgpd/bgp_engine.c new file: bgpd/bgp_engine.h modified: bgpd/bgp_fsm.c modified: bgpd/bgp_fsm.h modified: bgpd/bgp_network.c modified: bgpd/bgp_network.h new file: bgpd/bgp_notification.c new file: bgpd/bgp_notification.h modified: bgpd/bgp_open.c new file: bgpd/bgp_open_state.c new file: bgpd/bgp_open_state.h modified: bgpd/bgp_packet.c new file: bgpd/bgp_peer.c new file: bgpd/bgp_peer.h modified: bgpd/bgp_route.c new file: bgpd/bgp_session.c new file: bgpd/bgp_session.h modified: bgpd/bgp_vty.c modified: bgpd/bgp_zebra.c modified: bgpd/bgpd.c modified: bgpd/bgpd.h modified: lib/Makefile.am modified: lib/memtypes.c modified: lib/mqueue.c modified: lib/mqueue.h new file: lib/qafi_safi.h modified: lib/qpselect.c modified: lib/qpselect.h modified: lib/qpthreads.c modified: lib/qpthreads.h modified: lib/sockopt.c modified: lib/sockunion.c modified: lib/sockunion.h modified: lib/stream.c modified: lib/stream.h modified: lib/symtab.h modified: lib/zebra.h
Diffstat (limited to 'lib/mqueue.h')
-rw-r--r--lib/mqueue.h55
1 files changed, 45 insertions, 10 deletions
diff --git a/lib/mqueue.h b/lib/mqueue.h
index 7d649efe..fb28eea1 100644
--- a/lib/mqueue.h
+++ b/lib/mqueue.h
@@ -50,7 +50,7 @@ typedef union
enum mqb_flag
{
- mqb_revoke = 0,
+ mqb_destroy = 0,
mqb_action = 1
} ;
@@ -122,37 +122,60 @@ struct mqueue_queue
} kick ;
} ;
+typedef struct mqueue_local_queue* mqueue_local_queue ;
+
+struct mqueue_local_queue
+{
+ mqueue_block head ; /* NULL => list is empty */
+ mqueue_block tail ; /* last message (if not empty) */
+} ;
+
/*==============================================================================
* Functions
*/
-void
+extern void
mqueue_initialise(void) ;
-mqueue_queue
+extern mqueue_queue
mqueue_init_new(mqueue_queue mq, enum mqueue_queue_type type) ;
-void
+extern mqueue_local_queue
+mqueue_local_init_new(mqueue_local_queue lmq) ;
+
+extern mqueue_local_queue
+mqueue_local_reset(mqueue_local_queue lmq, int free_structure) ;
+
+#define mqueue_local_reset_keep(lmq) mqueue_local_reset(lmq, 0)
+#define mqueue_local_reset_free(lmq) mqueue_local_reset(lmq, 1)
+
+extern void
mqueue_set_timeout_interval(mqueue_queue mq, qtime_t interval) ;
-mqueue_thread_signal
+extern mqueue_thread_signal
mqueue_thread_signal_init(mqueue_thread_signal mqt, qpt_thread_t thread,
int signum) ;
-mqueue_block
+extern mqueue_block
mqb_init_new(mqueue_block mqb, mqueue_action action, void* arg0) ;
-void
+extern void
mqb_free(mqueue_block mqb) ;
-void
+extern void
mqueue_enqueue(mqueue_queue mq, mqueue_block mqb, int priority) ;
-mqueue_block
+extern mqueue_block
mqueue_dequeue(mqueue_queue mq, int wait, void* arg) ;
-int
+extern int
mqueue_done_waiting(mqueue_queue mq, mqueue_thread_signal mtsig) ;
+extern void
+mqueue_local_enqueue(mqueue_local_queue lmq, mqueue_block mqb) ;
+
+extern mqueue_block
+mqueue_local_dequeue(mqueue_local_queue lmq) ;
+
/*==============================================================================
* Access functions for mqueue_block fields -- mqb_set_xxx/mqb_get_xxx
*
@@ -217,6 +240,18 @@ mqb_dispatch(mqueue_block mqb, mqb_flag_t flag)
mqb->action(mqb, flag) ;
} ;
+Inline void
+mqb_dispatch_action(mqueue_block mqb)
+{
+ mqb->action(mqb, mqb_action) ;
+} ;
+
+Inline void
+mqb_dispatch_destroy(mqueue_block mqb)
+{
+ mqb->action(mqb, mqb_destroy) ;
+} ;
+
Inline void*
mqb_get_arg0(mqueue_block mqb)
{