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

  
 
  

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

NAME
     fi_getinfo, fi_freeinfo - Obtain / free fabric interface information

     fi_allocinfo, fi_dupinfo - Allocate / duplicate an fi_info structure

SYNOPSIS
	    #include <rdma/fabric.h>

	    int fi_getinfo(int version, const char *node, const char *service,
		    uint64_t flags, const struct fi_info *hints, struct fi_info **info);

	    void fi_freeinfo(struct fi_info *info);

	    struct fi_info *fi_allocinfo(void);

	    struct fi_info *fi_dupinfo(const struct fi_info *info);

ARGUMENTS
     version
	    Interface version requested by application.

     node   Optional, name or fabric address to resolve.

     service
	    Optional, service name or port number of address.

     flags  Operation flags for the fi_getinfo call.

     hints  Reference  to  an  fi_info structure that specifies criteria for se-
	    lecting the returned fabric information.

     info   A pointer to a linked list of fi_info structures containing response
	    information.

DESCRIPTION
     fi_getinfo returns information about available fabric services for reaching
     specified node or service, subject to  any  provided  hints.   Callers  may
     specify  NULL for node, service, and hints in order to retrieve information
     about what providers are available and their optimal usage models.   If  no
     matching  fabric information is available, info will be set to NULL and the
     call will return -FI_ENODATA.

     Based on the input hints, node, and service parameters, a	list  of  fabric
     domains  and  endpoints  will be returned.  Each fi_info structure will de-
     scribe an endpoint that meets  the  application's	specified  communication
     criteria.	 Each  endpoint  will be associated with a domain.  Applications
     can restrict the number of returned endpoints by including additional  cri-
     teria  in their search hints.  Relaxing or eliminating input hints will in-
     crease the number and type of endpoints that are available.  Providers that
     return multiple endpoints to a single fi_getinfo  call  should  return  the
     endpoints	that  are highest performing first.  Providers may indicate that
     an endpoint and domain can support additional capabilities than  those  re-
     quested by the user only if such support will not adversely affect applica-
     tion performance or security.

     The  version  parameter  is  used by the application to request the desired
     version of the interfaces.  The version determines the format of  all  data
     structures  used  by any of the fabric interfaces.  Applications should use
     the FI_VERSION(major, minor) macro to indicate the version, with hard-coded
     integer values for the major and minor values.   The  FI_MAJOR_VERSION  and
     FI_MINOR_VERSION enum values defined in fabric.h specify the latest version
     of the installed library.	However, it is recommended that the integer val-
     ues  for  FI_MAJOR_VERSION and FI_MINOR_VERSION be used, rather than refer-
     encing the enum types in order to ensure compatibility with future versions
     of the library.  This protects against the  application  being  built  from
     source against a newer version of the library that introduces new fields to
     data structures, which would not be initialized by the application.

     Node,  service,  or  hints may be provided, with any combination being sup-
     ported.  If node is provided, fi_getinfo will attempt to resolve the fabric
     address to the given node.  If node is not given, fi_getinfo  will  attempt
     to  resolve  the fabric addressing information based on the provided hints.
     Node is commonly used to provide a network address (such as an IP	address)
     or  hostname.  Service is usually associated with a transport address (such
     as a TCP port number).  Node  and	service  parameters  may  be  mapped  by
     providers	to  native  fabric  addresses.	Applications may also pass in an
     FI_ADDR_STR formatted address (see format details below) as the node  para-
     meter.  In such cases, the service parameter must be NULL.

     The hints parameter, if provided, may be used to limit the resulting output
     as indicated below.  As a general rule, specifying a non-zero value for in-
     put  hints  indicates  that  a provider must support the requested value or
     fail the operation with -FI_ENODATA.  With  the  exception  of  mode  bits,
     hints  that are set to zero are treated as a wildcard.  A zeroed hint value
     results in providers either returning a default value or a value that works
     best for their implementation.  Mode bits that are set to zero indicate the
     application does not support any modes.

     The caller must call fi_freeinfo to release fi_info structures returned  by
     this call.

     The  fi_allocinfo	call will allocate and zero an fi_info structure and all
     related substructures.  The fi_dupinfo  will  duplicate  a  single  fi_info
     structure and all the substructures within it.

