<html>
  <head>
    <meta content="text/html; charset=iso-8859-15"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <p>Thank you Sean,</p>
    <p>I try to explain better what I need. Please also find some
      comments inline with your reply.</p>
    <p>Assume a single process P which needs to communicate with two
      other processes PA and PB over two different channels A and B.</p>
    <p>In TCP terms, this can be done by using two sockets in P, both at
      IP hostP but each bound to a specific TCP port (hostP:portA and
      hostP:portB) etc.</p>
    <p>Mapping it to libfabric, I would create two endpoints from P but
      I don't know how to realize the behavior of communicating with two
      different peers over the two endpoints. Is there some way to
      "bind" an endpoint to a host:port pair?</p>
    <blockquote
cite="mid:1828884A29C6694DAF28B7E6B8A82373AB04F984@ORSMSX109.amr.corp.intel.com"
      type="cite">
      <pre wrap="">Re-posting to ofiwg mail list, as this is more of a developer question.

</pre>
      <blockquote type="cite">
        <pre wrap="">Hi all,

I am from the alpha group [<a class="moz-txt-link-freetext" href="http://alpha.di.unito.it/">http://alpha.di.unito.it/</a>] (CS dept. @ Univ. of
Torino, Italy).
We just started to integrate libfabric into FastFlow [link], on the track
of the great job by Paolo Inaudi with the A3Cube provider.

After several readings of all the man pages and some online tutorials, I
still cannot understand how to work with contexts, domains and endpoints.
</pre>
      </blockquote>
      <pre wrap="">
I'm not sure what you're referring to exactly by context.  In the documentation, a context is probably easiest to think of a command queue or work queue.  In the simplest case, an endpoint has 2 contexts -- one for sending and another for receiving.

Note that we use the term context rather than queue because there's no guarantee that work that has been posted to an endpoint completes in order.</pre>
    </blockquote>
    Sorry I made some confusion with terminology here. I was talking
    about the hierarchy from
    [<a class="moz-txt-link-freetext" href="http://www.slideshare.net/seanhefty/ofi-overview">http://www.slideshare.net/seanhefty/ofi-overview</a>]:<br>
    - Fabric domain (fi_getinfo)<br>
    - domain (fi_domain)<br>
    - endpoint (fi_endpoint)<br>
    <br>
    Here I don't know how to obtain the two endpoints I need: I need to
    obtain different fi_info structures (by two different calls to
    fi_getinfo with same IP address and different TCP ports) but I want
    them to share the same domain. The domain itself comes from a
    preliminary fi_getinfo call which is "agnostic" with respect to
    addresses.<br>
    <blockquote
cite="mid:1828884A29C6694DAF28B7E6B8A82373AB04F984@ORSMSX109.amr.corp.intel.com"
      type="cite">
      <pre wrap="">

</pre>
      <blockquote type="cite">
        <pre wrap="">I try to illustrate the problem:
1) single process attached to NIC with address X
2) two connection-less endpoints A and B
3) endpoint A should accept data from X:portA, while B from X:portB

If I try to map the hierarchy proposed in the libfabric "object model" I
would instantiate one context, one domain and both endpoints (and
respective queues) to that single domain. In this setting, I cannot find
how to specify the different ports for the endpoints. Actually I just need
to ensure endpoint A will find only messages sent to portA in its
completion queue, but I cannot figure out how to do it.
</pre>
      </blockquote>
      <pre wrap="">
It sounds like you need different addresses for the two ports.  Then assign address A from port A to endpoint A, and address B from port B to endpoint B.

An example from IP land would be to assign port A address 192.168.1.1 and port B 192.168.2.1.  Endpoint A would have address 192.168.1.1:12345, and B address 192.168.2.1:12345.  The '12345' in this example are transport (e.g. UDP or TCP port) numbers.</pre>
    </blockquote>
    As I said, I need two different TCP ports on the same IP host.<br>
    I hope I was a bit more clear now.<br>
    <br>
    Thank you again :)<br>
    <br>
    M.<br>
    <blockquote
cite="mid:1828884A29C6694DAF28B7E6B8A82373AB04F984@ORSMSX109.amr.corp.intel.com"
      type="cite">
      <pre wrap="">

</pre>
      <blockquote type="cite">
        <pre wrap="">Conversely, all the examples I saw (e.g. fabtests benchmarks) use a single
endpoint per process and the libfabric context is initialized with hints
and arguments specific to the endpoint. This means I should prefer to
instantiate one domain (and one context) for each endpoint?
</pre>
      </blockquote>
      <pre wrap="">
If you have a single NIC, a single domain should be sufficient.

- Sean
</pre>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
Maurizio Drocco
PhD Student
University of Torino, department of Computer Science
Via Pessinetto 12, 10149 Torino - Italy</pre>
  </body>
</html>