Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
fi_cm(3)			Libfabric v1.15.1			fi_cm(3)

NAME
     fi_cm - Connection management operations

     fi_connect / fi_listen / fi_accept / fi_reject / fi_shutdown
	    Manage endpoint connection state.

     fi_setname / fi_getname / fi_getpeer
	    Set local, or return local or peer endpoint address.

     fi_join / fi_close / fi_mc_addr
	    Join, leave, or retrieve a multicast address.

SYNOPSIS
	    #include <rdma/fi_cm.h>

	    int fi_connect(struct fid_ep *ep, const void *addr,
		const void *param, size_t paramlen);

	    int fi_listen(struct fid_pep *pep);

	    int fi_accept(struct fid_ep *ep, const void *param, size_t paramlen);

	    int fi_reject(struct fid_pep *pep, fid_t handle,
		const void *param, size_t paramlen);

	    int fi_shutdown(struct fid_ep *ep, uint64_t flags);

	    int fi_setname(fid_t fid, void *addr, size_t addrlen);

	    int fi_getname(fid_t fid, void *addr, size_t *addrlen);

	    int fi_getpeer(struct fid_ep *ep, void *addr, size_t *addrlen);

	    int fi_join(struct fid_ep *ep, const void *addr, uint64_t flags,
		struct fid_mc **mc, void *context);

	    int fi_close(struct fid *mc);

	    fi_addr_t fi_mc_addr(struct fid_mc *mc);

ARGUMENTS
     ep / pep
	    Fabric endpoint on which to change connection state.

     fid Active or passive endpoint to get/set address.

     addr   Buffer to address.	On a set call, the endpoint will be assigned the
	    specified  address.  On a get, the local address will be copied into
	    the buffer, up to the space provided.  For connect,  this  parameter
	    indicates  the  peer  address to connect to.  The address must be in
	    the same format as that specified using  fi_info:  addr_format  when
	    the endpoint was created.

     addrlen
	    On	input,	specifies size of addr buffer.	On output, stores number
	    of bytes written to addr buffer.

     param  User-specified data exchanged as part of the connection exchange.

     paramlen
	    Size of param buffer.

     info   Fabric information associated with a connection request.

     mc     Multicast group associated with an endpoint.

     flags  Additional flags for controlling connection operation.

     context
	    User context associated with the request.

