Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Host to Host Traffic Routing from Host Container to Radio Container to OTA Interface #117

Closed
hideogump opened this issue Oct 5, 2019 · 10 comments
Labels

Comments

@hideogump
Copy link

hideogump commented Oct 5, 2019

This is likely a Linux network routing issue, not EMANE issue proper, but I wanted to obtain the best practices guidance when using EMANE in a network configuration consisting of two containers for a logical "node":

  1. A host container using a class C IP address as eth0 (e.g. 135.1.1.2), which connects to
  2. A radio container (e.g. 135.1.1.1) running EMANE using the standard virtual transport IP of 10.100.0.x for the interface emane0.

I want to send host traffic from say host #1 (135.1.1.2) to host #2 (135.1.2.2), but it is not currently doing so across the EMANE OTA network using some default routes in the radio container.

Olsrd routing is running in each of the radio containers, and they are able to find the other radio interfaces of a peer (i.e. IP addresses in the OTA 10.100.0.0/24 network), and a dump of the IP routing table on the radio container running EMANE indicates OTA connectivity between the radio container's EMANE instances.

What may be missing is the routing necessary in the radio container to forward traffic from the host container (received on interface eth0) to the EMANE virtual transport (on interface emane0). The host traffic uses the IP convention of 135.1.x.2, and I would want this host traffic to be carried across the network intact (perhaps without any form of NATing) to the destination host.

In the radio container, I have the default route set to the emane0 with the Gateway set to the IP assigned to the radio (e.g. 10.100.0.1).

I would like the solution to be somewhat generic and not specify specify host IPs as part of static routing if possible, so that it is host IP agnostic.

I have attempted simply forwarding the traffic from the host interface as eth0 to and from the emane0 interface using the following commands.

sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -i eth0 -o emane0 -j ACCEPT
iptables -A FORWARD -i emane0 -o eth0 -j ACCEPT

Using tshark on the three interfaces in a radio container, as eth0 (host interface), emane0 (EMANE application/emulation boundary), and eth2 (isolated OTA bridge), I can view the host traffic (originally just ARPs) entering eth0, but none of this traffic on either emane0 or eth2.

Since the host traffic needs to be delivery between hosts intact, I am avoiding any NAT type of operations such as MASQUERADE in the IPTable commands.

Any thoughts on what is probably a common test modality?

Should ARPs flow across the EMANE network, or do they need to be explicitly assigned in the host container?

Does the host traffic need to map to the EMANE 10.100.0.1 net to be sent OTA, or is the EMANE tap interface promiscuous?

What is the recommended solution for what is probably a very common test modality?

@sgalgano
Copy link
Member

sgalgano commented Oct 7, 2019

For our emane with olsrd with application-host containers hanging off of radio LXC lans, we use olsr HNAs (Host Network Advertisement). This is what is done in letce2-tutorial/exp-03. I believe this would address your needs.

@hideogump
Copy link
Author

Thanks Steve, for the quick response. I was able to gain some insight from the referenced example, and now have HNA enabled for olsrd and the routing tables for all radio nodes correctly identify the host network attached to the radios (135.1.x.2 for the host, 135.1.x.1 for the radio data).

However, I am still unable to PING host to host. What I observe is the ARP initiation from say host 1 on eth0 to eth0 on radio1, which as a broadcast message would presumably need to be routed to each OTA radio on the OTA network. The ARPs do not seem to do so. This may be question that is broadly associated with how EMANE can be configured to handle host broadcast types of traffic. What does EMANE require for broadcasting inbound ARP traffic from the host to the OTA network in an environment which includes olsrd with the Basic Multicast Forwarding plug-in. Is it require to simply populate the ARP entries in the host container as an interim solution?

The following are some terminal snippets where I am using the 10.100 network for the EMANE transport, 10.98 for the isolation OTA interface, the 135.1 network as the host interface, and 10.99 for the isolated control network.


4 Node Demo Radio-001 ROUTING TABLE

