溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

SylixOS 雙網(wǎng)卡冗余備份使用說明

發(fā)布時(shí)間:2020-07-06 01:17:27 來源:網(wǎng)絡(luò) 閱讀:658 作者:諸葛一帆丶 欄目:建站服務(wù)器
  1. 工作準(zhǔn)備

    開發(fā)板需要有雙網(wǎng)卡,并能進(jìn)行正常通信。

    若選擇中斷機(jī)制實(shí)現(xiàn),硬件PHY上需具有中斷引腳且能正常輸出。

    1. 環(huán)境準(zhǔn)備

  2. 原理概述

    雙網(wǎng)卡冗余備份方案采用"主-備份"網(wǎng)卡策略將多塊物理網(wǎng)卡進(jìn)行綁定,綁定后兩個(gè)網(wǎng)卡只有一個(gè)物理地址和IP地址,同一時(shí)刻只有一個(gè)網(wǎng)卡進(jìn)行工作,當(dāng)主網(wǎng)卡或線路出現(xiàn)故障時(shí)能自動(dòng)切換到備份網(wǎng)卡。

    雙網(wǎng)卡冗余備份方案采用輪詢機(jī)制檢測,即每隔一段時(shí)間進(jìn)行一次PHY連接狀態(tài)檢測,當(dāng)檢測到主網(wǎng)卡連接斷開且備份網(wǎng)卡連接正常時(shí),切換至備份網(wǎng)卡。

    雙網(wǎng)卡冗余備份方案采用中斷機(jī)制檢測,即PHY連接狀態(tài)改變產(chǎn)生中斷信號,立即進(jìn)行檢測,當(dāng)檢測到主網(wǎng)卡連接斷開且備份網(wǎng)卡連接正常時(shí),切換至備份網(wǎng)卡。

    中斷機(jī)制檢測相比輪詢機(jī)制,反應(yīng)時(shí)間更快,但需要硬件支持。

    1. 中斷機(jī)制概述

    2. 輪詢機(jī)制概述

  3. 實(shí)現(xiàn)步驟

    調(diào)用ifconfig命令查看當(dāng)前網(wǎng)卡信息,獲取需要進(jìn)行綁定的兩個(gè)網(wǎng)卡名,如圖 4.1所示。

    SylixOS 雙網(wǎng)卡冗余備份使用說明

    圖 4.1獲取網(wǎng)卡信息

    跳轉(zhuǎn)到/etc/目錄下,添加一個(gè)綁定雙網(wǎng)卡的配置文件bonding.ini,內(nèi)容示例如程序清單 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 (若不配置默認(rèn)100ms)*********
    miimon=100
    ****** mode=1 (若不配置默認(rèn)下降沿觸發(fā))*********
    gpiotype=1
    gpiolevel=0

    本次配置采用了主從策略,具體說明如下:

    1. 基礎(chǔ)配置

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

  • netmask:配置綁定后的子網(wǎng)掩碼;

  • gateway:配置綁定后的默認(rèn)網(wǎng)關(guān);

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

  • en1name:配置需要綁定的主網(wǎng)卡名;

  • en2name:配置需要綁定的備份網(wǎng)卡名;

  • mode:配置工作模式(0:輪詢機(jī)制,1:中斷機(jī)制),若選擇輪詢機(jī)制,需配置miimon項(xiàng);若選擇中斷機(jī)制,需配置en1gpio、en2gpio、gpiotype、gpiolevel項(xiàng);

  • miimon:配置輪詢檢測時(shí)間(毫秒),通常設(shè)置為100毫秒;

  • gpiotype:配置觸發(fā)方式(0:電平觸發(fā),1:邊沿觸發(fā));

  • gpiolevel:配置觸發(fā)條件(如果為電平觸發(fā), 1 表示高電平觸發(fā), 0 表示低電平觸發(fā);如果為邊沿觸發(fā), 1 表示上升沿觸發(fā), 0 表示下降沿觸發(fā), 2 表示雙邊沿觸發(fā))。

  1. ioctl函數(shù)實(shí)現(xiàn)

