/[dynamips]/upstream/dynamips-0.2.6-RC2/timer.h
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /upstream/dynamips-0.2.6-RC2/timer.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3 - (hide annotations)
Sat Oct 6 16:05:34 2007 UTC (13 years, 3 months ago) by dpavlin
File MIME type: text/plain
File size: 2864 byte(s)
dynamips-0.2.6-RC2

1 dpavlin 3 /*
2     * Cisco 7200 (Predator) simulation platform.
3     * Copyright (c) 2005,2006 Christophe Fillot (cf@utc.fr)
4     *
5     * timer.h: Management of timers.
6     */
7    
8     #ifndef __TIMER_H__
9     #define __TIMER_H__ 1
10    
11     #include <sys/types.h>
12     #include <pthread.h>
13     #include "utils.h"
14    
15     /* Default number of Timer Queues */
16     #define TIMERQ_NUMBER 10
17    
18     /* Timer definitions */
19     typedef m_uint64_t timer_id;
20    
21     typedef struct timer_entry timer_entry_t;
22     typedef struct timer_queue timer_queue_t;
23    
24     /* Defines callback function format */
25     typedef int (*timer_proc)(void *,timer_entry_t *);
26    
27     /* Timer flags */
28     #define TIMER_DELETED 1
29     #define TIMER_RUNNING 2
30     #define TIMER_BOUNDARY 4
31    
32     /* Number of entries in hash table */
33     #define TIMER_HASH_SIZE 512
34    
35     /* Timer properties */
36     struct timer_entry {
37     long interval; /* Interval in msecs */
38     m_tmcnt_t expire,offset; /* Next execution date */
39     timer_proc callback; /* User callback function */
40     void *user_arg; /* Optional user data */
41     int flags; /* Flags */
42     timer_id id; /* Unique identifier */
43     int level; /* Criticity level */
44    
45     timer_queue_t *queue; /* Associated Timer Queue */
46     timer_entry_t *prev,*next; /* Double linked-list */
47     };
48    
49     /* Timer Queue */
50     struct timer_queue {
51     timer_entry_t *list; /* List of timers */
52     pthread_mutex_t lock; /* Mutex for concurrent accesses */
53     pthread_cond_t schedule; /* Scheduling condition */
54     pthread_t thread; /* Thread running timer loop */
55     int running; /* Running flag */
56     int timer_count; /* Number of timers */
57     int level; /* Sum of criticity levels */
58     timer_queue_t *next; /* Next Timer Queue (for pools) */
59     };
60    
61     /* Lock and unlock access to a timer queue */
62     #define TIMERQ_LOCK(queue) pthread_mutex_lock(&(queue)->lock)
63     #define TIMERQ_UNLOCK(queue) pthread_mutex_unlock(&(queue)->lock)
64    
65     /* Remove a timer */
66     int timer_remove(timer_id id);
67    
68     /* Create a new timer */
69     timer_id timer_create_entry(m_tmcnt_t interval,int boundary,int level,
70     timer_proc callback,void *user_arg);
71    
72     /* Create a timer on boundary, with an offset */
73     timer_id timer_create_with_offset(m_tmcnt_t interval,m_tmcnt_t offset,
74     int level,timer_proc callback,
75     void *user_arg);
76    
77     /* Set a new interval for a timer */
78     int timer_set_interval(timer_id id,long interval);
79    
80     /* Create a new timer queue */
81     timer_queue_t *timer_create_queue(void);
82    
83     /* Flush queues */
84     void timer_flush_queues(void);
85    
86     /* Add a specified number of queues to the pool */
87     int timer_pool_add_queues(int nr_queues);
88    
89     /* Initialize timer sub-system */
90     int timer_init(void);
91    
92     #endif

  ViewVC Help
Powered by ViewVC 1.1.26