aadd7509a55802f72afeb950a05e63672ba51b8f
[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 olsrd-unik.
6  *
7  * UniK olsrd 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  * UniK olsrd 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 olsrd-unik; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20  *
21  */
22
23
24 #ifndef _OLSR_FUNCTIONS
25 #define _OLSR_FUNCTIONS
26
27 #include "olsr_protocol.h"
28 #include "interfaces.h"
29
30
31 /**
32  * Process changes functions
33  */
34
35 struct pcf
36 {
37   int (*function)(int, int, int);
38   struct pcf *next;
39 };
40
41 struct pcf *pcf_list;
42
43
44 olsr_8_t changes_topology;
45 olsr_8_t changes_neighborhood;
46 olsr_8_t changes_hna;
47
48 olsr_u16_t message_seqno;
49
50 #define TIMED_OUT(s1) \
51         timercmp(s1, &now, <)
52
53 /*
54  * Queueing macros
55  */
56
57 /* First "argument" is NOT a pointer! */
58
59 #define QUEUE_ELEM(pre, new) \
60         pre.next->prev = new; \
61         new->next = pre.next; \
62         new->prev = &pre; \
63         pre.next = new
64
65 #define DEQUEUE_ELEM(elem) \
66         elem->prev->next = elem->next; \
67         elem->next->prev = elem->prev
68
69
70 void
71 register_pcf(int (*)(int, int, int));
72
73 inline void
74 olsr_process_changes();
75
76 inline void
77 olsr_init_timer(olsr_u32_t, struct timeval *);
78
79 inline void
80 olsr_get_timestamp(olsr_u32_t, struct timeval *);
81
82 void
83 init_msg_seqno();
84
85 inline olsr_u16_t
86 get_msg_seqno();
87
88 int
89 olsr_forward_message(union olsr_message *, 
90                      union olsr_ip_addr *, 
91                      olsr_u16_t, 
92                      struct interface *, 
93                      union olsr_ip_addr *);
94
95 int
96 buffer_forward(union olsr_message *);
97
98 void
99 olsr_init_tables();
100
101 void
102 olsr_init_willingness();
103
104 void
105 olsr_update_willingness();
106
107 olsr_u8_t
108 olsr_calculate_willingness();
109
110 void
111 olsr_exit(const char *, int);
112
113 void *
114 olsr_malloc(size_t, const char *);
115
116 inline int
117 olsr_printf(int, char *, ...);
118
119 #endif