[rrpucsuser@radio-001 ~]$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.98.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2
10.99.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
10.100.0.0 0.0.0.0 255.255.255.0 U 0 0 0 emane0
10.100.0.2 10.100.0.2 255.255.255.255 UGH 2 0 0 emane0
10.100.0.3 10.100.0.3 255.255.255.255 UGH 2 0 0 emane0
10.100.0.4 10.100.0.4 255.255.255.255 UGH 2 0 0 emane0
135.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
135.1.2.0 10.100.0.2 255.255.255.0 UG 2 0 0 emane0
135.1.3.0 10.100.0.3 255.255.255.0 UG 2 0 0 emane0
135.1.4.0 10.100.0.4 255.255.255.0 UG 2 0 0 emane0
224.0.0.0 0.0.0.0 240.0.0.0 U 0 0 0 bmf0

[rrpucsuser@radio-001 ~]$ ping -R radiohost2data
PING radiohost2data (135.1.2.2) 56(124) bytes of data.
64 bytes from radiohost2data (135.1.2.2): icmp_seq=1 ttl=63 time=0.306 ms
RR: radio1ota (10.100.0.1)
radio2data (135.1.2.1)
radiohost2data (135.1.2.2)
radiohost2data (135.1.2.2)
radio2ota (10.100.0.2)
radio1ota (10.100.0.1)

[rrpucsuser@radio-002 ~]$ arp
Address HWtype HWaddress Flags Mask Iface
radio1ota ether 02:02:00:00:00:01 C emane0
radiocontrol ether fe:7c:6e:51:5a:fa C eth1
radiohost2data ether 00:00:00:02:04:00 C eth0

[rrpucsuser@radio-002 ~]$ ping radiohost1data -R -c 1
PING radiohost1data (135.1.1.2) 56(124) bytes of data.
64 bytes from radiohost1data (135.1.1.2): icmp_seq=1 ttl=63 time=0.258 ms
RR: radio2ota (10.100.0.2)
radio1data (135.1.1.1)
radiohost1data (135.1.1.2)
radiohost1data (135.1.1.2)
radio1ota (10.100.0.1)
radio2ota (10.100.0.2)

--- radiohost1data ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.258/0.258/0.258/0.000 ms

[rrpucsuser@radiohost-001 ~]$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 135.1.1.1 0.0.0.0 UG 0 0 0 eth0
10.99.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
135.1.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0

@sgalgano
Copy link
Member

sgalgano commented Oct 8, 2019

If you have not already done so, it would be beneficial to run letce2-tutorial/exp-03 and interact with the running experiment. Host-to-host communication works fine.

[me@host-1 ~]$ ping -R 10.98.2.2 -c 1
PING 10.98.2.2 (10.98.2.2) 56(124) bytes of data.
64 bytes from 10.98.2.2: icmp_seq=1 ttl=62 time=5.49 ms
RR: 	10.98.1.2
	10.100.0.1
	10.98.2.1
	10.98.2.2
	10.98.2.2
	10.100.0.2
	10.98.1.1
	10.98.1.2


--- 10.98.2.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 5.488/5.488/5.488/0.000 ms

[me@host-1 ~]$ traceroute -n 10.98.2.2
traceroute to 10.98.2.2 (10.98.2.2), 30 hops max, 60 byte packets
 1  10.98.1.1  0.064 ms  0.027 ms  0.023 ms
 2  10.100.0.2  3.718 ms  5.446 ms  7.245 ms
 3  10.98.2.2  8.507 ms  10.071 ms  11.726 ms

For your setup, verify ip forwarding is enabled in the radio containers:

[me@node-1 ~]$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

@hideogump
Copy link
Author

hideogump commented Oct 14, 2019

Hi Steve, in case you have any other insights, here is an update.

IP forwarding is set correctly and verified within each container.

Using an olsrd.conf file that is nearly identical to the examples, and an IP convention that now matches the demo so that we can communicate using the same IP "currency", I am not able to PING host to host (which is host1data to host2data using the attached hosts file).

I am able to PING from radio node to the host data interface of the other radio (e.g. from radio2 container to host1data across the EMANE OTA network, or radio1 container to host2data).