FI_INFO
	    struct fi_info {
		struct fi_info	      *next;
		uint64_t	      caps;
		uint64_t	      mode;
		uint32_t	      addr_format;
		size_t		      src_addrlen;
		size_t		      dest_addrlen;
		void		      *src_addr;
		void		      *dest_addr;
		fid_t		      handle;
		struct fi_tx_attr     *tx_attr;
		struct fi_rx_attr     *rx_attr;
		struct fi_ep_attr     *ep_attr;
		struct fi_domain_attr *domain_attr;
		struct fi_fabric_attr *fabric_attr;
		struct fid_nic	      *nic;
	    };

     next   Pointer  to the next fi_info structure in the list.  Will be NULL if
	    no more structures exist.

     caps - fabric interface capabilities
	    If specified, indicates the desired capabilities of the  fabric  in-
	    terfaces.	Supported  capabilities  are  listed in the Capabilities
	    section below.

     mode   Operational modes supported by the application.  See the  Mode  sec-
	    tion below.

     addr_format - address format
	    If	specified,  indicates  the format of addresses referenced by the
	    fabric interfaces and data structures.  Supported formats are listed
	    in the Addressing formats section below.

     src_addrlen - source address length
	    Indicates the length of the source address.  This value must be >  0
	    if	src_addr  is  non-NULL.   This field will be ignored in hints if
	    FI_SOURCE flag is set, or src_addr is NULL.

     dest_addrlen - destination address length
	    Indicates the length of the destination address.  This value must be
	    > 0 if dest_addr is non-NULL.  This field will be ignored  in  hints
	    unless the node and service parameters are NULL or FI_SOURCE flag is
	    set, or if dst_addr is NULL.

     src_addr - source address
	    If	specified, indicates the source address.  This field will be ig-
	    nored in hints if FI_SOURCE flag is set.  On output a provider shall
	    return an address that corresponds to the indicated fabric,  domain,
	    node, and/or service fields.  The format of the address is indicated
	    by	the  returned addr_format field.  Note that any returned address
	    is only used when opening a local  endpoint.   The	address  is  not
	    guaranteed to be usable by a peer process.

     dest_addr - destination address
	    If specified, indicates the destination address.  This field will be
	    ignored  in hints unless the node and service parameters are NULL or
	    FI_SOURCE flag is set.  If FI_SOURCE is not specified, on  output  a
	    provider  shall  return  an address the corresponds to the indicated
	    node and/or service fields, relative to the fabric and domain.  Note
	    that any returned address is only usable locally.

     handle - provider context handle
	    The use of this field is operation specific.   If  hints->handle  is
	    set   to  struct  fid_pep,	the  hints->handle  will  be  copied  to
	    info->handle on output from fi_getinfo.  Other values of hints->han-
	    dle  will  be  handled  in	a   provider   specific   manner.    The
	    fi_info::handle  field is also used by fi_endpoint() and fi_reject()
	    calls when processing connection requests or to inherit another end-
	    point's attributes.  See fi_eq(3), fi_reject(3), and fi_endpoint(3).
	    The info->handle field will be ignored by  fi_dupinfo  and	fi_free-
	    info.

     tx_attr - transmit context attributes
	    Optionally	supplied  transmit context attributes.	Transmit context
	    attributes may be specified and  returned  as  part  of  fi_getinfo.
	    When  provided  as	hints, requested values of struct fi_tx_ctx_attr
	    should be set.  On output, the actual  transmit  context  attributes
	    that  can  be  provided  will  be  returned.   Output values will be
	    greater than or equal to the requested input values.

     rx_attr - receive context attributes
	    Optionally supplied receive context attributes.  Receive context at-
	    tributes may be specified and returned as part of fi_getinfo.   When
	    provided  as hints, requested values of struct fi_rx_ctx_attr should
	    be set.  On output, the actual receive context attributes  that  can
	    be provided will be returned.  Output values will be greater than or
	    or equal to the requested input values.

     ep_attr - endpoint attributes
	    Optionally supplied endpoint attributes.  Endpoint attributes may be
	    specified  and  returned  as  part	of fi_getinfo.	When provided as
	    hints, requested values of struct fi_ep_attr should be set.  On out-
	    put, the actual endpoint attributes that can be provided will be re-
	    turned.  Output values will be greater than or  equal  to  requested
	    input values.  See fi_endpoint(3) for details.

     domain_attr - domain attributes
	    Optionally	supplied  domain  attributes.	Domain attributes may be
	    specified and returned as part  of	fi_getinfo.   When  provided  as
	    hints,  requested values of struct fi_domain_attr should be set.  On
	    output, the actual domain attributes that can be  provided	will  be
	    returned.	Output values will be greater than or equal to requested
	    input values.  See fi_domain(3) for details.

     fabric_attr - fabric attributes
	    Optionally supplied fabric attributes.   Fabric  attributes  may  be
	    specified  and  returned  as  part	of fi_getinfo.	When provided as
	    hints, requested values of struct fi_fabric_attr should be set.   On
	    output,  the  actual  fabric attributes that can be provided will be
	    returned.  See fi_fabric(3) for details.

     nic - network interface details
	    Optional attributes related to the hardware NIC associated with  the
	    specified  fabric,	domain,  and  endpoint data.  This field is only
	    valid for providers where the corresponding attributes  are  closely
	    associated with a hardware NIC.  See fi_nic(3) for details.

