595b0e36f582cc3d2a7d0916e208e3f65617f848
[oonf.git] / src / core / os_linux / os_system_linux.h
1 /*
2  * os_system_linux.h
3  *
4  *  Created on: Oct 15, 2011
5  *      Author: henning
6  */
7
8 #ifndef OS_SYSTEM_LINUX_H_
9 #define OS_SYSTEM_LINUX_H_
10
11 #ifndef OS_NET_SPECIFIC_INCLUDE
12 #error "DO not include this file directly, always use 'os_system.h'"
13 #endif
14
15 #include <linux/netlink.h>
16
17 #include "common/netaddr.h"
18 #include "olsr_socket.h"
19 #include "os_helper.h"
20
21 /* Linux os_system runs on "all default" except for init/cleanup */
22 #define OS_SYSTEM_INIT         OS_SPECIFIC
23 #define OS_SYSTEM_INIT_IF      OS_SPECIFIC
24 #define OS_SYSTEM_SET_IFSTATE  OS_SPECIFIC
25 #define OS_SYSTEM_GETTIMEOFDAY OS_GENERIC
26 #define OS_SYSTEM_LOG          OS_GENERIC
27
28 struct os_system_netlink {
29   struct olsr_socket_entry socket;
30   struct autobuf out;
31   struct nlmsghdr *in;
32
33   int seq_used;
34   int seq_sent;
35
36   int msg_in_transit;
37
38   void (*cb_message)(struct nlmsghdr *hdr);
39   void (*cb_feedback)(uint32_t seq, int error);
40   void (*cb_timeout)(void);
41
42   struct olsr_timer_entry *timeout;
43 };
44
45 EXPORT int os_system_netlink_add(struct os_system_netlink *,
46     int protocol, uint32_t multicast);
47 EXPORT void os_system_netlink_remove(struct os_system_netlink *);
48 EXPORT int os_system_netlink_send(struct os_system_netlink *fd,
49     struct nlmsghdr *nl_hdr);
50
51 EXPORT int os_system_netlink_addreq(struct nlmsghdr *n,
52     int type, const void *data, int len);
53
54 static INLINE int
55 os_system_netlink_addnetaddr(struct nlmsghdr *n,
56     int type, const struct netaddr *addr) {
57   return os_system_netlink_addreq(n, type, addr->addr, netaddr_get_maxprefix(addr)/8);
58 }
59
60
61 #endif /* OS_SYSTEM_LINUX_H_ */