c59b322747f88249c8f66d24a0bfddc88f99ff33
[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.8 2004/10/09 22:32:47 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
55 /**
56  *A struct containing all necessary information about each
57  *interface participating in the OLSD routing
58  */
59 struct interface 
60 {
61   /* IP version 4 */
62   struct        sockaddr int_addr;              /* address */
63   struct        sockaddr int_netmask;           /* netmask */
64   struct        sockaddr int_broadaddr;         /* broadcast address */
65   /* IP version 6 */
66   struct        sockaddr_in6 int6_addr;         /* Address */
67   struct        sockaddr_in6 int6_multaddr;     /* Multicast */
68   /* IP independent */
69   union         olsr_ip_addr ip_addr;
70   int           olsr_socket;                    /* The broadcast socket for this interface */
71   int           int_metric;                     /* metric of interface */
72   int           int_mtu;                        /* MTU of interface */
73   int           int_flags;                      /* see below */
74   char          *int_name;                      /* from kernel if structure */
75   int           if_index;                       /* Kernels index of this interface */
76   int           if_nr;                          /* This interfaces index internally*/
77   int           is_wireless;                    /* wireless interface or not*/
78   olsr_u16_t    olsr_seqnum;                    /* Olsr message seqno */
79   struct        interface *int_next;
80 };
81
82
83 #define OLSR_DEFAULT_MTU             1500
84
85
86 struct if_name
87 {
88   char *name;
89   int configured;
90   int index;
91   struct interface *interf;
92   struct if_name *next;
93 };
94
95 struct if_name *if_names;
96
97 int queued_ifs;
98
99 #define IFF_PASSIVE     0x200000        /* can't tell if up/down */
100 #define IFF_INTERFACE   0x400000        /* hardware interface */
101
102
103
104 /* Ifchange functions */
105
106 struct ifchgf
107 {
108   int (*function)(struct interface *, int);
109   struct ifchgf *next;
110 };
111
112 struct ifchgf *ifchgf_list;
113
114 /* Ifchange actions */
115
116 #define IFCHG_IF_ADD           1
117 #define IFCHG_IF_REMOVE        2
118 #define IFCHG_IF_UPDATE        3
119
120 /* Variables needed to set up new sockets */
121 extern int precedence;
122 extern int tos_bits;
123 extern int bufspace;
124
125
126 /* The interface linked-list */
127 struct interface *ifnet;
128
129 /* Datastructures to use when creating new sockets */
130 struct sockaddr_in addrsock;
131 struct sockaddr_in6 addrsock6;
132
133 int
134 ifinit(void);
135
136 struct interface *
137 if_ifwithsock(int);
138
139 struct  interface *
140 if_ifwithaddr(union olsr_ip_addr *);
141
142 int
143 get_ipv6_address(char *, struct sockaddr_in6 *, int);
144
145 void
146 queue_if(char *);
147
148 int
149 add_ifchgf(int (*f)(struct interface *, int));
150
151 int
152 del_ifchgf(int (*f)(struct interface *, int));
153
154 #endif