CAPABILITIES
     Interface capabilities are obtained by OR-ing the following flags together.
     If capabilities in the hint parameter are set to 0, the underlying provider
     will  return  the	set  of  capabilities  which  are supported.  Otherwise,
     providers will return data matching  the  specified  set  of  capabilities.
     Providers may indicate support for additional capabilities beyond those re-
     quested  when  the  use  of expanded capabilities will not adversely affect
     performance or expose the application to communication  beyond  that  which
     was  requested.  Applications may use this feature to request a minimal set
     of requirements, then check the returned capabilities to enable  additional
     optimizations.

     FI_ATOMIC
	    Specifies  that the endpoint supports some set of atomic operations.
	    Endpoints supporting this capability support operations  defined  by
	    struct  fi_ops_atomic.   In  the  absence  of  any	relevant  flags,
	    FI_ATOMIC implies the ability to initiate and be the target  of  re-
	    mote  atomic  reads  and  writes.  Applications can use the FI_READ,
	    FI_WRITE, FI_REMOTE_READ, and FI_REMOTE_WRITE flags to restrict  the
	    types of atomic operations supported by an endpoint.

     FI_COLLECTIVE
	    Requests  support for collective operations.  Endpoints that support
	    this capability support the collective operations defined in fi_col-
	    lective(3).

     FI_DIRECTED_RECV
	    Requests that the communication endpoint use the source  address  of
	    an incoming message when matching it with a receive buffer.  If this
	    capability	is  not  set,  then  the  src_addr parameter for msg and
	    tagged receive operations is ignored.

     FI_FENCE
	    Indicates that the endpoint support the FI_FENCE flag on data trans-
	    fer operations.  Support requires tracking that all previous  trans-
	    mit requests to a specified remote endpoint complete prior to initi-
	    ating the fenced operation.  Fenced operations are often used to en-
	    force  ordering between operations that are not otherwise guaranteed
	    by the underlying provider or protocol.

     FI_HMEM
	    Specifies that the endpoint should support transfers to and from de-
	    vice memory.

     FI_LOCAL_COMM
	    Indicates that the endpoint support host local communication.   This
	    flag may be used in conjunction with FI_REMOTE_COMM to indicate that
	    local  and	remote	communication  are  required.  If neither FI_LO-
	    CAL_COMM or FI_REMOTE_COMM are specified, then the provider will in-
	    dicate support for the configuration that minimally affects  perfor-
	    mance.  Providers that set FI_LOCAL_COMM but not FI_REMOTE_COMM, for
	    example  a shared memory provider, may only be used to communication
	    between processes on the same system.

     FI_MSG
	    Specifies that an endpoint should support sending and receiving mes-
	    sages or datagrams.  Message capabilities  imply  support  for  send
	    and/or receive queues.  Endpoints supporting this capability support
	    operations defined by struct fi_ops_msg.

     The  caps	may  be used to specify or restrict the type of messaging opera-
     tions that are supported.	In the absence of any relevant flags, FI_MSG im-
     plies the ability to send and receive messages.  Applications can	use  the
     FI_SEND  and  FI_RECV  flags  to  optimize  an endpoint as send-only or re-
     ceive-only.

     FI_MULTICAST
	    Indicates that the endpoint support multicast data transfers.   This
	    capability must be paired with FI_MSG.  Applications can use FI_SEND
	    and FI_RECV to optimize multicast as send-only or receive-only.

     FI_MULTI_RECV
	    Specifies that the endpoint must support the FI_MULTI_RECV flag when
	    posting receive buffers.

     FI_NAMED_RX_CTX
	    Requests  that endpoints which support multiple receive contexts al-
	    low an initiator to target (or name) a specific receive  context  as
	    part of a data transfer operation.

     FI_READ
	    Indicates  that  the user requires an endpoint capable of initiating
	    reads against remote memory regions.  This flag requires that FI_RMA
	    and/or FI_ATOMIC be set.

     FI_RECV
	    Indicates that the user requires an endpoint  capable  of  receiving
	    message  data transfers.  Message transfers include base message op-
	    erations as well as tagged message functionality.

     FI_REMOTE_COMM
	    Indicates that the endpoint support communication with endpoints lo-
	    cated at remote nodes (across the fabric).	 See  FI_LOCAL_COMM  for
	    additional	details.   Providers  that  set  FI_REMOTE_COMM  but not
	    FI_LOCAL_COMM, for example NICs that lack loopback	support,  cannot
	    be used to communicate with processes on the same system.

     FI_REMOTE_READ
	    Indicates  that  the  user requires an endpoint capable of receiving
	    read memory operations from remote endpoints.   This  flag	requires
	    that FI_RMA and/or FI_ATOMIC be set.

     FI_REMOTE_WRITE
	    Indicates  that  the  user requires an endpoint capable of receiving
	    write memory operations from remote endpoints.  This  flag	requires
	    that FI_RMA and/or FI_ATOMIC be set.

     FI_RMA
	    Specifies that the endpoint should support RMA read and write opera-
	    tions.   Endpoints supporting this capability support operations de-
	    fined by struct fi_ops_rma.  In the absence of any	relevant  flags,
	    FI_RMA  implies  the ability to initiate and be the target of remote
	    memory  reads  and	writes.   Applications	can  use  the	FI_READ,
	    FI_WRITE,  FI_REMOTE_READ, and FI_REMOTE_WRITE flags to restrict the
	    types of RMA operations supported by an endpoint.

     FI_RMA_EVENT
	    Requests that an  endpoint	support  the  generation  of  completion
	    events  when  it  is  the  target of an RMA and/or atomic operation.
	    This flag requires that FI_REMOTE_READ and/or FI_REMOTE_WRITE be en-
	    abled on the endpoint.

     FI_RMA_PMEM
	    Indicates that the provider is `persistent memory  aware'  and  sup-
	    ports RMA operations to and from persistent memory.  Persistent mem-
	    ory  aware	providers  must  support  registration of memory that is
	    backed by non- volatile memory,  RMA  transfers  to/from  persistent
	    memory,  and enhanced completion semantics.  This flag requires that
	    FI_RMA be set.  This capability is experimental.

     FI_SEND
	    Indicates that the user requires an endpoint capable of sending mes-
	    sage data transfers.  Message transfers include base message  opera-
	    tions as well as tagged message functionality.

     FI_SHARED_AV
	    Requests  or  indicates  support  for  address  vectors which may be
	    shared among multiple processes.

     FI_SOURCE
	    Requests that the endpoint return source addressing data as part  of
	    its completion data.  This capability only applies to connectionless
	    endpoints.	 Note  that returning source address information may re-
	    quire that the provider perform address translation  and/or  look-up
	    based  on data available in the underlying protocol in order to pro-
	    vide the requested data, which  may  adversely  affect  performance.
	    The  performance  impact  may be greater for address vectors of type
	    FI_AV_TABLE.

     FI_SOURCE_ERR
	    Must be paired with FI_SOURCE.  When specified, this  requests  that
	    raw  source  addressing  data be returned as part of completion data
	    for any address that has not been inserted into  the  local  address
	    vector.  Use of this capability may require the provider to validate
	    incoming  source  address data against addresses stored in the local
	    address vector, which may adversely affect performance.

     FI_TAGGED
	    Specifies that the endpoint should handle tagged message  transfers.
	    Tagged  message transfers associate a user-specified key or tag with
	    each message that is used for matching purposes at the remote  side.
	    Endpoints  supporting  this capability support operations defined by
	    struct  fi_ops_tagged.   In  the  absence  of  any	relevant  flags,
	    FI_TAGGED  implies	the ability to send and receive tagged messages.
	    Applications can use the FI_SEND and FI_RECV flags	to  optimize  an
	    endpoint as send-only or receive-only.

     FI_TRIGGER
	    Indicates  that  the  endpoint  should support triggered operations.
	    Endpoints support this capability must meet the usage model  as  de-
	    scribed by fi_trigger(3).

     FI_VARIABLE_MSG
	    Requests  that  the  provider must notify a receiver when a variable
	    length message is ready to be received prior to attempting to  place
	    the  data.	 Such  notification will include the size of the message
	    and any associated	message  tag  (for  FI_TAGGED).   See  `Variable
	    Length Messages' in fi_msg.3 for full details.  Variable length mes-
	    sages  are	any  messages larger than an endpoint configurable size.
	    This flag requires that FI_MSG and/or FI_TAGGED be set.

     FI_WRITE
	    Indicates that the user requires an endpoint capable  of  initiating
	    writes  against  remote  memory  regions.	This  flag requires that
	    FI_RMA and/or FI_ATOMIC be set.

     FI_XPU
	    Specifies that the endpoint should support	transfers  that  may  be
	    initiated from heterogenous computation devices, such as GPUs.  This
	    flag requires that FI_TRIGGER be set.  For additional details on XPU
	    triggers see fi_trigger(3).

     Capabilities  may	be  grouped into three general categories: primary, sec-
     ondary, and primary modifiers.  Primary capabilities must explicitly be re-
     quested by an application, and a provider	must  enable  support  for  only
     those primary capabilities which were selected.  Primary modifiers are used
     to  limit	a  primary  capability, such as restricting an endpoint to being
     send-only.  If no modifiers are specified for an applicable capability, all
     relevant modifiers are assumed.  See above definitions for details.

     Secondary capabilities may optionally be requested by an  application.   If
     requested,  a  provider  must support the capability or fail the fi_getinfo
     request (FI_ENODATA).  A provider may optionally report  non-selected  sec-
     ondary  capabilities  if doing so would not compromise performance or secu-
     rity.

     Primary capabilities: FI_MSG, FI_RMA, FI_TAGGED,  FI_ATOMIC,  FI_MULTICAST,
     FI_NAMED_RX_CTX, FI_DIRECTED_RECV, FI_VARIABLE_MSG, FI_HMEM, FI_COLLECTIVE,
     FI_XPU

     Primary  modifiers:  FI_READ,  FI_WRITE,  FI_RECV, FI_SEND, FI_REMOTE_READ,
     FI_REMOTE_WRITE

     Secondary	  capabilities:    FI_MULTI_RECV,    FI_SOURCE,    FI_RMA_EVENT,
     FI_SHARED_AV,    FI_TRIGGER,   FI_FENCE,	FI_LOCAL_COMM,	 FI_REMOTE_COMM,
     FI_SOURCE_ERR, FI_RMA_PMEM.

