[libfabric-users] Configure PeP to listen to multiple Network Interfaces

Arne arnestruck at astruck.de
Fri Jul 3 05:54:48 PDT 2020


Hello,


finally had the time to check the src_addr.

the fi_info->src_addr holds one IPv4 in sockaddr_in format if NULL is 
given as a node parameter into the fi_getinfo call.

So my question resides, can you (as I assume) have a single pep address 
multiple Network Interfaces and if so how to configure flags and hints 
in a way that it does?

If not, how would you suggest to catch incomming connection requests on 
a system with multiple active Network Interfaces using libfabric?


Greetings,

Arne.


>>> First of all I d like to configure the passive endpoint of my server to
>>> listen to multiple Network Interfaces (lo, eth0, eth1, wlan, etc).
>>> According to the wording of the Developer Guide I think this is
>>> possible, unfortunately I did not figure out the correct configuration
>>> to do so. Up until now I have only given the pep localhost ip as a
>>> sockaddr_in under FI_SOURCE and after that used multiple peps (each
>>> correspondand to a its own Network Interface) as a workaround for testing.
>>>
>>> Unfortunately Just giving the pep NULL as node and the port as service
>>> does result in the pep automatically rejecting the connreq/not receiving it.
>> I'm not following the issue here.  When calling fi_getinfo(), are you specifying FI_SOURCE, setting node to NULL, and passing the port as the service?
>>
>> That should create a wildcard listen address.  You can print the resulting fi_info structures to see if a specific IP address has been assigned or not as a src_addr.
>
> Yes, that is what I tried, based of the lines " An application wishing 
> to create a passive endpoint typically calls fi_getinfo() using the 
> FI_SOURCE flag, often only specifying a 'service' address. The service 
> address corresponds to a TCP port number."
>
> If I understand you correctly this wildcard pep will only listen on 
> the first network interface it finds. So for example, if the server 
> running my program has 2 Network Interfaces (lo, IP 127.0.0.1 and 
> eth0, 10.1.0.4) the wildcard pep will still only listen on one of 
> those two, let us say 127.0.0.1.
>
> At least that would explain that FI_CONNREQs on 10.1.0.4 would result 
> in the client getting Connection Refused Errors on its eq on 
> fi_connreq() call to 10.1.0.4.
>
> Does libfabric offer any possibility I did not catch to listen on both 
> Interfaces with onyl one pep or similar structure?
>
> I ll read out the scr_addr field of my server fi_info with the node 
> set to NULL when I am back at a table.
>
>
>>> To keep an overview over the peps of my workaround I tried to put their
>>> pointers into a list (GSList), which leads to the same behaviour as
>>> giving NULL as the node parameter. Why though? I dont see any reason for
>>> this.
>> I didn't follow this.
>
>
> To catch all Network Interfaces (in the example the ones corresponding 
> to the IPs 127.0.0.1 and 10.1.0.4) I wrote a workaround, catching all 
> available outgoing Network Interfaces with getifaddrs, creating a 
> fi_info for each available Interface and a pep with each fi_info.
>
> I did so to see whether the rest of the program works or not.
>
> To have an overview over all the peps I tried to put the pointers to 
> them in a GSList. As soon as I did that, the peps did respond with a 
> connection refused to each connreq. If I did not do this (but 
> therefore had no further possibility to address the peps), it worked.
>
>
> I hope that clarified what I tried to explain.
>


More information about the Libfabric-users mailing list