> From what I can tell from fi_endpoint.h and fi_cm.h, fid_pep and fid_ep
> share the method groups fi_ops_ep and fi_ops_cm.  It appears that in
> those methods, if fid_t is used, any endpoint can be used and if
> fid_pep is used, a passive endpoint must be used.

If fid_t is specified, then there may be other fabric identifiers which can be 
used.  For example, fi_ep_bind allows binding an active endpoint to either a CQ 
or counter object.  Type protection is provided where possible (e.g. 
fi_pep_bind only allows binding a passive endpoint.)

> If fid_ep is used, could a passive endpoint use it, or does it have to
> be a normal endpoint?

A normal endpoint must be used.

A good rule is to make sure that you never attempt to cast one fabric id to 
another.  That is, don't do this:

struct fid_pep *pep;
.... (struct fid_ep *) pep;  /* bad casting */

However, something like this is okay:

... &pep.fid;  /* get at the base fid object */

> Ive also noticed in methods like rx_ctx there are variables such as:
> fid_ep *sep.  Does this indicate only a scalable endpoint should be
> used?

Yes.  Scalable endpoints use the same data structure as normal endpoints 
(fid_ep).
_______________________________________________
ofiwg mailing list
ofiwg@lists.openfabrics.org
http://lists.openfabrics.org/mailman/listinfo/ofiwg

Reply via email to