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 8 struct 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 */ 21 int 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 */ 30 int 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 */ 42 void *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 */ 53 int 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 */ 63 int 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 */ 74 int ibnl_multicast(struct sk_buff *skb, struct nlmsghdr *nlh, 75 unsigned int group, gfp_t flags); 76 77 #endif /* _RDMA_NETLINK_H */ 78