财富坊cff888
  • 删除
    1. 工作准备

      1. 环境准备

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

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

    2. 原理概述

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

      1. 轮询机制概述

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

      1. 中断机制概述

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

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

    3. 实现步骤

      1. 基础配置

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

      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. 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函数,具体细节为:

    程序清单 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函数,具体细节为:

    程序清单 4.7添加SET_PHY_MICR命令

    #define SET_PHY_MICR           _IOWR('i', 258, struct ifreq)
    case SET_PHY_MICR:
        /* TODO:设置 PHY 中断控制寄存器,使能链接状态改变中断 */
        /* 将硬件 PHY 上的中断引脚设置为输出 */
        break;

    程序清单 4.8添加CLEAR_PHY_MISR命令

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

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

    程序清单 4.9添加GET_PHY_GPIO命令

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

      1. 功能开启

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

      1. 功能关闭

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

    2. 测试方法

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

    阅读全文
    版权声明:本文为博主原创文章,未经博主允许不得转载。

    双网卡冗余服务器典型技术

    大家好,我前几天在去联想玩的时候,看到他们工程师一台机装好几个网卡,速度还不错,我看一下,回到公司也到网上找了一些资料,双(多)网卡用一个IP的技术,对于各种内网服务器,和电脑、、、、很有用处,我把我...
    • lbyyy
    • lbyyy
    • 2005年12月31日 16:37
    • 3830

    SylixOS双网卡冗余备份设计方案

    设计概述 设计目标 目前SylixOS支持多网卡,每块网卡都有独立的物理地址和IP地址,以独立的形式让应用程序使用。但根据客户对网络通信可靠性方面的要求,需要在SylixOS下实现双网卡绑定同一IP地...
    • Ivan804638781
    • Ivan804638781
    • 2017年10月10日 16:04
    • 127

    linux下双网卡绑定——实现:失效保护(冗余)和双网卡负载均衡

    Linux bonding驱动提供了一种方法,用以把多个网络接口(network interface)组合成一个逻辑的"bonded"接口。Bonded接口的工作方式取决于驱动的模式:不同的模式提供了...
    • liuxiao723846
    • liuxiao723846
    • 2015年03月14日 22:23
    • 1173

    vxworks 双网卡冗余

    vxworks 系统下xia
    • HJUGujbwi223
    • HJUGujbwi223
    • 2014年06月04日 14:51
    • 809

    Centos 6.5双网卡绑定实现冗余

    1、开启内核对bond的支持,编辑/etc/modprobe.d/dist.conf 文件,加入下面两行 ? ? ?alias bond0 bonding ? ? ?options bond0 m...
    • u014056822
    • u014056822
    • 2015年01月29日 22:29
    • 1386

    利用OPC技术实现双网冗余系统的通讯驱动

    ????????????????????????????????????????????????????????????????????????????????????????????????山东石横...
    • sijigang
    • sijigang
    • 2005年01月06日 13:41
    • 3286

    Hadoop冗余机制实验验证

    Hadoop冗余机制实验验证 1 目的 Hadoop视硬件错误为常态,并通过块的冗余存储机制保证数据的高可靠性。在大多数情况下,副本系数是3,HDFS的存放策略是将一个副本存放在本地机架的节点上,一...
    • nuoline
    • nuoline
    • 2013年02月25日 18:37
    • 2699

    VMWARE ESX4的双网卡日冗余配置!

    用Vmware esx4配置HA服务器集群,默认要求每台物理主机都有网络冗余。 通常,现在的品牌服务器,都会有2个或者4个物理网络端口,可以把它们配置为冗余网路。 配置过程很简单,在esx4上做就...
    • bozaigao
    • bozaigao
    • 2012年01月06日 15:49
    • 2308

    分布式文件系统(DFS)打造数据冗余及自动备份

    近日一直在闭关修炼,近得闲暇,特浮出水面,把修炼中的一些所得和各位同道论坛论坛,以光我CTO之道门。 在中国,中小企业当然是大把大把滴,其OA环境多以几十台PC据多,有一些重要的数据,都是存储在...
    • liaoyuanzi
    • liaoyuanzi
    • 2013年01月07日 23:00
    • 1044

    ubuntu 12.04下双网卡绑定实现负载和冗余

    有一个需求是ubuntu下双网卡绑定,上连交换机已配置好,现在需要配置服务器,以下是配置过程 apt-get install ifenslave-2.6 modprobe bonding? 自动加载...
    • lingdaz
    • lingdaz
    • 2015年01月26日 16:09
    • 942
    内容举报
    返回顶部
    收藏助手
    不良信息举报
    您举报文章:SylixOS 双网卡冗余备份使用说明
    举报原因:
    原因补充:

    (最多只允许输入30个字)