摘要:通信工程師互聯(lián)網(wǎng)技術(shù)家鄉(xiāng)代理(HA)的設(shè)計(jì):HA從邏輯上主要包含兩個(gè)模塊,一個(gè)是inh模塊,用來初始化各種參數(shù)和變里:另一個(gè)是mainloop模塊,它是一個(gè)無限循環(huán),根據(jù)各種事件觸發(fā)進(jìn)行相應(yīng)操作。
在線輔導(dǎo) 面授招生 考試大綱 指定教材 報(bào)名時(shí)間
2.3.4 家鄉(xiāng)代理(HA)的設(shè)計(jì)
HA從邏輯上主要包含兩個(gè)模塊,一個(gè)是init模塊,用來初始化各種參數(shù)和變里:另一個(gè)是mainloop模塊,它是一個(gè)無限循環(huán),根據(jù)各種事件觸發(fā)進(jìn)行相應(yīng)操作。流程圖如圖2-9所示。
其中,init模塊包含以下子模塊,如圖2-10所示。
init模塊的各個(gè)子模塊是按照箭頭指示順序執(zhí)行的,具體功能如下。
ha_parse_command_line
解析輸入的命令行
load-config
從配置文件中讀取配罝參數(shù),利用讀取的數(shù)值對(duì)結(jié)構(gòu)體變最config進(jìn)行初始化。
set_ha_nai
根據(jù)全局結(jié)構(gòu)體變量config_ha_nai的值建立全局變攝ha_nai。該函數(shù)釋放之前分配的堆棧存儲(chǔ),為HANAI(NetworkAccessIdentifier,網(wǎng)絡(luò)接入標(biāo)識(shí)符)擴(kuò)展重新分配一-個(gè)新的空間。
chcck_kemel_support
檢測(cè)當(dāng)前操作系統(tǒng)是否支持IP1P、NETLINK,只要對(duì)其中的任意一個(gè)不支持,進(jìn)程退出,不再運(yùn)行。這兩個(gè)功能分別是ipip隧道和NETLINK系統(tǒng)調(diào)用,在編譯內(nèi)核的時(shí)候需要將它們編進(jìn)內(nèi)核,或者編譯成模塊,在運(yùn)行前加載。
binding_init
初始化綁定列表,進(jìn)行動(dòng)態(tài)分配綁定表格的內(nèi)存。
init_interfaces
對(duì)每個(gè)接口進(jìn)行初始化,為每個(gè)接口建立3個(gè)套接U,udp_sock是一個(gè)UDP套接口,使用地址族AFJNET,通過setsockopt函數(shù)設(shè)置SO_BINDTODEVICE、IP_RECVTTL、IP.PKTINFO,SO.PRIORITY(根據(jù)配置文件可選)、IP^RECVERR的屬性,綁定接口地址和434端口;udp_bc_sock是一個(gè)UDP套接口,使用地址族AFJNET,通過setsockopt函數(shù)設(shè)罝SCLBINDTODEVICE、IP_RECVTTL.IP_PKTINFO.SO.PRIORITY(根據(jù)配置文件可選)、IP_RECVERR的屬性,綁定接口的廣播地址和434端口;udp_bc_sock2是一個(gè)UDP套接口,綁定地址(255.255.255.255)和434端口:icmp_sock是一個(gè)UDP套接U,使用協(xié)議族PF_PACKET,通過setsockopt函數(shù)設(shè)SSO_ATTACH_FILTER,添加一個(gè)過濾器,只允許代理請(qǐng)求消息進(jìn)入該套接口。
tunnel_init
初始化隧道的配置信息,對(duì)隧道的散列表進(jìn)行初始化。
api_open_socket
創(chuàng)建兩個(gè)UNIX域套接口,用于處理dynha_tool發(fā)送過來的API命令,其中一個(gè)處理特權(quán)命令,另一個(gè)處理非特權(quán)命令。
signal
對(duì)控制信號(hào)SIGTERM、SIGINT、SIGHUP的操作進(jìn)行設(shè)定。
send_agent_advs
進(jìn)入無限循環(huán)之前,發(fā)送相應(yīng)的代理通告。
main.loop模塊包含以下子模塊,見圖2-11。
模塊里面的子模塊的運(yùn)行是事件觸發(fā)的,根據(jù)不同的事件調(diào)用相應(yīng)的模塊,這點(diǎn)與init模塊不同,
set_expr_timer
設(shè)置下一個(gè)到期的定時(shí)器。
check_bindings
檢查綁定是否到期,更新各種計(jì)時(shí)器,當(dāng)綁定失效的時(shí)候發(fā)送相應(yīng)信息。
handle_api
處理經(jīng)dynha_tool工具輸入的特權(quán)命令和非特權(quán)命令。
handle_reg_msg
處理使用UDP數(shù)據(jù)報(bào)承載的各種注冊(cè)消息。
handle一icmp
處理MN發(fā)送的代理請(qǐng)求消息,驗(yàn)證代理請(qǐng)求消息合法之后,回復(fù)代理通吿。
send_agent_advs
根據(jù)配置文件定義的方式,在指定接口周期性地發(fā)送代理通告或者在收到代理請(qǐng)求的時(shí)候才發(fā)送代理通吿。
tunnel-check-delayed
檢查隧道的生存時(shí)間是否到達(dá)。
check_queuedgratuitousarp
定時(shí)給移動(dòng)節(jié)點(diǎn)發(fā)送免費(fèi)ARP消息。
在HA所有函數(shù)中,HA主要的處理函數(shù)是handle_reg_msg()。
handle_reg_msg函數(shù)的流程圖如圖2-12所示。
返回目錄:通信工程師互聯(lián)網(wǎng)技術(shù)培訓(xùn)移動(dòng)IPv4技術(shù)
中級(jí)通信專業(yè)實(shí)務(wù)--互聯(lián)網(wǎng)技術(shù)教程匯總
中級(jí)通信專業(yè)實(shí)務(wù)傳輸與接入教程匯總
通信工程師備考資料免費(fèi)領(lǐng)取
去領(lǐng)取
共收錄117.93萬道題
已有25.02萬小伙伴參與做題