pud: use the proper __ANDROID__ define
[olsrd.git] / lib / pud / src / netTools.h
1 #ifndef _PUD_NETTOOLS_H_
2 #define _PUD_NETTOOLS_H_
3
4 /* Plugin includes */
5
6 /* OLSR includes */
7 #include "olsr_types.h"
8
9 /* System includes */
10 #include <assert.h>
11 #include <unistd.h>
12 #include <stdbool.h>
13 #include <net/if.h>
14
15
16 #ifdef __ANDROID__
17 typedef __in_port_t in_port_t;
18 #endif /* __ANDROID_API__ */
19
20 /**
21  Get the port in an OLSR socket address
22
23  @param addr
24  A pointer to OLSR socket address
25  @param defaultPort
26  The default port (in host byte order), returned when addr is NULL
27  @return
28  The port (in network byte order)
29  */
30 static inline in_port_t getOlsrSockaddrPort(union olsr_sockaddr * addr, in_port_t defaultPort) {
31         if (!addr) {
32                 return htons(defaultPort);
33         }
34
35         if (addr->in.sa_family == AF_INET) {
36                 return addr->in4.sin_port;
37         } else {
38                 return addr->in6.sin6_port;
39         }
40 }
41
42 /**
43  Set the port in an OLSR socket address
44
45  @param addr
46  A pointer to OLSR socket address
47  @param port
48  The port (in network byte order)
49  */
50 static inline void setOlsrSockaddrPort(union olsr_sockaddr * addr, in_port_t port) {
51         if (!addr) {
52                 return;
53         }
54
55         if (addr->in.sa_family == AF_INET) {
56                 addr->in4.sin_port = port;
57         } else {
58                 addr->in6.sin6_port = port;
59         }
60 }
61
62 /**
63  Determine whether an IP address (v4 or v6) is a multicast address.
64
65  @param addr
66  An IP address (v4 or v6)
67
68  @return
69  - true when the address is a multicast address
70  - false otherwise
71  */
72 static inline bool isMulticast(union olsr_sockaddr *addr) {
73         assert(addr != NULL);
74
75         if (addr->in.sa_family == AF_INET) {
76                 return IN_MULTICAST(ntohl(addr->in4.sin_addr.s_addr));
77         }
78
79         return IN6_IS_ADDR_MULTICAST(&addr->in6.sin6_addr);
80 }
81
82
83 unsigned char * getHardwareAddress(const char * ifName, int family,
84                 struct ifreq *ifr);
85
86 struct in_addr * getIPv4Address(const char * ifName, struct ifreq *ifr);
87
88 #endif /* _PUD_NETTOOLS_H_ */