[rrpucsuser@radio-002 ~]$ ping -R radio1data
PING radio1data (10.98.1.1) 56(124) bytes of data.
64 bytes from radio1data (10.98.1.1): icmp_seq=1 ttl=64 time=0.836 ms
RR: radio2emane (10.100.0.2)
radio1data (10.98.1.1)
radio1data (10.98.1.1)
radio2emane (10.100.0.2)

[rrpucsuser@radio-002 ~]$ ping -R host1data
PING host1data (10.98.1.2) 56(124) bytes of data.
64 bytes from host1data (10.98.1.2): icmp_seq=1 ttl=63 time=0.784 ms
RR: radio2emane (10.100.0.2)
radio1data (10.98.1.1)
host1data (10.98.1.2)
host1data (10.98.1.2)
radio1emane (10.100.0.1)
radio2emane (10.100.0.2)

The routing tables look correct for the hops in the radio nodes showing the HNA elements defining the upstream host IPs. For example, for the radio 2 container for a 2 node configuration:

[rrpucsuser@radio-002 ~]$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.98.1.0 10.100.0.1 255.255.255.0 UG 2 0 0 emane0
10.98.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.99.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
10.100.0.0 0.0.0.0 255.255.255.0 U 0 0 0 emane0
10.100.0.1 10.100.0.1 255.255.255.255 UGH 2 0 0 emane0
10.101.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2
224.0.0.0 0.0.0.0 240.0.0.0 U 0 0 0 bmf0

What I observe in the radio container itself is ARPs coming in from the host container (e.g. host1ctl, or host2ctl), but these ARPs are not be forwarded to the emane0 emulation boundary from what I can tell.

I do see OLSRD traffic on the emane0 interface (as well as the OTA interface as multicast) that is occurring at my defined HELLO intervals from the olsrd.conf file.

When running the olsrd command manually in the radio container, the two plugins seem to load without any event or error. When I use tshark on the Broadcast Multicast Forwarding (BMF) olsrd plugin, it shows no activity on that particular interface.

Attached are some terminal dumps to accompany this description.


[rrpucsuser@radio-002 ~]$ ps -ax
PID TTY STAT TIME COMMAND
1 pts/0 S+ 0:00 /usr/sbin/init.lxc --name radio-002 --lxcpath /var/lib/lxc --logpriority
17 ? Ss 0:00 /usr/sbin/sshd -o PidFile=/home/rrpucsuser/emane/rrpucs/tests/baseline/p
26 ? Ssl 0:00 emane /home/rrpucsuser/emane/rrpucs/tests/baseline/config/rrpucs/node-00
40 pts/0 S+ 0:00 python -u /usr/sbin/redhawk.py
42 ? Ss 0:00 /usr/local/sbin/olsrd -f /home/rrpucsuser/emane/rrpucs/tests/baseline/co
50 ? Ss 0:00 sshd: rrpucsuser [priv]
55 ? S 0:00 sshd: rrpucsuser@pts/0
56 pts/0 Ss 0:00 -bash

sudo /usr/local/sbin/olsrd -f /home/rrpucsuser/emane/rrpucs/tests/baseline/config/rrpucs/node-002/olsrd.conf -d 2
sudo /usr/local/sbin/olsrd -f /home/rrpucsuser/emane/rrpucs/tests/baseline/config/rrpucs/node-002/olsrd.conf -d 1

*** olsr.org - pre-0.9.8-git_0000000-hash_dce3d5473b0637a358df3777b5012b75 ***
http://www.olsr.org

Parsing file: "/home/rrpucsuser/emane/rrpucs/tests/baseline/config/rrpucs/node-002/olsrd.conf"
Debug level: 0
IpVersion: 4
Lock file /home/rrpucsuser/emane/rrpucs/tests/baseline/persist/node-002/radio-002/var/run/olsrd.lock
Clear screen enabled
Link quality aging factor 0.200000
HNA IPv4 entry: 10.98.2.0/255.255.255.0
setting ifs_in_curr_cfg = 0
HELLO interval: 5.00
HELLO validity: 20.00
Plugin: olsrd_txtinfo.so.1.1
Plugin param key:"accept" val: "0.0.0.0"
Plugin: olsrd_bmf.so.1.7.0
Plugin param key:"DoLocalBroadcast" val: "no"
Plugin param key:"CapturePacketsOnOlsrInterfaces" val: "no"
Plugin param key:"BmfMechanism" val: "Broadcast"
Plugin param key:"NonOlsrIf" val: "eth0"
Plugin param key:"FanOutLimit" val: "0"
Plugin param key:"BroadcastRetransmitCount" val: "1"
IPv4 broadcast/multicast : AUTO
Mode : mesh
IPv6 multicast : ::
HELLO emission/validity : 5.00 (d)/20.00 (d)
TC emission/validity : 0.00/0.00
MID emission/validity : 0.00/0.00
HNA emission/validity : 0.00/0.00
Autodetect changes : no
Added 0.0.0.0 to IP deny set
Added 127.0.0.1 to IP deny set

---- Interface configuration ----

Checking emane0:
Not a wireless interface
Metric: 0
MTU - IPhdr: 1472
Index 2
Address:10.100.0.2
Netmask:255.255.255.0
Broadcast address:10.100.0.255
New main address: 10.100.0.2
Using 'etx_ff' algorithm for lq calculation.
TC: add entry 10.100.0.2
RIB: add prefix 10.100.0.2/32 from 10.100.0.2
---------- LOADING LIBRARY olsrd_bmf.so.1.7.0 ----------
OLSRD bmf plugin ()
Checking plugin interface version: 5 - OK
Trying to fetch plugin init function: OK
Trying to fetch parameter table and it's size...
Sending parameters...
"broadcastretransmitcount"/"1"... Got int 1
broadcastretransmitcount: OK
"fanoutlimit"/"0"... Got int 0
fanoutlimit: OK
"nonolsrif"/"eth0"... nonolsrif: OK
"bmfmechanism"/"Broadcast"... bmfmechanism: OK
"capturepacketsonolsrinterfaces"/"no"... capturepacketsonolsrinterfaces: OK
"dolocalbroadcast"/"no"... dolocalbroadcast: OK
Running plugin_init function...
BMF: opened 3 sockets
---------- LIBRARY olsrd_bmf.so.1.7.0 LOADED ----------

---------- LOADING LIBRARY olsrd_txtinfo.so.1.1 ----------
OLSRD txtinfo plugin ()
Checking plugin interface version: 5 - OK
Trying to fetch plugin init function: OK
Trying to fetch parameter table and it's size...
Sending parameters...
"accept"/"0.0.0.0"... Got IP address 0.0.0.0
accept: OK
Running plugin_init function...
(TXTINFO) listening on port 2006
---------- LIBRARY olsrd_txtinfo.so.1.1 LOADED ----------

-- ALL PLUGINS LOADED! --

Main address: 10.100.0.2

