開發(fā)板需要有雙網(wǎng)卡,并能進(jìn)行正常通信。
賀蘭網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)公司從2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。
若選擇中斷機(jī)制實(shí)現(xiàn),硬件PHY上需具有中斷引腳且能正常輸出。
雙網(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í)間更快,但需要硬件支持。
調(diào)用ifconfig命令查看當(dāng)前網(wǎng)卡信息,獲取需要進(jìn)行綁定的兩個(gè)網(wǎng)卡名,如圖 4.1所示。
圖 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
本次配置采用了主從策略,具體說明如下:
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ā))。
雙網(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é)為:
網(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, };
編寫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); }
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;
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;
輪詢機(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;
中斷機(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;
模塊加載,開啟雙網(wǎng)卡冗余備份。
模塊卸載,關(guān)閉雙網(wǎng)卡冗余備份。
主機(jī)ping開發(fā)板,手動(dòng)拔掉一根網(wǎng)線,觀察是否自動(dòng)切換到另一個(gè)網(wǎng)卡上去,網(wǎng)絡(luò)是否還是連通狀態(tài);等會(huì)拔掉另一根網(wǎng)線再次觀察網(wǎng)絡(luò)連通性。
分享標(biāo)題:SylixOS雙網(wǎng)卡冗余備份使用說明
文章URL:http://bm7419.com/article44/jcsshe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、電子商務(wù)、搜索引擎優(yōu)化、App開發(fā)、做網(wǎng)站、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)