DESCRIPTION
     Connection management functions are used to connect an  connection-oriented
     endpoint to a peer endpoint.

   fi_listen
     The  fi_listen call indicates that the specified endpoint should be transi-
     tioned into a passive connection state, allowing it to accept incoming con-
     nection requests.	Connection requests against a listening endpoint are re-
     ported asynchronously to the user through a bound CM event queue using  the
     FI_CONNREQ  event type.  The number of outstanding connection requests that
     can be queued at an endpoint is limited by the listening endpoint's backlog
     parameter.  The backlog is initialized based on  administrative  configura-
     tion values, but may be adjusted through the fi_control call.

   fi_connect
     The fi_connect call initiates a connection request on a connection-oriented
     endpoint  to  the destination address.  fi_connect may only be called on an
     endpoint once in its lifetime.

   fi_accept / fi_reject
     The fi_accept and fi_reject calls are used on the passive (listening)  side
     of a connection to accept or reject a connection request, respectively.  To
     accept a connection, the listening application first waits for a connection
     request event (FI_CONNREQ).  After receiving such an event, the application
     allocates	a  new endpoint to accept the connection.  This endpoint must be
     allocated using an fi_info  structure  referencing  the  handle  from  this
     FI_CONNREQ  event.  fi_accept is then invoked with the newly allocated end-
     point.  If the listening application wishes to reject a connection request,
     it calls fi_reject with the listening endpoint and a reference to the  con-
     nection request.

     A	successfully accepted connection request will result in the active (con-
     necting) endpoint seeing an FI_CONNECTED  event  on  its  associated  event
     queue.   A  rejected  or  failed  connection request will generate an error
     event.  The error entry will provide additional details describing the rea-
     son for the failed attempt.

     An FI_CONNECTED event will also be generated on the passive  side	for  the
     accepting	endpoint once the connection has been properly established.  The
     fid of the FI_CONNECTED event will be that of the endpoint passed to fi_ac-
     cept as opposed to the listening passive endpoint.  Outbound data transfers
     cannot be initiated on a connection-oriented endpoint until an FI_CONNECTED
     event has been generated.	However, receive buffers may be associated  with
     an endpoint anytime.

   fi_shutdown
     The  fi_shutdown call is used to gracefully disconnect an endpoint from its
     peer.  The flags parameter is reserved and must be 0.

     Outstanding operations posted to the endpoint when  fi_shutdown  is  called
     will be canceled or discarded.  Notification of canceled operations will be
     reported  by  the	provider to the corresponding completion queue(s).  Dis-
     carded operations will silently be dropped, with no completions  generated.
     The  choice  of canceling, versus discarding operations, is provider depen-
     dent.  However, all canceled completions will be written before fi_shutdown
     returns.

     When called, fi_shutdown does not affect completions already written  to  a
     completion  queue.  Any queued completions associated with asynchronous op-
     erations posted to the endpoint may still be retrieved from the correspond-
     ing completion queue(s) after an endpoint has been shutdown.

     An FI_SHUTDOWN event will be generated for an endpoint when the remote peer
     issues a disconnect using fi_shutdown  or	abruptly  closes  the  endpoint.
     Note  that in the abrupt close case, an FI_SHUTDOWN event will only be gen-
     erated if the peer system is reachable and a service or kernel agent on the
     peer system is able to notify the local endpoint that  the  connection  has
     been aborted.

   fi_close
     Fi_close  is  used  to  disassociate an endpoint from a multicast group and
     close all resources associated with the group.  Fi_close must be called  on
     all multicast groups that an endpoint joins.

   fi_setname
     The  fi_setname call may be used to modify or assign the address of the lo-
     cal endpoint.  It is conceptually similar to the socket bind operation.  An
     endpoint may be assigned an address on its creation,  through  the  fi_info
     structure.   The  fi_setname  call allows an endpoint to be created without
     being associated with a specific service (e.g., port  number)  and/or  node
     (e.g.,  network)  address,  with  the addressing assigned dynamically.  The
     format of the specified addressing data must match that  specified  through
     the fi_info structure when the endpoint was created.

     If  no  service address is specified and a service address has not yet been
     assigned to the endpoint, then the provider will allocate a service address
     and assign it to the endpoint.  If a node or service address is  specified,
     then,  upon  successful  completion of fi_setname, the endpoint will be as-
     signed the given addressing.  If an address cannot be assigned, or the end-
     point address cannot be modified, an appropriate fabric error number is re-
     turned.

   fi_getname / fi_getpeer
     The fi_getname and fi_getpeer calls may be used to retrieve  the  local  or
     peer  endpoint  address,  respectively.   On  input,  the addrlen parameter
     should indicate the size of the addr buffer.   If	the  actual  address  is
     larger  than  what  can  fit  into  the  buffer,  it  will be truncated and
     -FI_ETOOSMALL will be returned.  On output, addrlen is set to the	size  of
     the  buffer needed to store the address, which may be larger than the input
     value.

     fi_getname is not guaranteed to return a valid source address  until  after
     the specified endpoint has been enabled or has had an address assigned.  An
     endpoint  may  be enabled explicitly through fi_enable, or implicitly, such
     as through fi_connect or fi_listen.   An  address	may  be  assigned  using
     fi_setname.   fi_getpeer  is  not guaranteed to return a valid peer address
     until an endpoint has been completely connected - an FI_CONNECTED event has
     been generated.

   fi_join
     This call attaches an endpoint to a multicast group.  By default, the  end-
     point  will  join	the group based on the data transfer capabilities of the
     endpoint.	For example, if the endpoint has been configured  to  both  send
     and  receive  data,  then the endpoint will be able to initiate and receive
     transfers to and from the multicast group.  The fi_join flags may	be  used
     to  restrict  access to the multicast group, subject to endpoint capability
     limitations.

     Multicast join operations complete asynchronously.   An  endpoint	must  be
     bound  to	an event queue prior to calling fi_join.  The result of the join
     operation will be reported to the EQ as an FI_JOIN_COMPLETE event.   Appli-
     cations  cannot issue multicast transfers until receiving notification that
     the join operation has completed.	Note that an endpoint may begin  receiv-
     ing  messages from the multicast group as soon as the join completes, which
     can occur prior to the FI_JOIN_COMPLETE event being generated.

     Applications must call fi_close on the multicast group  to  disconnect  the
     endpoint  from  the  group.   After  a  join  operation  has completed, the
     fi_mc_addr call may be used to retrieve the  address  associated  with  the
     multicast group.

   fi_mc_addr
     Returns  the fi_addr_t address associated with a multicast group.	This ad-
     dress must be used when transmitting data to a multicast group  and  paired
     with the FI_MULTICAST operation flag.

FLAGS
     Except in functions noted below, flags are reserved and must be 0.

     FI_SEND
	    Applies  to  fi_join.   This flag indicates that the endpoint should
	    join the multicast group as a send only member.  The  endpoint  must
	    be	configured for transmit operations to use this flag, or an error
	    will occur.

     FI_RECV
	    Applies to fi_join.  This flag indicates that  the	endpoint  should
	    join  the  multicast  group with receive permissions only.	The end-
	    point must be configured for receive operations to use this flag, or
	    an error will occur.

RETURN VALUE
     Returns 0 on success.  On error, a negative value corresponding  to  fabric
     errno is returned.  Fabric errno values are defined in rdma/fi_errno.h.

ERRORS
NOTES
     For  connection-oriented  endpoints, the buffer referenced by param will be
     sent as part of the connection request or response,  subject  to  the  con-
     straints  of  the	underlying  connection	protocol.   Applications may use
     fi_getopt with the FI_OPT_CM_DATA_SIZE endpoint  option  to  determine  the
     size  of application data that may be exchanged as part of a connection re-
     quest or response.  The fi_connect, fi_accept,  and  fi_reject  calls  will
     silently  truncate  any  application  data which cannot fit into underlying
     protocol messages.  User data exchanged as part of the  connection  process
     is  available  as	part of the fi_eq_cm_entry structure, for FI_CONNREQ and
     FI_CONNECTED events, or as additional err_data to fi_eq_err_entry,  in  the
     case of a rejected connection.

SEE ALSO
     fi_getinfo(3), fi_endpoint(3), fi_domain(3), fi_eq(3)

AUTHORS
     OpenFabrics.

Libfabric Programmer's Manual	   2021-03-22				fi_cm(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=fi_leave&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help