aboutsummaryrefslogtreecommitdiff
path: root/src/rtnl.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/rtnl.h')
-rw-r--r--src/rtnl.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/rtnl.h b/src/rtnl.h
new file mode 100644
index 0000000..0c403dc
--- /dev/null
+++ b/src/rtnl.h
@@ -0,0 +1,37 @@
+#ifndef _RTNL_H
+#define _RTNL_H
+
+#include <linux/types.h>
+#include <linux/rtnetlink.h>
+
+struct rtnl_handler {
+ struct rtnl_handler *next;
+
+ u_int16_t nlmsg_type;
+ int (*handlefn)(struct nlmsghdr *h, void *arg);
+ void *arg;
+};
+
+struct rtnl_handle {
+ int rtnl_fd;
+ int rtnl_seq;
+ int rtnl_dump;
+ struct sockaddr_nl rtnl_local;
+ struct rtnl_handler *handlers;
+};
+
+/* api for handler plugins */
+int rtnl_handler_register(struct rtnl_handle *rtnl_handle,
+ struct rtnl_handler *hdlr);
+int rtnl_handler_unregister(struct rtnl_handle *rtnl_handle,
+ struct rtnl_handler *hdlr);
+int rtnl_parse_rtattr(struct rtattr *tb[], int max, struct rtattr *rta, int len);
+int rtnl_dump_type(struct rtnl_handle *rtnl_handle, unsigned int type);
+
+/* api for core program */
+struct rtnl_handle *rtnl_open(void);
+void rtnl_close(struct rtnl_handle *rtnl_handle);
+int rtnl_receive(struct rtnl_handle *rtnl_handle);
+int rtnl_receive_multi(struct rtnl_handle *rtnl_handle);
+
+#endif