5ff2afaf7120721bb5345f709189921521425aec
[oonf.git] / include / oonf / subsystems / os_tunnel.h
1
2 /*
3  * The olsr.org Optimized Link-State Routing daemon version 2 (olsrd2)
4  * Copyright (c) 2004-2015, the olsr.org team - see HISTORY file
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * * Redistributions of source code must retain the above copyright
12  *   notice, this list of conditions and the following disclaimer.
13  * * Redistributions in binary form must reproduce the above copyright
14  *   notice, this list of conditions and the following disclaimer in
15  *   the documentation and/or other materials provided with the
16  *   distribution.
17  * * Neither the name of olsr.org, olsrd nor the names of its
18  *   contributors may be used to endorse or promote products derived
19  *   from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32  * POSSIBILITY OF SUCH DAMAGE.
33  *
34  * Visit http://www.olsr.org for more information.
35  *
36  * If you find this software useful feel free to make a donation
37  * to the project. For more information see the website or contact
38  * the copyright holders.
39  *
40  */
41
42 /**
43  * @file
44  */
45
46 #ifndef OS_TUNNEL_H_
47 #define OS_TUNNEL_H_
48
49 #include <oonf/libcommon/avl.h>
50 #include <oonf/oonf.h>
51 #include <oonf/libcommon/netaddr.h>
52
53 /*! subsystem identifier */
54 #define OONF_OS_TUNNEL_SUBSYSTEM "os_tunnel"
55
56 struct os_tunnel;
57
58 /* include os-specific headers */
59 #if defined(__linux__)
60 #include <oonf/subsystems/os_linux/os_tunnel_linux.h>
61 #else
62 #error "Unknown operation system"
63 #endif
64
65 enum os_tunnel_type
66 {
67   OS_TUNNEL_IPV4,
68   OS_TUNNEL_IPV6,
69   OS_TUNNEL_GRE,
70 };
71
72 struct os_tunnel_parameter {
73   /*! name of the tunnel interface */
74   char tunnel_if[IF_NAMESIZE];
75
76   /*! inner type of data used by the tunnel */
77   enum os_tunnel_type inner_type;
78
79   /*! interface the tunnel is bound to, can be empty */
80   char base_if[IF_NAMESIZE];
81
82   /*! local IP address of the tunnel */
83   struct netaddr local;
84
85   /*! remote IP address of the tunnel */
86   struct netaddr remote;
87
88   /*! true that tunnel should inherit TOS (if possible) */
89   bool inhert_tos;
90
91   /*! true that tunnel should inherit the flowlabel (if possible) */
92   bool inhert_flowlabel;
93
94   /*! IP ttl of tunnel, 0 to inherit TTL (if possible) */
95   uint8_t tunnel_ttl;
96 };
97
98 struct os_tunnel {
99   /*! configuration data of tunnel */
100   struct os_tunnel_parameter p;
101
102   /*! tunnel interface index */
103   unsigned if_index;
104
105   /*! hook into global tree of tunnels */
106   struct avl_node _node;
107
108   /*! os specific tunnel data */
109   struct os_tunnel_internal _internal;
110 };
111
112 static INLINE int os_tunnel_add(struct os_tunnel *);
113 static INLINE int os_tunnel_remove(struct os_tunnel *);
114
115 #endif /* OS_TUNNEL_H_ */