Provided by: librdmacm-dev_17.1-1ubuntu0.2_amd64 bug

NAME

       rdma_get_cm_event - Retrieves the next pending communication event.

SYNOPSIS

       #include <rdma/rdma_cma.h>

       int rdma_get_cm_event (struct rdma_event_channel *channel, struct rdma_cm_event **event);

ARGUMENTS

       channel     Event channel to check for events.

       event       Allocated information about the next communication event.

DESCRIPTION

       Retrieves  a  communication  event.   If  no events are pending, by default, the call will
       block until an event is received.

RETURN VALUE

       Returns 0 on success, or -1 on error.  If an error occurs, errno will be set  to  indicate
       the failure reason.

NOTES

       The  default  synchronous  behavior  of  this routine can be changed by modifying the file
       descriptor associated with the given channel.   All  events  that  are  reported  must  be
       acknowledged  by calling rdma_ack_cm_event.  Destruction of an rdma_cm_id will block until
       related events have been acknowledged.

EVENT DATA

       Communication event details are returned in the rdma_cm_event structure.   This  structure
       is allocated by the rdma_cm and released by the rdma_ack_cm_event routine.  Details of the
       rdma_cm_event structure are given below.

       id          The rdma_cm identifier associated with  the  event.   If  the  event  type  is
                   RDMA_CM_EVENT_CONNECT_REQUEST,   then  this  references  a  new  id  for  that
                   communication.

       listen_id   For   RDMA_CM_EVENT_CONNECT_REQUEST   event   types,   this   references   the
                   corresponding listening request identifier.

       event       Specifies  the  type  of  communication event which occurred.  See EVENT TYPES
                   below.

       status      Returns any asynchronous error information  associated  with  an  event.   The
                   status  is zero if the operation was successful, otherwise the status value is
                   non-zero and is either set to an errno or a  transport  specific  value.   For
                   details  on  transport  specific status values, see the event type information
                   below.

       param       Provides additional details based on the type of event.  Users  should  select
                   the  conn  or  ud  subfields  based  on  the rdma_port_space of the rdma_cm_id
                   associated with the event.  See UD EVENT DATA and CONN EVENT DATA below.

UD EVENT DATA

       Event  parameters  related  to  unreliable  datagram  (UD)   services:   RDMA_PS_UDP   and
       RDMA_PS_IPOIB.    The   UD   event   data   is  valid  for  RDMA_CM_EVENT_ESTABLISHED  and
       RDMA_CM_EVENT_MULTICAST_JOIN events, unless stated otherwise.

       private_data
                   References      any      user-specified       data       associated       with
                   RDMA_CM_EVENT_CONNECT_REQUEST  or  RDMA_CM_EVENT_ESTABLISHED events.  The data
                   referenced by this field matches  that  specified  by  the  remote  side  when
                   calling rdma_connect or rdma_accept.  This field is NULL if the event does not
                   include private data.  The buffer referenced by this  pointer  is  deallocated
                   when calling rdma_ack_cm_event.

       private_data_len
                   The  size  of the private data buffer.  Users should note that the size of the
                   private data buffer may be larger than the amount of private data sent by  the
                   remote side.  Any additional space in the buffer will be zeroed out.

       ah_attr     Address  information  needed  to  send  data to the remote endpoint(s).  Users
                   should use this structure when allocating their address handle.

       qp_num      QP number of the remote endpoint or multicast group.

       qkey        QKey needed to send data to the remote endpoint(s).

