| #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 |