eb33df4559857d2335645d58e980bf986253191d
[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 olsrd-unik.
7  *
8  * olsrd-unik 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  * olsrd-unik 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 olsrd-unik; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  *
22  */
23
24
25 #ifndef _OLSR_INTERFACE
26 #define _OLSR_INTERFACE
27
28 #include "olsr_protocol.h"
29
30 #define _PATH_PROCNET_IFINET6           "/proc/net/if_inet6"
31
32
33 #define IPV6_ADDR_ANY           0x0000U
34
35 #define IPV6_ADDR_UNICAST       0x0001U
36 #define IPV6_ADDR_MULTICAST     0x0002U
37 #define IPV6_ADDR_ANYCAST       0x0004U
38
39 #define IPV6_ADDR_LOOPBACK      0x0010U
40 #define IPV6_ADDR_LINKLOCAL     0x0020U
41 #define IPV6_ADDR_SITELOCAL     0x0040U
42
43 #define IPV6_ADDR_COMPATv4      0x0080U
44
45 #define IPV6_ADDR_SCOPE_MASK    0x00f0U
46
47 #define IPV6_ADDR_MAPPED        0x1000U
48 #define IPV6_ADDR_RESERVED      0x2000U
49
50
51
52 /**
53  *A struct containing all necessary information about each
54  *interface participating in the OLSD routing
55  */
56 struct interface 
57 {
58   /* IP version 4 */
59   struct        sockaddr int_addr;              /* address */
60   struct        sockaddr int_netmask;           /* netmask */
61   struct        sockaddr int_broadaddr;         /* broadcast address */
62   /* IP version 6 */
63   struct        sockaddr_in6 int6_addr;         /* Address */
64   struct        sockaddr_in6 int6_multaddr;     /* Multicast */
65   /* IP independent */
66   union         olsr_ip_addr ip_addr;
67   int           olsr_socket;                    /* The broadcast socket for this interface */
68   int           int_metric;                     /* metric of interface */
69   int           int_flags;                      /* see below */
70   char          *int_name;                      /* from kernel if structure */
71   int           if_index;                       /* Kernels index of this interface */
72   int           if_nr;                          /* This interfaces index internally*/
73   int           is_wireless;                    /* wireless interface or not*/
74   olsr_u16_t    olsr_seqnum;                    /* Olsr message seqno */
75   struct        interface *int_next;
76 };
77
78
79
80
81
82 struct if_name
83 {
84   char *name;
85   int configured;
86   int index;
87   struct interface *interf;
88   struct if_name *next;
89 };
90
91 struct if_name *if_names;
92
93 int queued_ifs;
94
95 #define IFF_PASSIVE     0x200000        /* can't tell if up/down */
96 #define IFF_INTERFACE   0x400000        /* hardware interface */
97
98
99
100 /* Ifchange functions */
101
102 struct ifchgf
103 {
104   int (*function)(struct interface *, int);
105   struct ifchgf *next;
106 };
107
108 struct ifchgf *ifchgf_list;
109
110 /* Ifchange actions */
111
112 #define IFCHG_IF_ADD           1
113 #define IFCHG_IF_REMOVE        2
114 #define IFCHG_IF_UPDATE        3
115
116 /* Variables needed to set up new sockets */
117 extern int precedence;
118 extern int tos_bits;
119 extern int bufspace;
120
121
122 /* The interface linked-list */
123 struct interface *ifnet;
124
125 /* Datastructures to use when creating new sockets */
126 struct sockaddr_in addrsock;
127 struct sockaddr_in6 addrsock6;
128
129 int
130 ifinit();
131
132 struct interface *
133 if_ifwithsock(int);
134
135 struct  interface *
136 if_ifwithaddr(union olsr_ip_addr *);
137
138 int
139 get_ipv6_address(char *, struct sockaddr_in6 *, int);
140
141 void
142 queue_if(char *);
143
144 int
145 add_ifchgf(int (*f)(struct interface *, int));
146
147 int
148 del_ifchgf(int (*f)(struct interface *, int));
149
150 #endif