xref: /aosp_15_r20/external/libnfnetlink/src/rtnl.h (revision a376eb3279f225b393114c4820c780cbda860a6c)
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