diff options
Diffstat (limited to 'src/rtnl.h')
-rw-r--r-- | src/rtnl.h | 37 |
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 |