xref: /aosp_15_r20/external/ethtool/netlink/nlsock.h (revision 1b481fc3bb1b45d4cf28d1ec12969dc1055f555d)
1*1b481fc3SMaciej Żenczykowski /*
2*1b481fc3SMaciej Żenczykowski  * nlsock.h - netlink socket
3*1b481fc3SMaciej Żenczykowski  *
4*1b481fc3SMaciej Żenczykowski  * Declarations of netlink socket structure and related functions.
5*1b481fc3SMaciej Żenczykowski  */
6*1b481fc3SMaciej Żenczykowski 
7*1b481fc3SMaciej Żenczykowski #ifndef ETHTOOL_NETLINK_NLSOCK_H__
8*1b481fc3SMaciej Żenczykowski #define ETHTOOL_NETLINK_NLSOCK_H__
9*1b481fc3SMaciej Żenczykowski 
10*1b481fc3SMaciej Żenczykowski #include <libmnl/libmnl.h>
11*1b481fc3SMaciej Żenczykowski #include <linux/netlink.h>
12*1b481fc3SMaciej Żenczykowski #include <linux/genetlink.h>
13*1b481fc3SMaciej Żenczykowski #include <linux/ethtool_netlink.h>
14*1b481fc3SMaciej Żenczykowski #include "msgbuff.h"
15*1b481fc3SMaciej Żenczykowski 
16*1b481fc3SMaciej Żenczykowski struct nl_context;
17*1b481fc3SMaciej Żenczykowski 
18*1b481fc3SMaciej Żenczykowski /**
19*1b481fc3SMaciej Żenczykowski  * struct nl_socket - netlink socket abstraction
20*1b481fc3SMaciej Żenczykowski  * @nlctx:   netlink context
21*1b481fc3SMaciej Żenczykowski  * @sk:      libmnl socket handle
22*1b481fc3SMaciej Żenczykowski  * @msgbuff: embedded message buffer used by default
23*1b481fc3SMaciej Żenczykowski  * @port:    port number for netlink header
24*1b481fc3SMaciej Żenczykowski  * @seq:     autoincremented sequence number for netlink header
25*1b481fc3SMaciej Żenczykowski  * @nl_fam:  netlink family (e.g. NETLINK_GENERIC or NETLINK_ROUTE)
26*1b481fc3SMaciej Żenczykowski  */
27*1b481fc3SMaciej Żenczykowski struct nl_socket {
28*1b481fc3SMaciej Żenczykowski 	struct nl_context	*nlctx;
29*1b481fc3SMaciej Żenczykowski 	struct mnl_socket	*sk;
30*1b481fc3SMaciej Żenczykowski 	struct nl_msg_buff	msgbuff;
31*1b481fc3SMaciej Żenczykowski 	unsigned int		port;
32*1b481fc3SMaciej Żenczykowski 	unsigned int		seq;
33*1b481fc3SMaciej Żenczykowski 	int			nl_fam;
34*1b481fc3SMaciej Żenczykowski };
35*1b481fc3SMaciej Żenczykowski 
36*1b481fc3SMaciej Żenczykowski int nlsock_init(struct nl_context *nlctx, struct nl_socket **__nlsk,
37*1b481fc3SMaciej Żenczykowski 		int nl_fam);
38*1b481fc3SMaciej Żenczykowski void nlsock_done(struct nl_socket *nlsk);
39*1b481fc3SMaciej Żenczykowski int nlsock_prep_get_request(struct nl_socket *nlsk, unsigned int nlcmd,
40*1b481fc3SMaciej Żenczykowski 			    uint16_t hdr_attrtype, u32 flags);
41*1b481fc3SMaciej Żenczykowski ssize_t nlsock_sendmsg(struct nl_socket *nlsk, struct nl_msg_buff *__msgbuff);
42*1b481fc3SMaciej Żenczykowski int nlsock_send_get_request(struct nl_socket *nlsk, mnl_cb_t cb);
43*1b481fc3SMaciej Żenczykowski int nlsock_process_reply(struct nl_socket *nlsk, mnl_cb_t reply_cb, void *data);
44*1b481fc3SMaciej Żenczykowski 
45*1b481fc3SMaciej Żenczykowski #endif /* ETHTOOL_NETLINK_NLSOCK_H__ */
46