4f4c6ede769f50f5f20895c0468ee8043cb60f46
[olsrd.git] / src / olsr.h
1 /*
2  * OLSR ad-hoc routing table management protocol
3  * Copyright (C) 2004 Andreas T√łnnesen (andreto@ifi.uio.no)
4  *
5  * This file is part of the olsr.org OLSR daemon.
6  *
7  * olsr.org is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * olsr.org is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with olsr.org; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20  * 
21  * 
22  * $Id: olsr.h,v 1.9 2004/10/09 22:32:47 kattemat Exp $
23  *
24  */
25
26
27 #ifndef _OLSR_FUNCTIONS
28 #define _OLSR_FUNCTIONS
29
30 #include "olsr_protocol.h"
31 #include "interfaces.h"
32
33
34 /**
35  * Process changes functions
36  */
37
38 struct pcf
39 {
40   int (*function)(int, int, int);
41   struct pcf *next;
42 };
43
44 struct pcf *pcf_list;
45
46
47 olsr_8_t changes_topology;
48 olsr_8_t changes_neighborhood;
49 olsr_8_t changes_hna;
50
51 olsr_u16_t message_seqno;
52
53 #define TIMED_OUT(s1) \
54         timercmp(s1, &now, <)
55
56 /*
57  * Queueing macros
58  */
59
60 /* First "argument" is NOT a pointer! */
61
62 #define QUEUE_ELEM(pre, new) \
63         pre.next->prev = new; \
64         new->next = pre.next; \
65         new->prev = &pre; \
66         pre.next = new
67
68 #define DEQUEUE_ELEM(elem) \
69         elem->prev->next = elem->next; \
70         elem->next->prev = elem->prev
71
72
73 void
74 register_pcf(int (*)(int, int, int));
75
76 inline void
77 olsr_process_changes(void);
78
79 inline void
80 olsr_init_timer(olsr_u32_t, struct timeval *);
81
82 inline void
83 olsr_get_timestamp(olsr_u32_t, struct timeval *);
84
85 void
86 init_msg_seqno(void);
87
88 inline olsr_u16_t
89 get_msg_seqno(void);
90
91 int
92 olsr_forward_message(union olsr_message *, 
93                      union olsr_ip_addr *, 
94                      olsr_u16_t, 
95                      struct interface *, 
96                      union olsr_ip_addr *);
97
98 void
99 set_buffer_timer(struct interface *);
100
101 void
102 olsr_init_tables(void);
103
104 void
105 olsr_init_willingness(void);
106
107 void
108 olsr_update_willingness(void);
109
110 olsr_u8_t
111 olsr_calculate_willingness(void);
112
113 void
114 olsr_exit(const char *, int);
115
116 void *
117 olsr_malloc(size_t, const char *);
118
119 inline int
120 olsr_printf(int, char *, ...);
121
122 #endif