Port all olsrd 0.6.0 OS specific files and adapt them to the new interface.
[olsrd.git] / src / os_net.h
1
2 /*
3  * The olsr.org Optimized Link-State Routing daemon(olsrd)
4  * Copyright (c) 2004-2009, 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 /*
44  * This file defines the OS dependent network related functions
45  * that MUST be available to olsrd.
46  * The implementations of the functions should be found in
47  * <OS>/net.c (e.g. linux/net.c)
48  */
49
50
51 #ifndef _OLSR_NET_OS_H
52 #define _OLSR_NET_OS_H
53
54 #include <assert.h>
55 #include <sys/time.h>
56
57 #include "olsr_types.h"
58 #include "interfaces.h"
59
60 /* OS dependent functions socket functions */
61 ssize_t olsr_sendto(int, const void *, size_t, int, const union olsr_sockaddr *);
62 ssize_t olsr_recvfrom(int, void *, size_t, int, union olsr_sockaddr *, socklen_t *);
63 int olsr_select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
64
65 int EXPORT(getsocket4)(int, struct interface *, bool, uint16_t);
66 int EXPORT(getsocket6)(int, struct interface *, bool, uint16_t);
67
68 int EXPORT(set_nonblocking) (int fd);
69
70 /* OS dependent interface functions */
71 void os_init_global_ifoptions(void);
72 int os_cleanup_global_ifoptions(void);
73
74 int os_init_interface(struct interface *, struct olsr_if_config *);
75 void os_cleanup_interface(struct interface *);
76
77 int chk_if_changed(struct olsr_if_config *);
78
79 bool EXPORT(olsr_if_isup)(const char * dev);
80 int EXPORT(olsr_if_set_state)(const char *dev, bool up);
81
82 #ifdef WIN32
83 void CallSignalHandler(void);
84 void ListInterfaces(void);
85 #endif
86
87 void os_set_olsr_socketoptions(int socket);
88
89 int get_ipv6_address(char *, struct sockaddr_in6 *, int);
90
91 /* helper function for getting a socket */
92 static inline int
93 getsocket46(int family, int bufferSize, struct interface *interf,
94     bool bind_to_unicast, uint16_t port) {
95   assert (family == AF_INET || family == AF_INET6);
96
97   if (family == AF_INET) {
98     return getsocket4(bufferSize, interf, bind_to_unicast, port);
99   }
100   else {
101     return getsocket6(bufferSize, interf, bind_to_unicast, port);
102   }
103 }
104 #endif
105
106 /*
107  * Local Variables:
108  * c-basic-offset: 2
109  * indent-tabs-mode: nil
110  * End:
111  */