Simplify test case creation
[oonf.git] / include / oonf / base / os_vif.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_VIF_H_
47 #define OS_VIF_H_
48
49 #include <oonf/libcommon/avl.h>
50 #include <oonf/oonf.h>
51
52 #include <oonf/base/os_fd.h>
53
54 /*! subsystem identifier */
55 #define OONF_OS_VIF_SUBSYSTEM "os_vif"
56
57 struct os_vif;
58
59 /* include os-specific headers */
60 #if defined(__linux__)
61 #include <oonf/base/os_linux/os_vif_linux.h>
62 #else
63 #error "Unknown operation system"
64 #endif
65
66 /**
67  * types of virtual interfaces
68  */
69 enum vif_type
70 {
71   /*! IP level virtual interface */
72   OS_VIF_IP,
73
74   /*! MAC level virtual interface */
75   OS_VIF_MAC,
76 };
77
78 /**
79  * Definition of a virtual interface
80  */
81 struct os_vif {
82   /*! name of virtual interface */
83   const char *if_name;
84
85   /*! type of virtual interface */
86   enum vif_type type;
87
88   /*! socket for virtual interface */
89   struct os_fd *fd;
90
91   /*! hook into global tree of virtual interfaces */
92   struct avl_node _vif_node;
93
94   /*! os specific virtual interface data */
95   struct os_vif_internal _internal;
96 };
97
98 static INLINE int os_vif_open(struct os_fd *fd, struct os_vif *vif);
99 static INLINE void os_vif_close(struct os_vif *vif);
100
101 static INLINE struct avl_tree *os_vif_get_tree(void);
102
103 /**
104  * Get virtual interface handler
105  * @param name name of virtual interface
106  * @return handler, NULL if not found
107  */
108 static INLINE struct os_vif *
109 os_vif_get(const char *name) {
110   struct os_vif *vif;
111   return avl_find_element(os_vif_get_tree(), name, vif, _vif_node);
112 }
113
114 /**
115  * Tests if a virtual interface has been initialized
116  * @param vif pointer to virtual interface state
117  * @return true if initialized, false otherwise
118  */
119 static INLINE bool
120 os_vif_is_active(struct os_vif *vif) {
121   return avl_is_node_added(&vif->_vif_node);
122 }
123
124 #endif /* OS_VIF_H_ */