1#ifndef _RDMA_NETLINK_H 2#define _RDMA_NETLINK_H 3 4 5#include <linux/netlink.h> 6#include <uapi/rdma/rdma_netlink.h> 7 8struct ibnl_client_cbs { 9 int (*dump)(struct sk_buff *skb, struct netlink_callback *nlcb); 10 struct module *module; 11}; 12 13/** 14 * Add a a client to the list of IB netlink exporters. 15 * @index: Index of the added client 16 * @nops: Number of supported ops by the added client. 17 * @cb_table: A table for op->callback 18 * 19 * Returns 0 on success or a negative error code. 20 */ 21int ibnl_add_client(int index, int nops, 22 const struct ibnl_client_cbs cb_table[]); 23 24/** 25 * Remove a client from IB netlink. 26 * @index: Index of the removed IB client. 27 * 28 * Returns 0 on success or a negative error code. 29 */ 30int ibnl_remove_client(int index); 31 32/** 33 * Put a new message in a supplied skb. 34 * @skb: The netlink skb. 35 * @nlh: Pointer to put the header of the new netlink message. 36 * @seq: The message sequence number. 37 * @len: The requested message length to allocate. 38 * @client: Calling IB netlink client. 39 * @op: message content op. 40 * Returns the allocated buffer on success and NULL on failure. 41 */ 42void *ibnl_put_msg(struct sk_buff *skb, struct nlmsghdr **nlh, int seq, 43 int len, int client, int op, int flags); 44/** 45 * Put a new attribute in a supplied skb. 46 * @skb: The netlink skb. 47 * @nlh: Header of the netlink message to append the attribute to. 48 * @len: The length of the attribute data. 49 * @data: The attribute data to put. 50 * @type: The attribute type. 51 * Returns the 0 and a negative error code on failure. 52 */ 53int ibnl_put_attr(struct sk_buff *skb, struct nlmsghdr *nlh, 54 int len, void *data, int type); 55 56/** 57 * Send the supplied skb to a specific userspace PID. 58 * @skb: The netlink skb 59 * @nlh: Header of the netlink message to send 60 * @pid: Userspace netlink process ID 61 * Returns 0 on success or a negative error code. 62 */ 63int ibnl_unicast(struct sk_buff *skb, struct nlmsghdr *nlh, 64 __u32 pid); 65 66/** 67 * Send the supplied skb to a netlink group. 68 * @skb: The netlink skb 69 * @nlh: Header of the netlink message to send 70 * @group: Netlink group ID 71 * @flags: allocation flags 72 * Returns 0 on success or a negative error code. 73 */ 74int ibnl_multicast(struct sk_buff *skb, struct nlmsghdr *nlh, 75 unsigned int group, gfp_t flags); 76 77#endif /* _RDMA_NETLINK_H */ 78