SylixOS 双网卡冗余备份使用说明
admin
2023-03-16 09:01:22
0
  1. 工作准备

    开发板需要有双网卡,并能进行正常通信。

    若选择中断机制实现,硬件PHY上需具有中断引脚且能正常输出。

    1. 环境准备

  2. 原理概述

    双网卡冗余备份方案采用"主-备份"网卡策略将多块物理网卡进行绑定,绑定后两个网卡只有一个物理地址和IP地址,同一时刻只有一个网卡进行工作,当主网卡或线路出现故障时能自动切换到备份网卡。

    双网卡冗余备份方案采用轮询机制检测,即每隔一段时间进行一次PHY连接状态检测,当检测到主网卡连接断开且备份网卡连接正常时,切换至备份网卡。

    双网卡冗余备份方案采用中断机制检测,即PHY连接状态改变产生中断信号,立即进行检测,当检测到主网卡连接断开且备份网卡连接正常时,切换至备份网卡。

    中断机制检测相比轮询机制,反应时间更快,但需要硬件支持。

    1. 中断机制概述

    2. 轮询机制概述

  3. 实现步骤

    调用ifconfig命令查看当前网卡信息,获取需要进行绑定的两个网卡名,如图 4.1所示。

    SylixOS 双网卡冗余备份使用说明

    图 4.1获取网卡信息

    跳转到/etc/目录下,添加一个绑定双网卡的配置文件bonding.ini,内容示例如程序清单 4.1所示。

    程序清单 4.1 bonding.ini配置文件

    [bonding]
    ipaddr=192.168.2.220
    netmask=255.255.255.0
    gateway=192.168.2.1
    mac=80:46:38:78:28:39
    en1name=en1
    en2name=en2
    mode=1
    ****** mode=0 (若不配置默认100ms)*********
    miimon=100
    ****** mode=1 (若不配置默认下降沿触发)*********
    gpiotype=1
    gpiolevel=0

    本次配置采用了主从策略,具体说明如下:

    1. 基础配置

  • ipaddr:配置绑定后的IP地址;

  • netmask:配置绑定后的子网掩码;

  • gateway:配置绑定后的默认网关;

  • mac:配置绑定后的物理地址;

  • en1name:配置需要绑定的主网卡名;

  • en2name:配置需要绑定的备份网卡名;

  • mode:配置工作模式(0:轮询机制,1:中断机制),若选择轮询机制,需配置miimon项;若选择中断机制,需配置en1gpio、en2gpio、gpiotype、gpiolevel项;

  • miimon:配置轮询检测时间(毫秒),通常设置为100毫秒;

  • gpiotype:配置触发方式(0:电平触发,1:边沿触发);

  • gpiolevel:配置触发条件(如果为电平触发, 1 表示高电平触发, 0 表示低电平触发;如果为边沿触发, 1 表示上升沿触发, 0 表示下降沿触发, 2 表示双边沿触发)。

  1. ioctl函数实现

双网卡冗余备份模块需要调用网卡驱动中的ioctl函数,并设置物理网卡硬件地址,要求底层网卡驱动具有如表格 4.1功能:

表格 4.1 ioctl函数cmd命令

cmd命令

参数类型

功能

SIOCSIFHWADDR

struct ifreq

设置硬件地址

GET_LINK_STATE

struct ifreq

获取PHY状态

SET_PHY_MICR

NULL

设置PHY中断

CLEAR_PHY_MISR

NULL

清除PHY中断状态

GET_MAC_IRQ

ULONG

获取网卡中断号

GET_PHY_GPIO

UINT8

获取PHY中断输出GPIO管脚号

 

若网卡驱动中ioctl函数未实现,需修改网卡驱动,具体细节为:

  1. 网卡驱动函数中添加ioctl函数,如程序清单 4.2所示。

程序清单 4.2网卡驱动函数修改

static struct netdev_funcs  net0_drv = {
    ioctl    = __enetCoreIoctl,
};
  1. 编写ioctl函数,如程序清单 4.3所示。

程序清单 4.3添加ioctl函数

static INT  __enetCoreIoctl (struct netdev  *pNetDev, int  iCmd, void  *pArg)
{
    struct ifreq  *pifreq;
    
    switch (iCmd) {
    case XXX:
        break;
    default:
        break;
    }
     return  (ERROR_NONE);
}
  1. ioctl函数中,添加SIOCSIFHWADDR命令,如程序清单 4.4所示。

程序清单 4.4添加SIOCSIFHWADDR命令

#define SIOCSIFHWADDR          _IOW('i', 55, struct ifreq)
case GET_LINK_STATE:
    pifreq = (struct ifreq *)pArg;
    /* TODO:设置 MAC 地址 */
    break;
  1. ioctl函数中,添加GET_MAC_IRQ命令,如程序清单 4.5所示。

