pkelsey / libuinet

a library version of FreeBSD's TCP/IP stack plus extras
750 stars 198 forks source link

netmap+libuinet on Linux #28

Closed alim1975 closed 10 years ago

alim1975 commented 10 years ago

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

caladri commented 10 years ago

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.

alim1975 commented 10 years ago

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

pkelsey commented 10 years ago

@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.

caladri commented 10 years ago

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.

alim1975 commented 10 years ago

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

pkelsey commented 10 years ago

This is a duplicate of Issue #27