1 /*
2  *	BIRD -- I/O and event loop
3  *
4  *	Can be freely distributed and used under the terms of the GNU GPL.
5  */
6 
7 #ifndef _BIRD_BFD_IO_H_
8 #define _BIRD_BFD_IO_H_
9 
10 #include "nest/bird.h"
11 #include "lib/lists.h"
12 #include "lib/resource.h"
13 #include "lib/event.h"
14 #include "lib/socket.h"
15 // #include "lib/timer.h"
16 
17 
18 typedef struct timer2
19 {
20   resource r;
21   void (*hook)(struct timer2 *);
22   void *data;
23 
24   btime expires;			/* 0=inactive */
25   uint randomize;			/* Amount of randomization */
26   uint recurrent;			/* Timer recurrence */
27 
28   int index;
29 } timer2;
30 
31 
32 btime current_time(void);
33 
34 void ev2_schedule(event *e);
35 
36 
37 timer2 *tm2_new(pool *p);
38 void tm2_set(timer2 *t, btime when);
39 void tm2_start(timer2 *t, btime after);
40 void tm2_stop(timer2 *t);
41 
42 static inline int
tm2_active(timer2 * t)43 tm2_active(timer2 *t)
44 {
45   return t->expires != 0;
46 }
47 
48 static inline btime
tm2_remains(timer2 * t)49 tm2_remains(timer2 *t)
50 {
51   btime now = current_time();
52   return (t->expires > now) ? (t->expires - now) : 0;
53 }
54 
55 static inline timer2 *
tm2_new_init(pool * p,void (* hook)(struct timer2 *),void * data,uint rec,uint rand)56 tm2_new_init(pool *p, void (*hook)(struct timer2 *), void *data, uint rec, uint rand)
57 {
58   timer2 *t = tm2_new(p);
59   t->hook = hook;
60   t->data = data;
61   t->recurrent = rec;
62   t->randomize = rand;
63   return t;
64 }
65 
66 static inline void
tm2_set_max(timer2 * t,btime when)67 tm2_set_max(timer2 *t, btime when)
68 {
69   if (when > t->expires)
70     tm2_set(t, when);
71 }
72 
73 /*
74 static inline void
75 tm2_start_max(timer2 *t, btime after)
76 {
77   btime rem = tm2_remains(t);
78   tm2_start(t, MAX_(rem, after));
79 }
80 */
81 
82 
83 void sk_start(sock *s);
84 void sk_stop(sock *s);
85 
86 
87 
88 struct birdloop *birdloop_new(void);
89 void birdloop_start(struct birdloop *loop);
90 void birdloop_stop(struct birdloop *loop);
91 void birdloop_free(struct birdloop *loop);
92 
93 void birdloop_enter(struct birdloop *loop);
94 void birdloop_leave(struct birdloop *loop);
95 void birdloop_mask_wakeups(struct birdloop *loop);
96 void birdloop_unmask_wakeups(struct birdloop *loop);
97 
98 
99 #endif /* _BIRD_BFD_IO_H_ */
100