Modifies the attributes of a queue pair (QP).
Syntax
#include <rdma/verbs.h>
int ibv_modify_qp(struct ibv_qp *qp, struct ibv_qp_attr *attr, enum ibv_qp_attr_mask attr_mask)
 
Queue
pairs (QP) must be taken through an incremental sequence of states
prior to use them for communication.
QP States:
| RESET | 
Newly created, queues empty. | 
| INIT | 
Basic information set. Ready for posting to
receive queue. | 
| RTR | 
Ready to Receive. Remote address info set for
connected QPs, QP may now receive packets. | 
| RTS | 
Ready to Send. Timeout and retry parameters
set, QP might now send packets. | 
 
 
The state transitions are accomplished by using the ibv_modify_qp command.
 
Description
The ibv_modify_qp() function
modifies the attributes of a QP qp with the attributes in attr according
to the mask attr_mask. The parameter attr is an ibv_qp_attr struct,
as defined in <rdma/verbs.h>.
The parameter 
attr_mask specifies
the QP attributes to be modified. The argument is either 0 or the
bitwise OR of one or more of the following flags:
- IBV_QP_STATE
 
- Modify qp_state
 
- IBV_QP_CUR_STATE
 
- Set cur_qp_state
 
- IBV_QP_EN_SQD_ASYNC_NOTIFY
 
- Set en_sqd_async_notify
 
- IBV_QP_ACCESS_FLAGS
 
- Set qp_access_flags
 
- IBV_QP_PKEY_INDEX
 
- Set pkey_index
 
- IBV_QP_PORT
 
- Set port_num
 
- IBV_QP_QKEY
 
- Set qkey
 
- IBV_QP_AV
 
- Set ah_attr
 
- IBV_QP_PATH_MTU
 
- Set path_mtu
 
- IBV_QP_TIMEOUT
 
- Set timeout
 
- IBV_QP_RETRY_CNT
 
- Set retry_cnt
 
- IBV_QP_RNR_RETRY
 
- Set rnr_retry
 
- IBV_QP_RQ_PSN
 
- Set rq_psn
 
- IBV_QP_MAX_QP_RD_ATOMIC
 
- Set max_rd_atomic
 
- IBV_QP_ALT_PATH
 
- Set the alternative path via: alt_ah_attr, alt_pkey_index, alt_port_num,
alt_timeout
 
- IBV_QP_MIN_RNR_TIMER
 
- Set min_rnr_timer
 
- IBV_QP_SQ_PSN
 
- Set sq_psn
 
- IBV_QP_MAX_DEST_RD_ATOMIC
 
- Set max_dest_rd_atomic
 
- IBV_QP_PATH_MIG_STATE
 
- Set path_mig_state
 
- IBV_QP_CAP
 
- Set cap
 
- IBV_QP_DEST_QPN
 
- Set dest_qp_num
 
 
Notes: - If any of the modify attributes or the modify mask is invalid,
none of the attributes are modified (including the QP state).
 
- Not all devices support resizing QPs. To check if a device supports
it, check if the IBV_DEVICE_RESIZE_MAX_WR bit is set in the device
capabilities flags.
 
- Not all devices support alternate paths. To check if a device
supports it, check if the IBV_DEVICE_AUTO_PATH_MIG bit is set in the
device capabilities flags.
 
- The following tables indicate for QP Transport Service Type IBV_QPT_RC,
the minimum list of attributes that must be changed upon transitioning
QP state from Reset --> Init --> RTR --> RTS.
 
| Next state | 
Required attributes | 
| Init | 
IBV_QP_STATE, IBV_QP_PKEY_INDEX, IBV_QP_PORT,
IBV_QP_ACCESS_FLAGS | 
| RTR | 
IBV_QP_STATE, IBV_QP_AV, IBV_QP_PATH_MTU, IBV_QP_DEST_QPN,
IBV_QP_RQ_PSN, IBV_QP_MAX_DEST_RD_ATOMIC, IBV_QP_MIN_RNR_TIMER | 
| RTS | 
IBV_QP_STATE, IBV_QP_SQ_PSN, IBV_QP_MAX_QP_RD_ATOMIC,
IBV_QP_RETRY_CNT, IBV_QP_RNR_RETRY, IBV_QP_TIMEOUT | 
 
 
 
Input Parameters
| qp | 
Specifies the struct ibv_qp from ibv_create_qp. | 
| attr | 
Specifies the QP attributes. | 
| attr_mask | 
Specifies the bit mask that defines which attributes
within attr is set for this call. | 
 
 
Return Values
| 0 | 
On success. | 
| EINVAL | 
The error occurs when qp, qp->context, or attr
is NULL. |