ibv_query_qp

Gets the attributes of a queue pair (QP).

Syntax

#include <rdma/verbs.h>
int ibv_query_qp(struct ibv_qp *qp, struct ibv_qp_attr *attr,
                 int attr_mask,
                 struct ibv_qp_init_attr *init_attr);

Description

The ibv_query_qp() gets the attributes specified in attr_mask for the QP and returns them through the pointers attr and init_attr. The argument attr is an ibv_qp_attr struct, as defined in <rdma/verbs.h>.
struct ibv_qp_attr {
enum ibv_qp_state       qp_state;            /* Current QP state */
enum ibv_qp_state       cur_qp_state;        /* Current QP state - irrelevant for ibv_query_qp */
enum ibv_mtu            path_mtu;            /* Path MTU (valid only for RC/UC QPs) */
enum ibv_mig_state      path_mig_state;      /* Path migration state (valid if HCA supports APM) */
uint32_t                qkey;                /* Q_Key of the QP (valid only for UD QPs) */
uint32_t                rq_psn;              /* PSN for receive queue (valid only for RC/UC QPs) */
uint32_t                sq_psn;              /* PSN for send queue (valid only for RC/UC QPs) */
uint32_t                dest_qp_num;         /* Destination QP number (valid only for RC/UC QPs) */
int                     qp_access_flags;     /* Mask of enabled remote access operations (valid only 
                                                for RC/UC QPs) */
struct ibv_qp_cap       cap;                 /* QP capabilities */
struct ibv_ah_attr      ah_attr;             /* Primary path address vector (valid only for RC/UC QPs) */
struct ibv_ah_attr      alt_ah_attr;         /* Alternate path address vector (valid only for RC/UC QPs) */
uint16_t                pkey_index;          /* Primary P_Key index */
uint16_t                alt_pkey_index;      /* Alternate P_Key index */
uint8_t                 en_sqd_async_notify; /* Enable SQD.drained async notification - irrelevant for 
                                                ibv_query_qp */
uint8_t                 sq_draining;         /* Is the QP draining? (Valid only if qp_state is SQD) */
uint8_t                 max_rd_atomic;       /* Number of outstanding RDMA reads & atomic operations 
                                                on the destination QP (valid only for RC QPs) */
uint8_t                 max_dest_rd_atomic;  /* Number of responder resources for handling incoming
                                                RDMA reads & atomic operations (valid only for 
                                                RC QPs) */
uint8_t                 min_rnr_timer;       /* Minimum RNR NAK timer (valid only for RC QPs) */
uint8_t                 port_num;            /* Primary port number */
uint8_t                 timeout;             /* Local ack timeout for primary path (valid only 
                                                for RC QPs) */
uint8_t                 retry_cnt;           /* Retry count (valid only for RC QPs) */
uint8_t                 rnr_retry;           /* RNR retry (valid only for RC QPs) */
uint8_t                 alt_port_num;        /* Alternate port number */
uint8_t                 alt_timeout;         /* Local ack timeout for alternate path (valid only
                                                for RC QPs) */
};

For details on struct ibv_qp_cap(), see the description of ibv_create_qp function. For details on struct ibv_ah_attr, see the description of ibv_create_ah() function.

Return Values

On success, the ibv_query_qp() function returns 0, or the errno on failure that indicates the reason for failure.