中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

SylixOS 雙網卡冗余備份使用說明

發布時間:2020-07-06 01:17:27 來源:網絡 閱讀:658 作者:諸葛一帆丶 欄目:建站服務器
  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開發板,手動拔掉一根網線,觀察是否自動切換到另一個網卡上去,網絡是否還是連通狀態;等會拔掉另一根網線再次觀察網絡連通性。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

维西| 固始县| 长治市| 中宁县| 永城市| 巢湖市| 常山县| 宝兴县| 德化县| 巧家县| 新蔡县| 墨玉县| 沛县| 宜川县| 山西省| 广宁县| 垫江县| 龙南县| 五华县| 革吉县| 大悟县| 思南县| 布尔津县| 苏尼特右旗| 新绛县| 灵璧县| 承德县| 徐州市| 原平市| 苍溪县| 灵寿县| 霞浦县| 睢宁县| 孝昌县| 临漳县| 湖南省| 富平县| 安仁县| 西宁市| 台前县| 徐水县|