Man page - ibv_post_send(3)
Packages contains this manual
- ibv_alloc_pd(3)
- mlx5dv_dr_domain_sync(3)
- mlx5dv_vfio_get_events_fd(3)
- ibv_wr_send_imm(3)
- ibv_wr_local_inv(3)
- ibv_resize_cq(3)
- ibv_create_cq(3)
- mlx5dv_devx_obj_destroy(3)
- mlx5dv_create_flow_action_packet_reformat(3)
- ibv_modify_qp(3)
- mlx5dv_wr_mr_interleaved(3)
- mlx5dv_alloc_dm(3)
- mlx5dv_reg_dmabuf_mr(3)
- ibv_get_device_list(3)
- ibv_query_ece(3)
- mlx5dv_dr_action_create_dest_ibv_qp(3)
- ibv_destroy_cq(3)
- mlx5dv_crypto_login_query_state(3)
- hnsdv_is_supported(3)
- mlx5dv_open_device(3)
- efadv_create_driver_qp(3)
- mlx5dv_dr_matcher_destroy(3)
- ibv_create_qp(3)
- ibv_get_device_name(3)
- ibv_wr_set_inline_data(3)
- mlx5dv_wr_raw_wqe(3)
- mlx5dv_sched_node_create(3)
- mlx5dv_devx_obj_modify(3)
- ibv_modify_cq(3)
- ibv_query_device_ex(3)
- mlx5dv_dr_action_create_dest_array(3)
- ibv_wr_post(3)
- mlx5dv_devx_destroy_cmd_comp(3)
- mlx5dv_pp_alloc(3)
- ibv_ack_async_event(3)
- ibv_query_pkey(3)
- mlx5dv_dump_dr_table(3)
- ibv_get_async_event(3)
- manadv(7)
- mlx5dv_devx_umem_dereg(3)
- ibv_event_type_str(3)
- manadv_set_context_attr(3)
- mlx5dv(7)
- ibv_bind_mw(3)
- mlx5dv_dr_action_create_dest_root_table(3)
- ibv_destroy_counters(3)
- ibv_rate_to_mbps(3)
- ibv_modify_wq(3)
- ibv_open_device(3)
- ibv_is_fork_initialized(3)
- mlx5dv_alloc_var(3)
- mlx5dv_dr_action_create_modify_header(3)
- mlx5dv_init_obj(3)
- mlx5dv_sched_node_destroy(3)
- mlx5dv_dr_action_create_flow_counter(3)
- hnsdv_create_qp(3)
- ibv_ack_cq_events(3)
- ibv_destroy_flow_action(3)
- ibv_init_ah_from_wc(3)
- mlx5dv_dci_stream_id_reset(3)
- mlx5dv_create_mkey(3)
- ibv_create_rwq_ind_table(3)
- ibv_wr_set_inline_data_list(3)
- mlx5dv_dr_action_create_push_vlan(3)
- mlx5dv_destroy_mkey(3)
- ibv_poll_cq(3)
- ibv_get_cq_event(3)
- ibv_wr_rdma_write(3)
- ibv_alloc_null_mr(3)
- ibv_free_dm(3)
- mlx5dv_devx_ind_tbl_query(3)
- mlx5dv_sched_leaf_destroy(3)
- mlx5dv_devx_get_event(3)
- hnsdv_query_device(3)
- ibv_open_xrcd(3)
- mlx5dv_dr_action_create_dest_vport(3)
- mlx5dv_devx_get_async_cmd_comp(3)
- mlx5dv_dr_action_create_packet_reformat(3)
- mlx5dv_create_flow_matcher(3)
- mlx5dv_pp_free(3)
- mlx5dv_devx_obj_create(3)
- mbps_to_ibv_rate(3)
- mlx5dv_dek_create(3)
- ibv_free_device_list(3)
- mlx5dv_devx_srq_modify(3)
- mult_to_ibv_rate(3)
- mlx5dv_devx_umem_reg(3)
- mlx5dv_dr_table_destroy(3)
- hnsdv(7)
- mlx5dv_devx_qp_query(3)
- ibv_create_srq_ex(3)
- efadv_create_qp_ex(3)
- mlx5dv_ts_to_ns(3)
- mlx5dv_dump(3)
- ibv_wr_set_ud_addr(3)
- ibv_reg_mr(3)
- ibv_wr_abort(3)
- ibv_create_flow(3)
- mlx5dv_dr_action_create_aso(3)
- mlx5dv_dr_action_destroy(3)
- ibv_dereg_mr(3)
- ibv_dealloc_pd(3)
- ibv_import_device(3)
- ibv_attach_counters_point_flow(3)
- ibv_destroy_wq(3)
- mlx5dv_dr_domain_destroy(3)
- ibv_wr_bind_mw(3)
- ibv_destroy_comp_channel(3)
- ibv_create_ah_from_wc(3)
- ibv_wr_atomic_fetch_add(3)
- mlx5dv_wr_set_mkey_access_flags(3)
- ibv_import_pd(3)
- mlx5dv_create_flow(3)
- ibv_wr_rdma_write_imm(3)
- mlx5dv_wr_post(3)
- ibv_port_state_str(3)
- ibv_node_type_str(3)
- ibv_dealloc_td(3)
- ibv_memcpy_to_dm(3)
- efadv_query_mr(3)
- mlx4dv_init_obj(3)
- ibv_destroy_ah(3)
- ibv_attach_mcast(3)
- mlx5dv_create_qp(3)
- mlx5dv_wr_set_dc_addr_stream(3)
- efadv(7)
- mlx5dv_dr_matcher_create(3)
- ibv_create_cq_ex(3)
- mlx5dv_wr_set_dc_addr(3)
- ibv_open_qp(3)
- mlx5dv_dr_action_create_flow_meter(3)
- mlx5dv_dr_action_create_default_miss(3)
- mlx4dv(7)
- ibv_wr_set_xrc_srqn(3)
- mlx5dv_devx_srq_query(3)
- ibv_query_qp(3)
- ibv_reg_dm_mr(3)
- mlx5dv_crypto_logout(3)
- mlx5dv_devx_umem_reg_ex(3)
- mlx5dv_reserved_qpn_dealloc(3)
- mlx5dv_wr_set_mkey_layout_interleaved(3)
- mlx5dv_modify_qp_sched_elem(3)
- mlx5dv_crypto_login_destroy(3)
- mlx5dv_dump_dr_domain(3)
- mlx5dv_devx_general_cmd(3)
- ibv_query_gid_ex(3)
- ibv_modify_srq(3)
- mlx5dv_wr_set_mkey_crypto(3)
- ibv_create_ah(3)
- ibv_post_send(3)
- ibv_post_srq_recv(3)
- ibv_wr_flush(3)
- mlx5dv_create_flow_action_modify_header(3)
- ibv_create_comp_channel(3)
- mlx5dv_devx_obj_query_async(3)
- mlx5dv_dr_aso_other_domain_unlink(3)
- mlx5dv_dr_action_create_drop(3)
- ibv_query_device(3)
- mlx5dv_destroy_steering_anchor(3)
- ibv_query_port(3)
- mlx5dv_crypto_login(3)
- mlx5dv_dr_flow(3)
- mlx5dv_devx_alloc_uar(3)
- mlx5dv_get_data_direct_sysfs_path(3)
- ibv_set_ece(3)
- mlx5dv_crypto_login_create(3)
- ibv_get_srq_num(3)
- ibv_wr_rdma_read(3)
- mlx5dv_dr_action_create_tag(3)
- mlx5dv_sched_leaf_create(3)
- ibv_rate_to_mult(3)
- ibv_wr_atomic_cmp_swp(3)
- ibv_dealloc_mw(3)
- mlx5dv_dr_matcher_set_layout(3)
- ibv_wr_send(3)
- mlx5dv_devx_cq_modify(3)
- mlx5dv_devx_ind_tbl_modify(3)
- ibv_memcpy_from_dm(3)
- mlx5dv_devx_alloc_msi_vector(3)
- mlx5dv_free_var(3)
- ibv_close_device(3)
- ibv_wr_send_tso(3)
- mlx5dv_devx_free_uar(3)
- ibv_alloc_td(3)
- mlx5dv_dr_action_create_flow_sampler(3)
- ibv_destroy_flow(3)
- mlx5dv_devx_create_cmd_comp(3)
- mlx5dv_qp_cancel_posted_send_wrs(3)
- ibv_import_mr(3)
- ibv_wr_complete(3)
- mlx5dv_devx_destroy_event_channel(3)
- mlx5dv_dr_table_create(3)
- mlx5dv_dr_action_modify_flow_meter(3)
- ibv_wr_send_inv(3)
- mlx5dv_wr_memcpy(3)
- mlx5dv_devx_wq_modify(3)
- mlx5dv_devx_cq_query(3)
- ibv_unimport_pd(3)
- ibv_import_dm(3)
- mlx5dv_devx_free_msi_vector(3)
- mlx5dv_query_qp_lag_port(3)
- ibv_query_qp_data_in_order(3)
- ibv_create_srq(3)
- mlx5dv_is_supported(3)
- mlx5dv_dr_rule_destroy(3)
- mlx5dv_wr_set_mkey_sig_block(3)
- ibv_read_counters(3)
- ibv_close_xrcd(3)
- ibv_get_device_index(3)
- mlx5dv_wr_set_mkey_layout_list(3)
- mlx5dv_devx_subscribe_devx_event(3)
- mlx4dv_set_context_attr(3)
- mlx5dv_dump_dr_rule(3)
- mlx5dv_sched_leaf_modify(3)
- manadv_init_obj(3)
- mlx5dv_dr_action_create_dest_ib_port(3)
- efadv_query_ah(3)
- ibv_query_rt_values_ex(3)
- ibv_create_flow_action(3)
- mlx5dv_devx_destroy_eq(3)
- ibv_create_counters(3)
- ibv_post_srq_ops(3)
- mlx5dv_modify_qp_udp_sport(3)
- mlx5dv_modify_qp_lag_port(3)
- mlx5dv_devx_wq_query(3)
- mlx5dv_devx_create_eq(3)
- ibv_unimport_dm(3)
- ibv_detach_mcast(3)
- ibv_create_wq(3)
- mlx5dv_qp_ex_from_ibv_qp_ex(3)
- mlx5dv_sched_node_modify(3)
- mlx5dv_dr_action_create_pop_vlan(3)
- ibv_query_gid(3)
- mlx5dv_mkey_check(3)
- ibv_query_srq(3)
- mlx5dv_dr_action_modify_aso(3)
- ibv_alloc_mw(3)
- ibv_modify_flow_action(3)
- mlx5dv_map_ah_to_qp(3)
- mlx5dv_vfio_process_events(3)
- mlx5dv_dr_aso_other_domain_link(3)
- mlx5dv_devx_subscribe_devx_event_fd(3)
- mlx4dv_query_device(3)
- mlx5dv_devx_create_event_channel(3)
- ibv_destroy_srq(3)
- mlx5dv_dr_domain_create(3)
- mlx5dv_create_cq(3)
- mlx5dv_dr_domain_set_reclaim_device_memory(3)
- ibv_get_device_guid(3)
- ibv_wr_set_sge_list(3)
- mlx5dv_reserved_qpn_alloc(3)
- ibv_wr_start(3)
- mlx5dv_dm_map_op_addr(3)
- ibv_rereg_mr(3)
- mlx5dv_get_clock_info(3)
- ibv_unimport_mr(3)
- ibv_create_qp_ex(3)
- ibv_destroy_rwq_ind_table(3)
- mlx5dv_dr_action_create_dest_devx_tir(3)
- ibv_modify_qp_rate_limit(3)
- ibv_fork_init(3)
- efadv_query_device(3)
- mlx5dv_devx_qp_modify(3)
- ibv_destroy_qp(3)
- mlx5dv_dr_action_create_dest_table(3)
- ibv_advise_mr(3)
- mlx5dv_crypto_login_query(3)
- ibv_query_gid_table(3)
- ibv_alloc_dm(3)
- mlx5dv_wr_mr_list(3)
- mlx5dv_dr_rule_create(3)
- mlx5dv_get_vfio_device_list(3)
- ibv_wr_set_sge(3)
- mlx5dv_dump_dr_matcher(3)
- mlx5dv_devx_query_eqn(3)
- mlx5dv_dek_query(3)
- mlx5dv_query_port(3)
- mlx5dv_query_device(3)
- mlx5dv_wr_mkey_configure(3)
- ibv_alloc_parent_domain(3)
- mlx5dv_devx_obj_query(3)
- ibv_post_recv(3)
- mlx5dv_flow_action_esp(3)
- mlx5dv_dek_destroy(3)
- ibv_req_notify_cq(3)
- ibv_get_pkey_index(3)
- mlx5dv_dr_domain_allow_duplicate_rules(3)
- mlx5dv_create_steering_anchor(3)
- ibv_inc_rkey(3)
apt-get install libibverbs-dev
Manual
IBV_POST_SEND
NAMESYNOPSIS
DESCRIPTION
RETURN VALUE
NOTES
SEE ALSO
AUTHORS
NAME
ibv_post_send - post a list of work requests (WRs) to a send queue
SYNOPSIS
#include <infiniband/verbs.h>
int
ibv_post_send(struct ibv_qp
*qp
, struct
ibv_send_wr
*wr
,
struct ibv_send_wr
**bad_wr
);
DESCRIPTION
ibv_post_send() posts the linked list of work requests (WRs) starting with wr to the send queue of the queue pair qp . It stops processing WRs from this list at the first failure (that can be detected immediately while requests are being posted), and returns this failing WR through bad_wr .
The argument wr is an ibv_send_wr struct, as defined in <infiniband/verbs.h>.
struct ibv_send_wr {
uint64_t wr_id; /* User defined
WR ID */
struct ibv_send_wr *next; /* Pointer to next WR in list,
NULL if last WR */
struct ibv_sge *sg_list; /* Pointer to the s/g array */
int num_sge; /* Size of the s/g array */
enum ibv_wr_opcode opcode; /* Operation type */
unsigned int send_flags; /* Flags of the WR properties */
union {
__be32 imm_data; /* Immediate
data (in network byte order) */
uint32_t invalidate_rkey; /* Remote rkey to invalidate
*/
};
union {
struct {
uint64_t remote_addr; /* Start
address of remote memory buffer */
uint32_t rkey; /* Key of the remote Memory Region */
} rdma;
struct {
uint64_t remote_addr; /* Start
address of remote memory buffer */
uint64_t compare_add; /* Compare operand */
uint64_t swap; /* Swap operand */
uint32_t rkey; /* Key of the remote Memory Region */
} atomic;
struct {
struct ibv_ah *ah; /* Address
handle (AH) for the remote node address */
uint32_t remote_qpn; /* QP number of the destination QP */
uint32_t remote_qkey; /* Q_Key number of the destination QP
*/
} ud;
} wr;
union {
struct {
uint32_t remote_srqn; /* Number of the remote SRQ */
} xrc;
} qp_type;
union {
struct {
struct ibv_mw *mw; /* Memory
window (MW) of type 2 to bind */
uint32_t rkey; /* The desired new rkey of the MW */
struct ibv_mw_bind_info bind_info; /* MW additional bind
information */
} bind_mw;
struct {
|
void |
|||||||
|
*hdr; |
|||||||
|
/* Pointer address of inline header */ |
|||||||
|
uint16_t |
|||||||
|
hdr_sz; |
|||||||
|
/* Inline header size */ |
|||||||
|
uint16_t |
|||||||
|
mss; |
|||||||
|
/* Maximum segment size for each TSO fragment */ |
} tso;
};
};
struct ibv_mw_bind_info {
struct ibv_mr *mr; /* The
Memory region (MR) to bind the MW to */
uint64_t addr; /* The address the MW should start at */
uint64_t length; /* The length (in bytes) the MW should span
*/
unsigned int mw_access_flags; /* Access flags to the MW. Use
ibv_access_flags */
};
struct ibv_sge {
uint64_t addr; /* Start address
of the local memory buffer or number of bytes from the
start of the MR for MRs which are IBV_ACCESS_ZERO_BASED */
uint32_t length; /* Length of the buffer */
uint32_t lkey; /* Key of the local Memory Region */
};
Each QP Transport Service Type supports a specific set of opcodes, as shown in the following table:
OPCODE |
IBV_QPT_UD | IBV_QPT_UC | IBV_QPT_RC | IBV_QPT_XRC_SEND |
IBV_QPT_RAW_PACKET
----------------------------+------------+------------+------------+------------------+--------------------
IBV_WR_SEND | X | X | X | X | X
IBV_WR_SEND_WITH_IMM | X | X | X | X |
IBV_WR_RDMA_WRITE | | X | X | X |
IBV_WR_RDMA_WRITE_WITH_IMM | | X | X | X |
IBV_WR_RDMA_READ | | | X | X |
IBV_WR_ATOMIC_CMP_AND_SWP | | | X | X |
IBV_WR_ATOMIC_FETCH_AND_ADD | | | X | X |
IBV_WR_LOCAL_INV | | X | X | X |
IBV_WR_BIND_MW | | X | X | X |
IBV_WR_SEND_WITH_INV | | X | X | X |
IBV_WR_TSO | X | | | | X
The attribute
send_flags describes the properties of the
WR
. It is either 0 or the bitwise
OR
of one or
more of the following flags:
IBV_SEND_FENCE
Set the fence indicator. Valid only for
QPs with
Transport Service Type
IBV_QPT_RC
IBV_SEND_SIGNALED
Set the completion notification
indicator. Relevant
only if QP was created with sq_sig_all=0
IBV_SEND_SOLICITED
Set the solicited event indicator.
Valid only for
Send and RDMA Write with immediate
IBV_SEND_INLINE
Send data in given gather list as inline
data
in a send WQE. Valid only for Send and RDMA Write. The L_Key will not be checked.
IBV_SEND_IP_CSUM Offload the IPv4 and TCP/UDP checksum calculation.
Valid only when device_cap_flags in device_attr indicates current QP is supported by checksum offload.
RETURN VALUE
ibv_post_send() returns 0 on success, or the value of errno on failure (which indicates the failure reason).
NOTES
The user should not alter or destroy AHs associated with WRs until request is fully executed and a work completion has been retrieved from the corresponding completion queue (CQ) to avoid unexpected behavior.
The buffers used by a WR can only be safely reused after WR the request is fully executed and a work completion has been retrieved from the corresponding completion queue (CQ). However, if the IBV_SEND_INLINE flag was set, the buffer can be reused immediately after the call returns.
IBV_WR_DRIVER1 is an opcode that should be used to issue a specific driver operation.
SEE ALSO
ibv_create_qp (3), ibv_create_ah (3), ibv_post_recv (3), ibv_post_srq_recv (3), ibv_poll_cq (3)
AUTHORS
Dotan Barak
<dotanba@gmail.com>
Majd Dibbiny <majd@mellanox.com>
Yishai Hadas <yishaih@mellanox.com>