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