New "unix" subdirectory for Unix-like OSes. Initial BSD port. Use a
[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.12 2004/11/05 02:06:13 tlopatic 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 #include <sys/time.h>
34
35 /**
36  * Process changes functions
37  */
38
39 struct pcf
40 {
41   int (*function)(int, int, int);
42   struct pcf *next;
43 };
44
45 struct pcf *pcf_list;
46
47
48 olsr_bool changes_topology;
49 olsr_bool changes_neighborhood;
50 olsr_bool changes_hna;
51
52 olsr_u16_t message_seqno;
53
54 #define TIMED_OUT(s1) \
55         timercmp(s1, &now, <)
56
57 /*
58  * Queueing macros
59  */
60
61 /* First "argument" is NOT a pointer! */
62
63 #define QUEUE_ELEM(pre, new) \
64         pre.next->prev = new; \
65         new->next = pre.next; \
66         new->prev = &pre; \
67         pre.next = new
68
69 #define DEQUEUE_ELEM(elem) \
70         elem->prev->next = elem->next; \
71         elem->next->prev = elem->prev
72
73
74 void
75 register_pcf(int (*)(int, int, int));
76
77 inline void
78 olsr_process_changes(void);
79
80 inline void
81 olsr_init_timer(olsr_u32_t, struct timeval *);
82
83 inline void
84 olsr_get_timestamp(olsr_u32_t, struct timeval *);
85
86 void
87 init_msg_seqno(void);
88
89 inline olsr_u16_t
90 get_msg_seqno(void);
91
92 int
93 olsr_forward_message(union olsr_message *, 
94                      union olsr_ip_addr *, 
95                      olsr_u16_t, 
96                      struct interface *, 
97                      union olsr_ip_addr *);
98
99 void
100 set_buffer_timer(struct interface *);
101
102 void
103 olsr_init_tables(void);
104
105 void
106 olsr_init_willingness(void);
107
108 void
109 olsr_update_willingness(void *);
110
111 olsr_u8_t
112 olsr_calculate_willingness(void);
113
114 void
115 olsr_exit(const char *, int);
116
117 void *
118 olsr_malloc(size_t, const char *);
119
120 inline int
121 olsr_printf(int, char *, ...);
122
123 #endif