程序清单 4.5添加GET_MAC_IRQ命令

#define GET_MAC_IRQ            _IOWR('i', 260, struct ifreq)
case GET_MAC_IRQ:
    /* TODO:获取 MAC 中断号 */
    break;
  1. 轮询机制实现

轮询机制需要调用网卡驱动中的ioctl函数,并读取硬件设备PHY的连接状态,需要修改网卡驱动ioctl函数,具体细节为:

  • ioctl函数中,添加GET_LINK_STATE命令,如程序清单 4.6所示。

程序清单 4.6添加GET_LINK_STATE命令

#define GET_LINK_STATE         _IOWR('i', 257, struct ifreq)
case GET_LINK_STATE:
    pifreq = (struct ifreq *)pArg;
    /* TODO: 读取硬件设备PHY的连接状态 */
    /* 若连接:pifreq->ifr_flags |= IFF_RUNNING; */
    /* 未连接:pifreq->ifr_flags &= ~IFF_RUNNING; */
    break;
  1. 中断机制实现

中断机制需要调用网卡驱动中的ioctl函数,并清除PHY的中断状态寄存器,需要修改网卡驱动ioctl函数,具体细节为:

  • 添加SET_PHY_MICR命令,如程序清单 4.7所示。

程序清单 4.7添加SET_PHY_MICR命令

#define SET_PHY_MICR           _IOWR('i', 258, struct ifreq)
case SET_PHY_MICR:
    /* TODO:设置 PHY 中断控制寄存器,使能链接状态改变中断 */
    /* 将硬件 PHY 上的中断引脚设置为输出 */
    break;
  • 添加CLEAR_PHY_MISR命令,如程序清单 4.8所示。

程序清单 4.8添加CLEAR_PHY_MISR命令

#define CLEAR_PHY_MISR         _IOWR('i', 259, struct ifreq)
case CLEAR_PHY_MISR:
    /* TODO:清除 PHY 中断状态 */
    break;

    注意:申请GPIO管脚号需要在开发板 BSP 适配文件中添加对应的GPIO配置。

  • 添加GET_PHY_GPIO命令,如程序清单 4.9 所示。

程序清单 4.9添加GET_PHY_GPIO命令

#define GET_PHY_GPIO            _IOWR('i', 261, struct ifreq)
case GET_PHY_GPIO:
    /* TODO:获取 PHY GPIO 管脚号 */
    break;
  1. 使用说明

    模块加载,开启双网卡冗余备份。

    模块卸载,关闭双网卡冗余备份。

    1. 功能关闭

    2. 功能开启

  2. 测试方法

    主机ping开发板,手动拔掉一根网线,观察是否自动切换到另一个网卡上去,网络是否还是连通状态;等会拔掉另一根网线再次观察网络连通性。


相关内容

热门资讯

ICC逮捕令致内塔尼亚胡出行受... 【环球网报道】据以色列《新消息报》网站26日报道,由于国际刑事法院(ICC)2024年就以色列在巴勒...
“罗永浩怒斥电视机厂商”戳中了... 7月25日晚,罗永浩发文怒斥当下电视机的产品设计。据都市快报报道,罗永浩表示,他为家中老人换了两次电...
各地各部门坚持人民至上筑牢防汛... 新华社北京7月25日电 题:风雨同舟映初心——各地各部门坚持人民至上筑牢防汛抗洪坚实堤坝新华社记者当...
法院回应LV起诉地产开发商 7月26日,厦门市湖里区人民法院发布情况通报,网传案情“路易威登公司起诉地产开发商,因楼盘外立面四叶...
携程的问题不仅在于垄断,更在于... 国内平台科技企业一般都是通过向B端收费、抽佣获利,尽量给消费者创造一个比较清爽的使用环境。携程算是最...
海信电视用遥控器关闭后打不开 原因可能是遥控器的电池没有装好或者是没电了,需要重新安装一下电池或者更换新的电池试一试;原因可能是电...
电视机突然没电源打不开了 有可能是电视开关的电源线断了;可能是电视在使用时短路;可能是电源插头插座松动;可能是电视内部零件接触...
电热水器下面那个小龙头漏水是怎... 电热水器下面那个小龙头漏水是怎么回事?1、因为安全阀发生了故障或者是已经被损坏了,就会有漏水的现象;...
回答下电脑桌面一片空白怎么恢复 电脑桌面上如果是一片空白,那说明您的电脑图标被隐藏了,想要恢复就要按照如下的三个步骤去操作才行。 第...
澳总理要找特朗普“理论”关税:... 当地时间7月26日,澳大利亚总理阿尔巴尼斯表示,他将直接向美国总统特朗普提出抗议,反对美国新近宣布的...