1*a376eb32SXin Li #ifndef _RTNL_H 2*a376eb32SXin Li #define _RTNL_H 3*a376eb32SXin Li 4*a376eb32SXin Li #include <linux/types.h> 5*a376eb32SXin Li #include <linux/rtnetlink.h> 6*a376eb32SXin Li 7*a376eb32SXin Li struct rtnl_handler { 8*a376eb32SXin Li struct rtnl_handler *next; 9*a376eb32SXin Li 10*a376eb32SXin Li u_int16_t nlmsg_type; 11*a376eb32SXin Li int (*handlefn)(struct nlmsghdr *h, void *arg); 12*a376eb32SXin Li void *arg; 13*a376eb32SXin Li }; 14*a376eb32SXin Li 15*a376eb32SXin Li struct rtnl_handle { 16*a376eb32SXin Li int rtnl_fd; 17*a376eb32SXin Li int rtnl_seq; 18*a376eb32SXin Li int rtnl_dump; 19*a376eb32SXin Li struct sockaddr_nl rtnl_local; 20*a376eb32SXin Li struct rtnl_handler *handlers; 21*a376eb32SXin Li }; 22*a376eb32SXin Li 23*a376eb32SXin Li /* api for handler plugins */ 24*a376eb32SXin Li int rtnl_handler_register(struct rtnl_handle *rtnl_handle, 25*a376eb32SXin Li struct rtnl_handler *hdlr); 26*a376eb32SXin Li int rtnl_handler_unregister(struct rtnl_handle *rtnl_handle, 27*a376eb32SXin Li struct rtnl_handler *hdlr); 28*a376eb32SXin Li int rtnl_parse_rtattr(struct rtattr *tb[], int max, struct rtattr *rta, int len); 29*a376eb32SXin Li int rtnl_dump_type(struct rtnl_handle *rtnl_handle, unsigned int type); 30*a376eb32SXin Li 31*a376eb32SXin Li /* api for core program */ 32*a376eb32SXin Li struct rtnl_handle *rtnl_open(void); 33*a376eb32SXin Li void rtnl_close(struct rtnl_handle *rtnl_handle); 34*a376eb32SXin Li int rtnl_receive(struct rtnl_handle *rtnl_handle); 35*a376eb32SXin Li int rtnl_receive_multi(struct rtnl_handle *rtnl_handle); 36*a376eb32SXin Li 37*a376eb32SXin Li #endif 38