route get/set working, remotecontrol plugin updated
[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   uint32_t seq_used;
34   uint32_t seq_sent;
35
36   int msg_in_transit;
37
38   void (*cb_message)(struct nlmsghdr *hdr);
39   void (*cb_error)(uint32_t seq, int error);
40   void (*cb_timeout)(void);
41   void (*cb_done)(uint32_t seq);
42
43   struct olsr_timer_entry *timeout;
44 };
45
46 EXPORT int os_system_netlink_add(struct os_system_netlink *,
47     int protocol, uint32_t multicast);
48 EXPORT void os_system_netlink_remove(struct os_system_netlink *);
49 EXPORT int os_system_netlink_send(struct os_system_netlink *fd,
50     struct nlmsghdr *nl_hdr);
51
52 EXPORT int os_system_netlink_addreq(struct nlmsghdr *n,
53     int type, const void *data, int len);
54
55 static INLINE int
56 os_system_netlink_addnetaddr(struct nlmsghdr *n,
57     int type, const struct netaddr *addr) {
58   return os_system_netlink_addreq(n, type, addr->addr, netaddr_get_maxprefix(addr)/8);
59 }
60
61
62 #endif /* OS_SYSTEM_LINUX_H_ */