Network Interface Bonding: Difference between revisions

From RidgeRun Developer Wiki
No edit summary
mNo edit summary
 
(4 intermediate revisions by 2 users not shown)
Line 1: Line 1:
= Introduction =
<seo title="Network Interface Bonding | Linux Bonding Driver" titlemode="replace" keywords="GStreamer, Linux SDK, Linux BSP,  Embedded Linux, Device Drivers, Nvidia, Xilinx, TI, NXP, Freescale, Embedded Linux driver development, Linux Software development, Embedded Linux SDK, Embedded Linux Application development, GStreamer Multimedia Framework."  description="Bond two Ethernet interfaces so that they will behave the same from a Linux application point of view. Learn about network interface bonding now at RidgeRun."></seo>
 
= Introduction to Network Interface Bonding =


Some mobile embedded devices have multiple Ethernet interfaces.  To make it easy for the user, it shouldn't matter which Ethernet jack they use.  One way to accomplish this is to bond the two interfaces so they both behave the same from a Linux application point of view.
Some mobile embedded devices have multiple Ethernet interfaces.  To make it easy for the user, it shouldn't matter which Ethernet jack they use.  One way to accomplish this is to bond the two interfaces so they both behave the same from a Linux application point of view.
Line 13: Line 15:
Run <tt>make config</tt> and enable the bonding driver support:
Run <tt>make config</tt> and enable the bonding driver support:


  Kernel Configuration -> Device -> Device Drivers -> Network device support -> Bonding driver support
  Kernel Configuration -> Device Drivers -> Network device support -> Bonding driver support


== Busybox ifenslave utility ==
== Busybox ifenslave utility ==
Line 73: Line 75:
   ping -c 1 10.111.0.4
   ping -c 1 10.111.0.4
done
done
<pre>
</pre>
[[Category:Whitepaper]]
[[Category:Whitepaper]]

Latest revision as of 10:06, 1 September 2018


Introduction to Network Interface Bonding

Some mobile embedded devices have multiple Ethernet interfaces. To make it easy for the user, it shouldn't matter which Ethernet jack they use. One way to accomplish this is to bond the two interfaces so they both behave the same from a Linux application point of view.

Configuration

Run make config to enable the bonding driver and the busybox

Linux bonding driver

The SDK needs to be configure to enable the Linux bonding driver.

Run make config and enable the bonding driver support:

Kernel Configuration -> Device Drivers -> Network device support -> Bonding driver support

Busybox ifenslave utility

The SDK needs to be configure to enable the Busybox ifenslave utility.

File System Configuration-> Select target's file system software -> busybox -> Busybox configuration -> Networking Utilities ->ifenslave    

Runtime configuration

The following assumes the Linux bonding driver was build as a module and the two network interfaces to be bonded are eth0 and eth1.

modprobe bonding
ifconfig eth0 down
ifconfig eth1 down
ifconfig bond0 up
ifenslave bond0 eth0 eth1
ifconfig bond0 192.168.0.1 netmask 255.255.255.0
ifconfig eth0 up
ifconfig eth1 up

Bonded interface testing

A simple way to test the configuration is to use two laptop computers, both configured with different fixed IP addresses on the same sub-lan. Then run the ping command on each device trying to ping the other devices. Since we are using bonding the ping packets will not be routed by the target device, thus the ping from one laptop to the other will fail.

I used a LeopardBoard 368 with an Ethernet USB dongle. I enabled USB ACM driver to support the Ethernet dongle. I also configured the LeopardBoard 368 USB interface to operate in host mode.

Commands to be run on laptop 1 with IP address 10.111.0.2 have a yellow background. Commands to be run on laptop 2 with IP address 10.111.0.4 have an aqua background. Commands run on the target hardware have a magenta background.

modprobe bonding
ifdown -a # only needed if you were using /etc/network/interfaces file
ifconfig eth0 down
ifconfig eth1 down
ifconfig bond0 up
ifenslave bond0 eth0 eth1
ifconfig bond0 10.111.0.59 netmask 255.255.255.0
ifconfig eth0 up
ifconfig eth1 up

Now see if each laptop can exchange packets with the target.

ping 10.111.0.59
ping 10.111.0.59

From the target you should be able to ping both laptops:

while sleep 1 ; do
   ping -c 1 10.111.0.2
   ping -c 1 10.111.0.4
done