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