CONN EVENT DATA

       Event parameters related to connected QP services: RDMA_PS_TCP.   The  connection  related
       event  data  is  valid  for  RDMA_CM_EVENT_CONNECT_REQUEST  and  RDMA_CM_EVENT_ESTABLISHED
       events, unless stated otherwise.

       private_data
                   References any user-specified  data  associated  with  the  event.   The  data
                   referenced  by  this  field  matches  that  specified  by the remote side when
                   calling rdma_connect or rdma_accept.  This field is NULL if the event does not
                   include  private  data.   The buffer referenced by this pointer is deallocated
                   when calling rdma_ack_cm_event.

       private_data_len
                   The size of the private data buffer.  Users should note that the size  of  the
                   private  data buffer may be larger than the amount of private data sent by the
                   remote side.  Any additional space in the buffer will be zeroed out.

       responder_resources
                   The number of responder resources requested  of  the  recipient.   This  field
                   matches  the  initiator  depth  specified  by  the  remote  node  when calling
                   rdma_connect and rdma_accept.

       initiator_depth
                   The maximum  number  of  outstanding  RDMA  read/atomic  operations  that  the
                   recipient  may  have  outstanding.  This field matches the responder resources
                   specified by the remote node when calling rdma_connect and rdma_accept.

       flow_control
                   Indicates if hardware level flow control is provided by the sender.

       retry_count For RDMA_CM_EVENT_CONNECT_REQUEST events only, indicates the number  of  times
                   that the recipient should retry send operations.

       rnr_retry_count
                   The  number  of times that the recipient should retry receiver not ready (RNR)
                   NACK errors.

       srq         Specifies if the sender is using a shared-receive queue.

       qp_num      Indicates the remote QP number for the connection.

EVENT TYPES

       The following types of communication events may be reported.

       RDMA_CM_EVENT_ADDR_RESOLVED
              Address resolution (rdma_resolve_addr) completed successfully.

       RDMA_CM_EVENT_ADDR_ERROR
              Address resolution (rdma_resolve_addr) failed.

       RDMA_CM_EVENT_ROUTE_RESOLVED
              Route resolution (rdma_resolve_route) completed successfully.

       RDMA_CM_EVENT_ROUTE_ERROR
              Route resolution (rdma_resolve_route) failed.

       RDMA_CM_EVENT_CONNECT_REQUEST
              Generated on the passive side to notify the user of a new connection request.

       RDMA_CM_EVENT_CONNECT_RESPONSE
              Generated on the active side to notify the user  of  a  successful  response  to  a
              connection  request.   It  is  only generated on rdma_cm_id's that do not have a QP
              associated with them.

       RDMA_CM_EVENT_CONNECT_ERROR
              Indicates that an error has occurred trying to establish or a connection.   May  be
              generated on the active or passive side of a connection.

       RDMA_CM_EVENT_UNREACHABLE
              Generated  on  the  active  side  to  notify the user that the remote server is not
              reachable or unable to respond to a connection request.  If this event is generated
              in  response  to a UD QP resolution request over InfiniBand, the event status field
              will contain an errno, if negative, or the status result carried in the IB CM  SIDR
              REP message.

       RDMA_CM_EVENT_REJECTED
              Indicates  that  a  connection  request  or response was rejected by the remote end
              point.  The event status field will contain the transport specific reject reason if
              available.   Under  InfiniBand,  this is the reject reason carried in the IB CM REJ
              message.

       RDMA_CM_EVENT_ESTABLISHED
              Indicates that a connection has been established with the remote end point.

       RDMA_CM_EVENT_DISCONNECTED
              The connection has been disconnected.

       RDMA_CM_EVENT_DEVICE_REMOVAL
              The local RDMA device associated  with  the  rdma_cm_id  has  been  removed.   Upon
              receiving this event, the user must destroy the related rdma_cm_id.

       RDMA_CM_EVENT_MULTICAST_JOIN
              The multicast join operation (rdma_join_multicast) completed successfully.

       RDMA_CM_EVENT_MULTICAST_ERROR
              An  error  either  occurred joining a multicast group, or, if the group had already
              been joined, on an existing group.  The specified  multicast  group  is  no  longer
              accessible and should be rejoined, if desired.

       RDMA_CM_EVENT_ADDR_CHANGE
              The  network  device associated with this ID through address resolution changed its
              HW address, eg following of bonding failover. This event can serve as  a  hint  for
              applications  who  want  the  links  used for their RDMA sessions to align with the
              network stack.

       RDMA_CM_EVENT_TIMEWAIT_EXIT
              The QP associated with a connection has exited its timewait state and is now  ready
              to  be  re-used.   After a QP has been disconnected, it is maintained in a timewait
              state to allow any in flight packets to exit the network.  After the timewait state
              has completed, the rdma_cm will report this event.

SEE ALSO

       rdma_ack_cm_event(3),          rdma_create_event_channel(3),         rdma_resolve_addr(3),
       rdma_resolve_route(3),    rdma_connect(3),     rdma_listen(3),     rdma_join_multicast(3),
       rdma_destroy_id(3), rdma_event_str(3)