New configfile parser and configuration scheme integrated
[olsrd.git] / src / interfaces.h
1
2 /*
3  * OLSR ad-hoc routing table management protocol
4  * Copyright (C) 2003 Andreas T√łnnesen (andreto@ifi.uio.no)
5  *
6  * This file is part of the olsr.org OLSR daemon.
7  *
8  * olsr.org is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * olsr.org is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with olsr.org; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  * 
22  * 
23  * $Id: interfaces.h,v 1.9 2004/10/18 13:13:36 kattemat Exp $
24  *
25  */
26
27
28 #ifndef _OLSR_INTERFACE
29 #define _OLSR_INTERFACE
30
31 #include "olsr_protocol.h"
32
33 #define _PATH_PROCNET_IFINET6           "/proc/net/if_inet6"
34
35
36 #define IPV6_ADDR_ANY           0x0000U
37
38 #define IPV6_ADDR_UNICAST       0x0001U
39 #define IPV6_ADDR_MULTICAST     0x0002U
40 #define IPV6_ADDR_ANYCAST       0x0004U
41
42 #define IPV6_ADDR_LOOPBACK      0x0010U
43 #define IPV6_ADDR_LINKLOCAL     0x0020U
44 #define IPV6_ADDR_SITELOCAL     0x0040U
45
46 #define IPV6_ADDR_COMPATv4      0x0080U
47
48 #define IPV6_ADDR_SCOPE_MASK    0x00f0U
49
50 #define IPV6_ADDR_MAPPED        0x1000U
51 #define IPV6_ADDR_RESERVED      0x2000U
52
53
54 struct vtimes
55 {
56   olsr_u8_t hello;
57   olsr_u8_t tc;
58   olsr_u8_t mid;
59   olsr_u8_t hna;
60 };
61
62 /**
63  *A struct containing all necessary information about each
64  *interface participating in the OLSD routing
65  */
66 struct interface 
67 {
68   /* IP version 4 */
69   struct        sockaddr int_addr;              /* address */
70   struct        sockaddr int_netmask;           /* netmask */
71   struct        sockaddr int_broadaddr;         /* broadcast address */
72   /* IP version 6 */
73   struct        sockaddr_in6 int6_addr;         /* Address */
74   struct        sockaddr_in6 int6_multaddr;     /* Multicast */
75   /* IP independent */
76   union         olsr_ip_addr ip_addr;
77   int           olsr_socket;                    /* The broadcast socket for this interface */
78   int           int_metric;                     /* metric of interface */
79   int           int_mtu;                        /* MTU of interface */
80   int           int_flags;                      /* see below */
81   char          *int_name;                      /* from kernel if structure */
82   int           if_index;                       /* Kernels index of this interface */
83   int           if_nr;                          /* This interfaces index internally*/
84   int           is_wireless;                    /* wireless interface or not*/
85   olsr_u16_t    olsr_seqnum;                    /* Olsr message seqno */
86
87   float         hello_etime;
88   struct        vtimes valtimes;
89
90   struct        interface *int_next;
91 };
92
93
94 #define OLSR_DEFAULT_MTU             1500
95
96
97 struct if_name
98 {
99   char *name;
100   int configured;
101   int index;
102   float max_jitter;
103   struct interface *interf;
104   struct if_config_options *cnf;
105   struct if_name *next;
106 };
107
108 struct if_name *if_names;
109
110 int queued_ifs;
111
112 #define IFF_PASSIVE     0x200000        /* can't tell if up/down */
113 #define IFF_INTERFACE   0x400000        /* hardware interface */
114
115
116
117 /* Ifchange functions */
118
119 struct ifchgf
120 {
121   int (*function)(struct interface *, int);
122   struct ifchgf *next;
123 };
124
125 struct ifchgf *ifchgf_list;
126
127 /* Ifchange actions */
128
129 #define IFCHG_IF_ADD           1
130 #define IFCHG_IF_REMOVE        2
131 #define IFCHG_IF_UPDATE        3
132
133 /* Variables needed to set up new sockets */
134 extern int precedence;
135 extern int tos_bits;
136 extern int bufspace;
137
138
139 /* The interface linked-list */
140 struct interface *ifnet;
141
142 /* Datastructures to use when creating new sockets */
143 struct sockaddr_in addrsock;
144 struct sockaddr_in6 addrsock6;
145
146 int
147 ifinit(void);
148
149 struct interface *
150 if_ifwithsock(int);
151
152 struct  interface *
153 if_ifwithaddr(union olsr_ip_addr *);
154
155 void
156 queue_if(char *, struct if_config_options *);
157
158 int
159 add_ifchgf(int (*f)(struct interface *, int));
160
161 int
162 del_ifchgf(int (*f)(struct interface *, int));
163
164 #endif