MODE
     The operational mode bits are used to convey requirements that an	applica-
     tion  must adhere to when using the fabric interfaces.  Modes specify opti-
     mal ways of accessing the reported endpoint or domain.   Applications  that
     are  designed to support a specific mode of operation may see improved per-
     formance when that mode is desired by the provider.  It is recommended that
     providers support applications that disable any provider preferred modes.

     On input to fi_getinfo, applications set the mode bits that  they	support.
     On output, providers will clear mode bits that are not necessary to achieve
     high-performance.	 Mode bits that remain set indicate application require-
     ments for using the fabric interfaces created using the  returned	fi_info.
     The  set of modes are listed below.  If a NULL hints structure is provided,
     then the provider's supported set of modes will be  returned  in  the  info
     structure(s).

     FI_ASYNC_IOV
	    Applications can reference multiple data buffers as part of a single
	    operation through the use of IO vectors (SGEs).  Typically, the con-
	    tents  of  an  IO vector are copied by the provider into an internal
	    buffer area, or directly to the underlying hardware.  However,  when
	    a  large number of IOV entries are supported, IOV buffering may have
	    a negative	impact	on  performance  and  memory  consumption.   The
	    FI_ASYNC_IOV  mode	indicates  that the application must provide the
	    buffering needed for the IO vectors.  When set, an application  must
	    not  modify an IO vector of length > 1, including any related memory
	    descriptor array, until the associated operation has completed.

     FI_BUFFERED_RECV
	    The buffered receive mode bit indicates that the provider  owns  the
	    data  buffer(s)  that  are	accessed by the networking layer for re-
	    ceived messages.  Typically, this implies that data must  be  copied
	    from  the provider buffer into the application buffer.  Applications
	    that can handle  message  processing  from	network  allocated  data
	    buffers  can set this mode bit to avoid copies.  For full details on
	    application requirements to support this mode, see the `Buffered Re-
	    ceives' section in fi_msg(3).  This mode bit applies to  FI_MSG  and
	    FI_TAGGED receive operations.

     FI_CONTEXT
	    Specifies  that  the  provider requires that applications use struct
	    fi_context as their per operation context parameter  for  operations
	    that  generated  full completions.	This structure should be treated
	    as opaque to the application.  For performance reasons, this  struc-
	    ture  must	be  allocated by the user, but may be used by the fabric
	    provider to track the  operation.	Typically,  users  embed  struct
	    fi_context	within	their own context structure.  The struct fi_con-
	    text must remain valid until the corresponding  operation  completes
	    or	is successfully canceled.  As such, fi_context should NOT be al-
	    located on the stack.  Doing so is likely to result in stack corrup-
	    tion that will be difficult to debug.  Users should  not  update  or
	    interpret the fields in this structure, or reuse it until the origi-
	    nal  operation  has  completed.  If an operation does not generate a
	    completion (i.e. the endpoint was configured with  FI_SELECTIVE_COM-
	    PLETION  and  the operation was not initiated with the FI_COMPLETION
	    flag) then the context parameter is ignored by the fabric  provider.
	    The structure is specified in rdma/fabric.h.

     FI_CONTEXT2
	    This  bit  is  similar to FI_CONTEXT, but doubles the provider's re-
	    quirement on the size of the per context structure.  When set,  this
	    specifies  that  the  provider requires that applications use struct
	    fi_context2 as their per operation context parameter.   Or,  option-
	    ally,  an  application can provide an array of two fi_context struc-
	    tures (e.g. struct fi_context[2]) instead.	The requirements for us-
	    ing struct fi_context2  are  identical  as	defined  for  FI_CONTEXT
	    above.

     FI_LOCAL_MR
	    The provider is optimized around having applications register memory
	    for  locally  accessed  data buffers.  Data buffers used in send and
	    receive operations and as the source buffer for RMA and atomic oper-
	    ations must be registered by  the  application  for  access  domains
	    opened with this capability.  This flag is defined for compatibility
	    and  is  ignored  if the application version is 1.5 or later and the
	    domain  mr_mode  is  set  to  anything  other  than  FI_MR_BASIC  or
	    FI_MR_SCALABLE.   See  the domain attribute mr_mode fi_domain(3) and
	    fi_mr(3).

     FI_MSG_PREFIX
	    Message prefix mode  indicates  that  an  application  will  provide
	    buffer  space  in  front of all message send and receive buffers for
	    use by the provider.  Typically, the provider uses this space to im-
	    plement a protocol, with the protocol headers being written into the
	    prefix area.  The contents of the prefix space should be treated  as
	    opaque.   The  use	of FI_MSG_PREFIX may improve application perfor-
	    mance over certain providers by reducing the number  of  IO  vectors
	    referenced	by  underlying	hardware and eliminating provider buffer
	    allocation.

     FI_MSG_PREFIX only applies to send and receive operations, including tagged
     sends and receives.  RMA and atomics do not require the application to pro-
     vide prefix buffers.  Prefix buffer space must be provided with  all  sends
     and  receives, regardless of the size of the transfer or other transfer op-
     tions.  The ownership of prefix buffers is treated the same as  the  corre-
     sponding  message buffers, but the size of the prefix buffer is not counted
     toward any message limits, including inject.

     Applications that support prefix mode must supply buffer space before their
     own message data.	The size of space that must be provided is specified  by
     the msg_prefix_size endpoint attribute.  Providers are required to define a
     msg_prefix_size  that is a multiple of 8 bytes.  Additionally, applications
     may receive provider generated packets  that  do  not  contain  application
     data.   Such  received  messages  will  indicate a transfer size of that is
     equal to or smaller than msg_prefix_size.

     The buffer pointer given to all send and receive operations must  point  to
     the  start  of the prefix region of the buffer (as opposed to the payload).
     For scatter-gather send/recv operations, the prefix buffer must be  a  con-
     tiguous  region,  though it may or may not be directly adjacent to the pay-
     load portion of the buffer.

     FI_NOTIFY_FLAGS_ONLY
	    This bit indicates that general completion flags may not be  set  by
	    the  provider, and are not needed by the application.  If specified,
	    completion flags which simply report the type of operation that com-
	    pleted (e.g. send or receive) may not be set.   However,  completion
	    flags  that are used for remote notifications will still be set when
	    applicable.  See fi_cq(3) for details on which completion flags  are
	    valid when this mode bit is enabled.

     FI_RESTRICTED_COMP
	    This  bit  indicates that the application will only share completion
	    queues and counters among endpoints, transmit contexts, and  receive
	    contexts that have the same set of capability flags.

     FI_RX_CQ_DATA
	    This  mode	bit  only  applies  to	data  transfers  that set FI_RE-
	    MOTE_CQ_DATA.  When set, a data transfer that carries remote CQ data
	    will consume a receive buffer at the target.  This is true even  for
	    operations	that  would normally not consume posted receive buffers,
	    such as RMA write operations.

ADDRESSING FORMATS
     Multiple fabric interfaces take as input either a source or destination ad-
     dress parameter.  This includes struct fi_info (src_addr and dest_addr), CM
     calls (getname, getpeer, connect, join, and leave), and AV  calls	(insert,
     lookup, and straddr).  The fi_info addr_format field indicates the expected
     address format for these operations.

     A provider may support one or more of the following addressing formats.  In
     some  cases,  a  selected	addressing  format  may need to be translated or
     mapped into an address which is native to the fabric.  See fi_av(3).

     FI_ADDR_BGQ
	    Address is an IBM proprietary format that is used  with  their  Blue
	    Gene Q systems.

     FI_ADDR_EFA
	    Address  is  an Amazon Elastic Fabric Adapter (EFA) proprietary for-
	    mat.

     FI_ADDR_GNI
	    Address is a Cray proprietary format that is  used	with  their  GNI
	    protocol.

     FI_ADDR_PSMX
	    Address  is  an Intel proprietary format used with their Performance
	    Scaled Messaging protocol.

     FI_ADDR_PSMX2
	    Address is an Intel proprietary format used with  their  Performance
	    Scaled Messaging protocol version 2.

     FI_ADDR_PSMX3
	    Address  is  an Intel proprietary format used with their Performance
	    Scaled Messaging protocol version 3.

     FI_ADDR_STR
	    Address is a formatted character string.  The length and content  of
	    the  string is address and/or provider specific, but in general fol-
	    lows a URI model:

	    address_format[://[node][:[service][/[field3]...][?[key=value][&k2=v2]...]]]

     Examples:	    -	    fi_sockaddr://10.31.6.12:7471	-	fi_sock-
     addr_in6://[fe80::6:12]:7471 - fi_sockaddr://10.31.6.12:7471?qos=3

     Since  the  string formatted address does not contain any provider informa-
     tion, the prov_name field of the fabric attribute structure should be  used
     to filter by provider if necessary.

     FI_FORMAT_UNSPEC
	    FI_FORMAT_UNSPEC  indicates  that a provider specific address format
	    should be selected.  Provider specific  addresses  may  be	protocol
	    specific  or  a vendor proprietary format.	Applications that select
	    FI_FORMAT_UNSPEC should be prepared  to  treat  returned  addressing
	    data  as opaque.  FI_FORMAT_UNSPEC targets apps which make use of an
	    out of band address exchange.  Applications which use  FI_FORMAT_UN-
	    SPEC  may use fi_getname() to obtain a provider specific address as-
	    signed to an allocated endpoint.

     FI_SOCKADDR
	    Address is of type sockaddr.  The  specific  socket  address  format
	    will be determined at run time by interfaces examining the sa_family
	    field.

     FI_SOCKADDR_IB
	    Address is of type sockaddr_ib (defined in Linux kernel source)

     FI_SOCKADDR_IN
	    Address is of type sockaddr_in (IPv4).

     FI_SOCKADDR_IN6
	    Address is of type sockaddr_in6 (IPv6).

     FI_ADDR_PSMX
	    Address  is an Intel proprietary format that is used with their PSMX
	    (extended performance scaled messaging) protocol.

FLAGS
     The operation of the fi_getinfo call may be controlled through the  use  of
     input flags.  Valid flags include the following.

     FI_NUMERICHOST
	    Indicates that the node parameter is a numeric string representation
	    of	a  fabric  address, such as a dotted decimal IP address.  Use of
	    this flag will suppress any lengthy name resolution protocol.

     FI_PROV_ATTR_ONLY
	    Indicates that the caller is only querying for  what  providers  are
	    potentially  available.   All  providers  will  return  exactly  one
	    fi_info struct, regardless of whether that provider is usable on the
	    current platform or not.  The returned fi_info struct  will  contain
	    default  values  for all members, with the exception of fabric_attr.
	    The fabric_attr member will have the prov_name and prov_version val-
	    ues filled in.

     FI_SOURCE
	    Indicates that the node and service  parameters  specify  the  local
	    source  address to associate with an endpoint.  If specified, either
	    the node and/or service parameter must be non-NULL.   This	flag  is
	    often used with passive endpoints.

RETURN VALUE
     fi_getinfo()  returns 0 on success.  On error, fi_getinfo() returns a nega-
     tive value corresponding to fabric errno.	Fabric errno values are  defined
     in rdma/fi_errno.h.

     fi_allocinfo()  returns a pointer to a new fi_info structure on success, or
     NULL on error.  fi_dupinfo() duplicates a single fi_info structure and  all
     the  substructures within it, returning a pointer to the new fi_info struc-
     ture on success, or NULL on error.  Both calls require  that  the	returned
     fi_info structure be freed via fi_freeinfo().

ERRORS
     FI_EBADFLAGS
	    The  specified  endpoint or domain capability or operation flags are
	    invalid.

     FI_ENODATA
	    Indicates that no providers could be found	which  support	the  re-
	    quested fabric information.

     FI_ENOMEM
	    Indicates  that there was insufficient memory to complete the opera-
	    tion.

NOTES
     If hints are provided, the operation will be controlled by the values  that
     are  supplied in the various fields (see section on fi_info).  Applications
     that require specific communication interfaces,  domains,	capabilities  or
     other  requirements, can specify them using fields in hints.  Libfabric re-
     turns a linked list in info that points to a list of  matching  interfaces.
     info  is set to NULL if there are no communication interfaces or none match
     the input hints.

     If node is provided, fi_getinfo will attempt to resolve the fabric  address
     to the given node.  If node is not provided, fi_getinfo will attempt to re-
     solve  the  fabric addressing information based on the provided hints.  The
     caller must call fi_freeinfo to  release  fi_info	structures  returned  by
     fi_getinfo.

     If  neither node, service or hints are provided, then fi_getinfo simply re-
     turns the list all available communication interfaces.

     Multiple threads may call fi_getinfo simultaneously, without  any	require-
     ment for serialization.

SEE ALSO
     fi_open(3), fi_endpoint(3), fi_domain(3), fi_nic(3) fi_trigger(3)

AUTHORS
     OpenFabrics.

Libfabric Programmer's Manual	   2021-11-20			   fi_getinfo(3)

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

home | help