雙網(wǎng)卡冗余備份模塊需要調(diào)用網(wǎng)卡驅(qū)動(dòng)中的ioctl函數(shù),并設(shè)置物理網(wǎng)卡硬件地址,要求底層網(wǎng)卡驅(qū)動(dòng)具有如表格 4.1功能:

表格 4.1 ioctl函數(shù)cmd命令

cmd命令

參數(shù)類型

功能

SIOCSIFHWADDR

struct ifreq

設(shè)置硬件地址

GET_LINK_STATE

struct ifreq

獲取PHY狀態(tài)

SET_PHY_MICR

NULL

設(shè)置PHY中斷

CLEAR_PHY_MISR

NULL

清除PHY中斷狀態(tài)

GET_MAC_IRQ

ULONG

獲取網(wǎng)卡中斷號

GET_PHY_GPIO

UINT8

獲取PHY中斷輸出GPIO管腳號

 

若網(wǎng)卡驅(qū)動(dòng)中ioctl函數(shù)未實(shí)現(xiàn),需修改網(wǎng)卡驅(qū)動(dòng),具體細(xì)節(jié)為:

  1. 網(wǎng)卡驅(qū)動(dòng)函數(shù)中添加ioctl函數(shù),如程序清單 4.2所示。

程序清單 4.2網(wǎng)卡驅(qū)動(dòng)函數(shù)修改

static struct netdev_funcs  net0_drv = {
    ioctl    = __enetCoreIoctl,
};
  1. 編寫ioctl函數(shù),如程序清單 4.3所示。

程序清單 4.3添加ioctl函數(shù)

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函數(shù)中,添加SIOCSIFHWADDR命令,如程序清單 4.4所示。

程序清單 4.4添加SIOCSIFHWADDR命令

#define SIOCSIFHWADDR          _IOW('i', 55, struct ifreq)
case GET_LINK_STATE:
    pifreq = (struct ifreq *)pArg;
    /* TODO:設(shè)置 MAC 地址 */
    break;
  1. ioctl函數(shù)中,添加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. 輪詢機(jī)制實(shí)現(xiàn)

輪詢機(jī)制需要調(diào)用網(wǎng)卡驅(qū)動(dòng)中的ioctl函數(shù),并讀取硬件設(shè)備PHY的連接狀態(tài),需要修改網(wǎng)卡驅(qū)動(dòng)ioctl函數(shù),具體細(xì)節(jié)為:

  • ioctl函數(shù)中,添加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: 讀取硬件設(shè)備PHY的連接狀態(tài) */
    /* 若連接:pifreq->ifr_flags |= IFF_RUNNING; */
    /* 未連接:pifreq->ifr_flags &= ~IFF_RUNNING; */
    break;
  1. 中斷機(jī)制實(shí)現(xiàn)

中斷機(jī)制需要調(diào)用網(wǎng)卡驅(qū)動(dòng)中的ioctl函數(shù),并清除PHY的中斷狀態(tài)寄存器,需要修改網(wǎng)卡驅(qū)動(dòng)ioctl函數(shù),具體細(xì)節(jié)為:

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

程序清單 4.7添加SET_PHY_MICR命令

#define SET_PHY_MICR           _IOWR('i', 258, struct ifreq)
case SET_PHY_MICR:
    /* TODO:設(shè)置 PHY 中斷控制寄存器,使能鏈接狀態(tài)改變中斷 */
    /* 將硬件 PHY 上的中斷引腳設(shè)置為輸出 */
    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 中斷狀態(tài) */
    break;

    注意:申請GPIO管腳號需要在開發(fā)板 BSP 適配文件中添加對應(yīng)的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. 使用說明

    模塊加載,開啟雙網(wǎng)卡冗余備份。

    模塊卸載,關(guān)閉雙網(wǎng)卡冗余備份。

    1. 功能關(guān)閉

    2. 功能開啟

  2. 測試方法

    主機(jī)ping開發(fā)板,手動(dòng)拔掉一根網(wǎng)線,觀察是否自動(dòng)切換到另一個(gè)網(wǎng)卡上去,網(wǎng)絡(luò)是否還是連通狀態(tài);等會(huì)拔掉另一根網(wǎng)線再次觀察網(wǎng)絡(luò)連通性。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI