Trouble setting up bonded ethernet devices on the TX2, using a carrier board with a 2nd ethernet controller

Hello!

We have a TX2 with a Connect Tech Astro Carrier and Breakout Board (link). This carrier breaks out the TX2’s built in ethernet device eth0 (Broadcom BCM54610C1IMLG - link), and also provides a second ethernet device eth1 (Intel 82574 - link).

We have been having trouble trying to set up a bond between the two devices. We are using Jetson 3.0, Linux4Tegra version 27.1.0, and are installing the Connect Tech board support package CTI-L4T-V103.

I have recompiled the standard kernel just to add the bonding module. And installed ifenslave (and have also tried the older version ifenslave-2.6)

No matter what we do we get this vague error:
sh: echo: I/O error
eth0: could not add interface

But eth1 (the connect tech interface) does properly join the bond. With further digging, it appears there is something wrong with the TX2’s built in network interface’s driver.

Does the TX2’s network interface driver support bonding?

Thanks!
-Nick

I am curious what commands you are using to bond? I ask because the error shows the problem is perhaps in how commands are escaped in a shell script (this is perhaps an error not directly related to networking). Being able to see what the script is doing might offer more clues…if there is a script involved perhaps you could post it. Output from “ifconfig” might also help.

Hi,

I’ve also tried the network bonding with TX2 but issue was same as previous post.
I tried bond with eth0 and wlan0.
The followings are what I did.

  1. Config and compile kernel. It was under the ‘Device Driver → Network device support’
  • checked “bonding driver support” and compile kernel
  1. disabled the NetworkManager - GUI service
  • sudo systemctl stop NetworkManager.service
  • sudo systemctl disable NetworkManager.service
  1. install ifenslave and edit /etc/modules based on the ubuntu bonding guide
  1. Edit /etc/modprobe.d/bonding.conf
    nvidia@tegra-ubuntu:~$ cat /etc/modprobe.d/bonding.conf

/etc/modprobe.d/bonding.conf

alias bond0 bonding
options bonding mode=0 miimon=100

  1. Edit /etc/network/interface
    nvidia@tegra-ubuntu:~$ cat /etc/network/interfaces

interfaces(5) file used by ifup(8) and ifdown(8)

eth0 is manually configured, and slave to the “bond0” bonded NIC

auto eth0
iface eth0 inet manual
bond-master bond0

wlan0 ditto, thus creating a 2-link bond.

auto wlan0
iface wlan0 inet manual
bond-master bond0
wpa-ssid ****
wpa-psk ****

bond0 is the bonding NIC and can be used like any other normal NIC.

bond0 is configured using static network information.

auto bond0
iface bond0 inet static
address 192.168.1.100
gateway 192.168.1.1
netmask 255.255.255.0
bond-mode 0
bond-miimon 100
bond-slaves none

I got the following boot message and eth0 was not added to bond but wlan0 was ok.
nvidia@tegra-ubuntu:~$ dmesg | grep ‘bond|eth0|wlan0’
[ 6.863183] bond0: Setting MII monitoring interval to 100
[ 6.891630] IPv6: ADDRCONF(NETDEV_UP): bond0: link is not ready
[ 6.898147] 8021q: adding VLAN 0 to HW filter on device bond0
[ 7.467388] bond0: Adding slave eth0
[ 7.538816] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 8.600570] Register interface [wlan0] MAC: 00:04:4b:c4:e7:fd
[ 8.872408] bond0: Adding slave wlan0
[ 9.118496] eqos 2490000.ether_qos eth0: Link is Up - 100Mbps/Full - flow control rx/tx
[ 9.527691] bond0: making interface wlan0 the new active one
[ 9.533523] bond0: Enslaving wlan0 as an active interface with an up link
[ 9.540655] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 9.547778] IPv6: ADDRCONF(NETDEV_CHANGE): bond0: link becomes ready

Even though I tried to add eth0 to bond0 manually. But still failed.
nvidia@tegra-ubuntu:~$ sudo ifenslave bond0 eth0
[ 4077.488315] bcm54xx_low_power_mode(): put phy in iddq-lp mode
[ 4077.521886] bond0: Adding slave eth0
sh: echo: I/O error
eth0: could not add interface

Can you guide what else to do?

gudo

I have no way to help beyond checking if the feature is installed correctly for the kernel, but here are some initial starting questions…

Normally such a feature would only require a kernel module. Did you install a module, or did you replace the kernel Image?

Assuming you only built a module, do you see the module via “lsmod”?

What do you see from “uname -r”? What do you see from “gunzip < /proc/config.gz | grep ‘BONDING’”?

Hi,

I got the below. Bonding module installed correctly.
I compiled kernel and copied it based on ‘https://github.com/jetsonhacks/buildJetsonTX2Kernel.git’ guide.
wlan0 to bonding was ok except eth0.
Also I tested the usb ethernet module to bond and it was also ok.

Why don’t you try if the bonding function can be used with TX2 or not?
bonding is not complex or difficult to set up, but I do not know why not.

nvidia@tegra-ubuntu:~$ gunzip < /proc/config.gz | grep ‘BONDING’
CONFIG_BONDING=m
nvidia@tegra-ubuntu:~$ uname -r
4.4.38
nvidia@tegra-ubuntu:~$ lsmod
Module Size Used by
ipt_MASQUERADE 2115 1
nf_nat_masquerade_ipv4 2931 1 ipt_MASQUERADE
iptable_nat 2285 1
nf_nat_ipv4 6554 1 iptable_nat
xt_addrtype 3298 2
iptable_filter 2119 1
ip_tables 18322 2 iptable_filter,iptable_nat
xt_conntrack 3551 1
nf_nat 16285 2 nf_nat_ipv4,nf_nat_masquerade_ipv4
br_netfilter 13923 0
overlay 33899 0
fuse 83099 2
bcmdhd 7447414 0
pci_tegra 60337 0
bonding 126662 0
bluedroid_pm 11195 0

I simply don’t have the hardware to try.

Even if I did, I have never thought about it since I have only a single internet connection (I suspect that if two interfaces bond to the same subnet an incorrect configuration could behave similar to an ordinary bridge where the traffic loops between interfaces…the failure in that case is spectacular). What I’m getting at here is that you need to know that each interface is set up correctly on its own before it can bond and work. If both go to different routers, are the routers themselves assigning to different subnets? I’m kind of grasping here since I have no real knowledge of the setup other than having two interfaces on the Jetson. You might want to describe in more detail how everything is connected.

Hi Sgkim,

as far as i understand, you can’t bond eth0 with wlan0 . You can do bonding with eth0 & eth1 for example, after you install extra LAN card in PCIe slot .
Between eth0 and wlan0 you can only do bridging .