概述
某些信息设备为了增强通讯可靠性,硬件上往往配备双冗余网卡,当一块网卡出现问题时,另一块网卡可以接管工作保持网络通畅。本文介绍一种基于嵌入式linux系统的双冗余网卡的主备切换实现方法。linux内核提供了bond技术,利用该技术可以将多块网卡虚拟成为单一网卡,对外表现为一块网卡并且仅有一个IP地址。
bond技术
在正常情况下,网卡只接收目的地址为自身MAC地址的以太网帧,过滤掉其他的数据帧。而混杂模式下,网卡可接收所有数据帧。bond技术下网卡就运行在这种模式下,其修改了驱动程序的mac地址,将两块网卡的mac地址设置成为同一mac地址,可以及接收特定mac的数据帧。然后把相应的数据帧传送给bond驱动程序处理。
准备工作
1、硬件平台:主机是windows+ubuntu虚拟机,目标机是altera cyclone V SoC平台。
2、查看嵌入式linux是否已经将bond编译进内核,可以通过menuconfig进行配置。如下图所示
3、开机查看嵌入式linux是否已经存在ifenslave工具,如果没有需编译生成,找到内核中ifenslave.c,在其所在目录下打开终端,输入arm-linux-gnueabihf-gcc -Wall -o -I linux-socfpag/include ifenslave.c -o ifenslave进行编译。将ifenslave拷贝到目标机系统中。
bond主备模式配置
1、目标机上cd到/etc/network,修改interface文件添加如下命令
auto bond0
ifface bond0 inet static
address 192.168.3.12
netmask 255.255.255.0
bond-mode active-backup
bond-miimon 10
auto eth0
iface eth0 inet manual
auto eth1
iface eth1 inet manual
3、使用ifenslave 工具,在rc.local中添加如下命令
exec ~/ifenslave bond0 eth0 eth1