pkelsey/libuinet

netmap+libuinet on Linux

Closed this issue · 6 comments

Hi Kelsey,

I am trying to use netmap+libuinet on a Linux machine.
I have compiled the system successfully and now I am trying to test it.
I have started the echo server with ./echo -v -i eth6 -l 192.168.10.1 -p 1111
It seems echo server runs succefully except link_elf_symbol: missing symbol hash table:

uinet starting: cpus=1, nmbclusters=131072
callwheelsize=524288
callwheelsize=524288
link_elf_lookup_symbol: missing symbol hash table
link_elf_lookup_symbol: missing symbol hash table
UINET multiprocessor subsystem configured with 1 CPUs
Timecounters tick every 10.000 msec
Creating interface netmap0, Promiscuous INET disabled, cdom=0
configstr is eth6
netmap0: Ethernet address: 00:1b:21:d7:ff:95
Adding address 192.168.10.1 to interface netmap0
Creating echo server at 192.168.10.1:1111 on interface netmap0
Listening on 192.168.10.1:1111
Bringing up interface netmap0
Creating interface thread for interface netmap0

I cannot ping or connect to echo server!
It seems the echo server is running under some container and is not accessible!
Do I need to configure a bridge/tunnel to access echo server?
Thank you.

Best regards,

Alim

Thanks, Alim. The issue here is probably that the other system doesn't know how to contact 192.168.10.1 because there is no ARP entry for it; likewise, even if there were an ARP entry you would not be able to ping it because libuinet does not do ICMP replies. It should be made very clear that libuinet currently only provides the TCP/IP stack functionality, but not the things one normally uses to connect to a host. So you'll want to insert a static ARP entry on the client machine for a MAC address that will be switched to the test machine for the IP address you've configured. Then you should be able to connect, though you still can't use ping to verify connectivity. See #27 for plans to make this more straightforward for people who really just want to host a single application with libuinet, rather than (1) intercept traffic; or (2) provide multiple applications through libuinet with some other process/code handling things like ARP and ICMP.

Thanks a lot Caladri.
I have also tried to connect using telnet.
Still, it does not work!

@alim1975, on your client machine, as root, run:

arp -s 192.168.10.1 00:1b:21:d7:ff:95

Then use a simpler program, such as netcat, to connect to the echo server and see if it works. If so, I will mark this a duplicate of Issue #27.

Alim, telnet requires not just Layer 4 connectivity (which libuinet provides), but also Layer 3 and, in this case, Layer 2. To make Layer 2 and Layer 3 work, you need to insert a static ARP entry on the client machine for 192.168.10.1 to a MAC address that will be able to reach the interface on which you have bin/echo running. You might try bringing up eth6 with the same IP address and pinging it to verify physical connectivity, then then take the ARP entry you have on your test client and insert it as a static entry, and then switch to running bin/echo, and test again. This will also eliminate any potential issues with Layer 2 switching of the MAC address in the static ARP entry that you might encounter.

Thanks guys. I can now connect to the echo server.

This is a duplicate of Issue #27