Scheduler started - polling every 50 ms
�[3;J
*** olsr.org - pre-0.9.8-git_0000000-hash_dce3d5473b0637a358df3777b5012b75 ***

--- 16:29:34.216762 ---------------------------------------------------- LINKS

IP address hyst LQ ETX

--- 16:29:34.216774 ------------------------------------------------ NEIGHBORS

 IP address	Hyst	LQ	ETX	SYM   MPR   MPRS  will

--- 16:29:34.216778 ----------------------- TWO-HOP NEIGHBORS

IP addr (2-hop) IP addr (1-hop) Total cost
Adding 10.100.0.2=>10.100.0.1 to link set
Set linkloss multiplier for 10.100.0.1 on emane0 to 65536
Willingness for 10.100.0.1 changed from 0 to 3 - UPDATING
�[3;J

   *** olsr.org - pre-0.9.8-git_0000000-hash_dce3d5473b0637a358df3777b5012b75 ***

--- 16:29:35.671249 ---------------------------------------------------- LINKS

IP address hyst LQ ETX
10.100.0.1 0.000 0.000/0.000 INFINITE

--- 16:29:35.671281 ------------------------------------------------ NEIGHBORS

 IP address	Hyst	LQ	ETX	SYM   MPR   MPRS  will

--- 16:29:35.671290 ----------------------- TWO-HOP NEIGHBORS

IP addr (2-hop) IP addr (1-hop) Total cost
�[3;J

   *** olsr.org - pre-0.9.8-git_0000000-hash_dce3d5473b0637a358df3777b5012b75 ***

--- 16:29:36.223700 ---------------------------------------------------- LINKS

IP address hyst LQ ETX
10.100.0.1 0.000 0.000/1.000 INFINITE

--- 16:29:36.223725 ------------------------------------------------ NEIGHBORS

 IP address	Hyst	LQ	ETX	SYM   MPR   MPRS  will

--- 16:29:36.223765 ----------------------- TWO-HOP NEIGHBORS

IP addr (2-hop) IP addr (1-hop) Total cost
^CReceived signal Interrupt - shutting down
Deleting all routes...
RIB: del prefix 10.100.0.2/32 from 10.100.0.2
Closing sockets...
Closing plugins...
BMF: closed OLSR interface "emane0"
BMF: closed non-OLSR interface "eth0"
BMF: closed 3 sockets
Restoring network state
ree all memory...

<<<< olsr.org - pre-0.9.8-git_0000000-hash_dce3d5473b0637a358df3777b5012b75 - terminating >>>>
http://www.olsr.org
[rrpucsuser@radio-002 ~]$ sudo /usr/local/sbin/olsrd -f /home/rrpucsuser/emane/rrpucs/tests/baseline/config/rrpucs/node-002/olsrd.conf -d 0

*** olsr.org - pre-0.9.8-git_0000000-hash_dce3d5473b0637a358df3777b5012b75 ***
http://www.olsr.org

Parsing file: "/home/rrpucsuser/emane/rrpucs/tests/baseline/config/rrpucs/node-002/olsrd.conf"
Debug level: 0
IpVersion: 4
Lock file /home/rrpucsuser/emane/rrpucs/tests/baseline/persist/node-002/radio-002/var/run/olsrd.lock
Clear screen enabled
Link quality aging factor 0.200000
HNA IPv4 entry: 10.98.2.0/255.255.255.0
setting ifs_in_curr_cfg = 0
HELLO interval: 5.00
HELLO validity: 20.00
Plugin: olsrd_txtinfo.so.1.1
Plugin param key:"accept" val: "0.0.0.0"
Plugin: olsrd_bmf.so.1.7.0
Plugin param key:"DoLocalBroadcast" val: "no"
Plugin param key:"CapturePacketsOnOlsrInterfaces" val: "no"
Plugin param key:"BmfMechanism" val: "Broadcast"
Plugin param key:"NonOlsrIf" val: "eth0"
Plugin param key:"FanOutLimit" val: "0"
Plugin param key:"BroadcastRetransmitCount" val: "1"
IPv4 broadcast/multicast : AUTO
Mode : mesh
IPv6 multicast : ::
HELLO emission/validity : 5.00 (d)/20.00 (d)
TC emission/validity : 0.00/0.00
MID emission/validity : 0.00/0.00
HNA emission/validity : 0.00/0.00
Autodetect changes : no
olsr.org - pre-0.9.8-git_0000000-hash_dce3d5473b0637a358df3777b5012b75 detaching from the current process...

[rrpucsuser@radio-002 ~]$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.98.1.0 10.100.0.1 255.255.255.0 UG 2 0 0 emane0
10.98.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.99.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
10.100.0.0 0.0.0.0 255.255.255.0 U 0 0 0 emane0
10.100.0.1 10.100.0.1 255.255.255.255 UGH 2 0 0 emane0
10.101.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2
224.0.0.0 0.0.0.0 240.0.0.0 U 0 0 0 bmf0

[rrpucsuser@radio-002 ~]$ ping -R radio1ota
PING radio1ota (10.101.0.1) 56(124) bytes of data.
64 bytes from radio1ota (10.101.0.1): icmp_seq=1 ttl=64 time=0.043 ms
RR: radio2ota (10.101.0.2)
radio1ota (10.101.0.1)
radio1ota (10.101.0.1)
radio2ota (10.101.0.2)

64 bytes from radio1ota (10.101.0.1): icmp_seq=2 ttl=64 time=0.050 ms (same route)
^C
--- radio1ota ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1051ms
rtt min/avg/max/mdev = 0.043/0.046/0.050/0.007 ms
[rrpucsuser@radio-002 ~]$ ping -R radio1emane0
ping: radio1emane0: Name or service not known
[rrpucsuser@radio-002 ~]$ ping -R radio1emane
PING radio1emane (10.100.0.1) 56(124) bytes of data.
64 bytes from radio1emane (10.100.0.1): icmp_seq=1 ttl=64 time=0.810 ms
RR: radio2emane (10.100.0.2)
radio1emane (10.100.0.1)
radio1emane (10.100.0.1)
radio2emane (10.100.0.2)

64 bytes from radio1emane (10.100.0.1): icmp_seq=2 ttl=64 time=0.896 ms (same route)
64 bytes from radio1emane (10.100.0.1): icmp_seq=3 ttl=64 time=0.908 ms (same route)
64 bytes from radio1emane (10.100.0.1): icmp_seq=4 ttl=64 time=0.901 ms (same route)
^C^X
--- radio1emane ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 0.810/0.878/0.908/0.053 ms
[rrpucsuser@radio-002 ~]$ ping -R radio1data
PING radio1data (10.98.1.1) 56(124) bytes of data.
64 bytes from radio1data (10.98.1.1): icmp_seq=1 ttl=64 time=0.836 ms
RR: radio2emane (10.100.0.2)
radio1data (10.98.1.1)
radio1data (10.98.1.1)
radio2emane (10.100.0.2)

64 bytes from radio1data (10.98.1.1): icmp_seq=2 ttl=64 time=0.875 ms (same route)
^C
--- radio1data ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.836/0.855/0.875/0.035 ms

Host System IFCONFIG

[rrpucsuser@localhost baseline]$ ifconfig
emane.ctl: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.99.0.200 netmask 255.255.255.0 broadcast 0.0.0.0
inet6 fe80::f0b4:a4ff:feda:f674 prefixlen 64 scopeid 0x20
ether fe:13:b3:5b:9c:e8 txqueuelen 1000 (Ethernet)
RX packets 3121 bytes 566839 (553.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3855 bytes 304288 (297.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

emane.ota: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.101.0.200 netmask 255.255.255.0 broadcast 0.0.0.0
inet6 fe80::a869:fdff:fea2:a842 prefixlen 64 scopeid 0x20
ether fe:a7:6f:46:cb:f8 txqueuelen 1000 (Ethernet)
RX packets 779 bytes 176100 (171.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 43 bytes 6390 (6.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

eth0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.16.1.2 netmask 255.255.0.0 broadcast 172.16.255.255
inet6 fe80::40cf:92d8:5332:d828 prefixlen 64 scopeid 0x20
ether 54:b2:03:0b:68:cd txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device memory 0xdc100000-dc11ffff

eth1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 54:b2:03:0b:68:cc txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 16 memory 0xdc200000-dc220000

host1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::9814:d0ff:fee3:8079 prefixlen 64 scopeid 0x20
ether fe:32:a4:c2:f4:c3 txqueuelen 1000 (Ethernet)
RX packets 38 bytes 2544 (2.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 18 bytes 1436 (1.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

host2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::68e2:eeff:fe30:6bc6 prefixlen 64 scopeid 0x20
ether fe:28:02:b7:78:d9 txqueuelen 1000 (Ethernet)
RX packets 1567 bytes 45356 (44.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 18 bytes 1436 (1.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 46 bytes 2324 (2.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 46 bytes 2324 (2.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

veth.ctl.001: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::fc3a:d9ff:fe16:22e8 prefixlen 64 scopeid 0x20
ether fe:3a:d9:16:22:e8 txqueuelen 1000 (Ethernet)
RX packets 279 bytes 38219 (37.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 525 bytes 46022 (44.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

veth.ctl.002: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::fc52:1aff:fe8f:6cba prefixlen 64 scopeid 0x20
ether fe:52:1a:8f:6c:ba txqueuelen 1000 (Ethernet)
RX packets 18 bytes 1436 (1.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 81 bytes 6794 (6.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

veth.ctl.003: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::fcc1:8dff:fe2e:14ad prefixlen 64 scopeid 0x20
ether fe:c1:8d:2e:14:ad txqueuelen 1000 (Ethernet)
RX packets 2122 bytes 391781 (382.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2719 bytes 214915 (209.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

veth.ctl.004: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::fc13:b3ff:fe5b:9ce8 prefixlen 64 scopeid 0x20
ether fe:13:b3:5b:9c:e8 txqueuelen 1000 (Ethernet)
RX packets 709 bytes 179775 (175.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 783 bytes 55536 (54.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

veth.host.001: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::fc4d:a0ff:fe47:36ae prefixlen 64 scopeid 0x20
ether fe:4d:a0:47:36:ae txqueuelen 1000 (Ethernet)
RX packets 27 bytes 2318 (2.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 43 bytes 3342 (3.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

veth.host.002: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::fc32:a4ff:fec2:f4c3 prefixlen 64 scopeid 0x20
ether fe:32:a4:c2:f4:c3 txqueuelen 1000 (Ethernet)
RX packets 18 bytes 1436 (1.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 44 bytes 3528 (3.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

veth.host.003: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::fcbe:32ff:fe18:deec prefixlen 64 scopeid 0x20
ether fe:be:32:18:de:ec txqueuelen 1000 (Ethernet)
RX packets 23 bytes 1958 (1.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1568 bytes 67152 (65.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

veth.host.004: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::fc28:2ff:feb7:78d9 prefixlen 64 scopeid 0x20
ether fe:28:02:b7:78:d9 txqueuelen 1000 (Ethernet)
RX packets 1544 bytes 65336 (63.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 39 bytes 3098 (3.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

veth.ota.001: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::fcf2:44ff:fe00:fd9d prefixlen 64 scopeid 0x20
ether fe:f2:44:00:fd:9d txqueuelen 1000 (Ethernet)
RX packets 444 bytes 105083 (102.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 388 bytes 87769 (85.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

veth.ota.002: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::fca7:6fff:fe46:cbf8 prefixlen 64 scopeid 0x20
ether fe:a7:6f:46:cb:f8 txqueuelen 1000 (Ethernet)
RX packets 350 bytes 83321 (81.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 459 bytes 106126 (103.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:80:d2:49 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.200.231 netmask 255.255.255.0 broadcast 192.168.200.255
inet6 fe80::ed7a:9621:f69:b24a prefixlen 64 scopeid 0x20
inet6 2600:2b00:6a42:7d00:8bb2:17fc:cecc:e6a6 prefixlen 64 scopeid 0x0
ether dc:8b:28:79:f6:bc txqueuelen 1000 (Ethernet)
RX packets 15020 bytes 3806004 (3.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5120 bytes 784076 (765.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

RADIO2 CONTAINER IFCONFIG

[rrpucsuser@radio-002 ~]$ ifconfig
bmf0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 10.100.0.2 netmask 255.255.255.255 destination 10.100.0.2
inet6 fe80::561d:3835:6571:e0ac prefixlen 64 scopeid 0x20
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
RX packets 9 bytes 756 (756.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8 bytes 384 (384.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

emane0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.100.0.2 netmask 255.255.255.0 broadcast 10.100.0.255
inet6 fe80::2:ff:fe00:2 prefixlen 64 scopeid 0x20
ether 02:02:00:00:00:02 txqueuelen 1000 (Ethernet)
RX packets 426 bytes 46392 (45.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 337 bytes 38170 (37.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.98.2.1 netmask 255.255.255.0 broadcast 10.98.2.255
inet6 fe80::200:ff:fe02:300 prefixlen 64 scopeid 0x20
ether 00:00:00:02:03:00 txqueuelen 1000 (Ethernet)
RX packets 1622 bytes 69420 (67.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 23 bytes 1958 (1.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.99.0.3 netmask 255.255.255.0 broadcast 10.99.0.255
inet6 fe80::200:ff:fe02:301 prefixlen 64 scopeid 0x20
ether 00:00:00:02:03:01 txqueuelen 1000 (Ethernet)
RX packets 2773 bytes 219739 (214.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2164 bytes 397529 (388.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

eth2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.101.0.2 netmask 255.255.255.0 broadcast 10.101.0.255
inet6 fe80::200:ff:fe02:302 prefixlen 64 scopeid 0x20
ether 00:00:00:02:03:02 txqueuelen 1000 (Ethernet)
RX packets 471 bytes 109218 (106.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 362 bytes 86393 (84.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 2665 bytes 378509 (369.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2665 bytes 378509 (369.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

ETC/HOSTS

Node Control

10.99.0.200 radiocontrol
10.99.0.1 radio1ctl
10.99.0.2 host1ctl
10.99.0.3 radio2ctl
10.99.0.4 host2ctl
10.99.0.5 radio3ctl
10.99.0.6 host3ctl
10.99.0.7 radio4ctl
10.99.0.8 host4ctl

Jammer Control Interfaces

10.99.0.131 jammer1ctl

Radio Data Interfaces

10.98.1.1 radio1data
10.98.1.2 host1data
10.98.2.1 radio2data
10.98.2.2 host2data
10.98.3.1 radio3data
10.98.3.2 host3data
10.98.4.1 radio4data
10.98.4.2 host4data

CAM Interfaces

10.97.0.1 cam1
10.97.0.2 cam2
10.97.0.3 cam3
10.97.0.4 cam4

Radio EMANE Transport Interfaces

10.100.0.200 radioemane
10.100.0.1 radio1emane
10.100.0.2 radio2emane
10.100.0.3 radio3emane
10.100.0.4 radio4emane

Radio EMANE OTA Interfaces

10.101.0.1 radio1ota
10.101.0.2 radio2ota
10.101.0.3 radio3ota
10.101.0.4 radio4ota

@sgalgano
Copy link
Member

Did you run letce2-tutorial/exp-03 and verify host-to-host communication?

Do you have a default route on each host pointing to its respective radio?

@hideogump
Copy link
Author

Yes, I was able to get the letce2 tutorial to work. There is a default route in each host container, and what I have observed is the ARP broadcast message which precedes any traffic from host to host, is observed on the eth0 (host lan) interface to the radio container, but is not getting routed to the emane0 emulation/transport boundary. It was my assumption, perhaps incorrectly, that the Broadcast Multicast Flooding plugin to the OLSRD application might be responsible for this activity. Perhaps you have some thoughts on how initial broadcast traffic, such as ARPs, would nominally be routed to the EMANE interface for transmission over the air.

@sgalgano
Copy link
Member

The host containers are arping for the MAC address of the IP next hop for a respective destination based on the routing table. In this case, the attached radio is the default route out, so it is the target of the host container's arp. If you are not using default routes, you would need specific host network routes on each host container - but those would still point to the host container's attached radio and work the same way. The only arps going over-the-air are the ones generated by the radio container looking for the the MAC address of the IP next hop for self-generated or IP forwarded traffic. ARPs are not forwarded.

@hideogump
Copy link
Author

Thanks for the input.  I was working with the assumption that the models with paired radio and host containers acted somewhat as a Layer 2 Ethernet switch or device, and as such host to host ARP requests (using broadcast destination) and ARP responses (using unicast destination) would actually traverse the entire OTA network intact to the actual host containers destinations. That would be similar to the Layer 2 radios we design.

@sgalgano
Copy link
Member

We have done custom transports for customers using OVS for that purpose. You might want to start there.

@hideogump
Copy link
Author

Thanks Steve for focusing my attention into the right direction. I was making some false assumptions about OTA ARPs host to host. I now have it working properly based on your input. Closing this baby and long thread out.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants