2011-05-20 22:46:11 +04:00
# ifndef _RDMA_NETLINK_H
# define _RDMA_NETLINK_H
2011-01-03 18:33:53 +03:00
# include <linux/types.h>
enum {
RDMA_NL_RDMA_CM = 1
} ;
2011-05-20 22:46:11 +04:00
# define RDMA_NL_GET_CLIENT(type) ((type & (((1 << 6) - 1) << 10)) >> 10)
# define RDMA_NL_GET_OP(type) (type & ((1 << 10) - 1))
# define RDMA_NL_GET_TYPE(client, op) ((client << 10) + op)
2011-01-03 18:33:53 +03:00
enum {
RDMA_NL_RDMA_CM_ID_STATS = 0 ,
RDMA_NL_RDMA_CM_NUM_OPS
} ;
enum {
RDMA_NL_RDMA_CM_ATTR_SRC_ADDR = 1 ,
RDMA_NL_RDMA_CM_ATTR_DST_ADDR ,
RDMA_NL_RDMA_CM_NUM_ATTR ,
} ;
struct rdma_cm_id_stats {
__u32 qp_num ;
__u32 bound_dev_if ;
__u32 port_space ;
__s32 pid ;
__u8 cm_state ;
__u8 node_type ;
__u8 port_num ;
__u8 qp_type ;
} ;
2011-05-20 22:46:11 +04:00
# ifdef __KERNEL__
# include <linux/netlink.h>
struct ibnl_client_cbs {
int ( * dump ) ( struct sk_buff * skb , struct netlink_callback * nlcb ) ;
2012-10-05 00:15:49 +04:00
struct module * module ;
2011-05-20 22:46:11 +04:00
} ;
int ibnl_init ( void ) ;
void ibnl_cleanup ( void ) ;
/**
* Add a a client to the list of IB netlink exporters .
* @ index : Index of the added client
* @ nops : Number of supported ops by the added client .
* @ cb_table : A table for op - > callback
*
* Returns 0 on success or a negative error code .
*/
int ibnl_add_client ( int index , int nops ,
const struct ibnl_client_cbs cb_table [ ] ) ;
/**
* Remove a client from IB netlink .
* @ index : Index of the removed IB client .
*
* Returns 0 on success or a negative error code .
*/
int ibnl_remove_client ( int index ) ;
/**
* Put a new message in a supplied skb .
* @ skb : The netlink skb .
* @ nlh : Pointer to put the header of the new netlink message .
* @ seq : The message sequence number .
* @ len : The requested message length to allocate .
* @ client : Calling IB netlink client .
* @ op : message content op .
* Returns the allocated buffer on success and NULL on failure .
*/
void * ibnl_put_msg ( struct sk_buff * skb , struct nlmsghdr * * nlh , int seq ,
int len , int client , int op ) ;
/**
* Put a new attribute in a supplied skb .
* @ skb : The netlink skb .
* @ nlh : Header of the netlink message to append the attribute to .
* @ len : The length of the attribute data .
* @ data : The attribute data to put .
* @ type : The attribute type .
* Returns the 0 and a negative error code on failure .
*/
int ibnl_put_attr ( struct sk_buff * skb , struct nlmsghdr * nlh ,
int len , void * data , int type ) ;
# endif /* __KERNEL__ */
# endif /* _RDMA_NETLINK_H */