Statistics
| Branch: | Revision:

iof-bird-daemon / proto / bfd / io.h @ 48e5f32d

History | View | Annotate | Download (1.81 KB)

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
43
tm2_active(timer2 *t)
44
{
45
  return t->expires != 0;
46
}
47

    
48
static inline btime 
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 *
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
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_ */