linux路由表生成,路由表(FIB)内容的生成(一)
前面已經(jīng)講到過(guò)路由表的初始化,路由表是一個(gè)比較復(fù)雜的數(shù)據(jù)結(jié)構(gòu),一下子并不好理解。下面我們通過(guò)模塊初始化時(shí)Linux的notify機(jī)制所觸發(fā)的網(wǎng)絡(luò)設(shè)備事件回調(diào)myfib_netdev_event,來(lái)逐步分析如何向FIB插入路由項(xiàng),來(lái)進(jìn)一步理解FIB。
每一個(gè)網(wǎng)絡(luò)設(shè)備接口在啟動(dòng)時(shí)或者模塊my_inet被插入到內(nèi)核空間時(shí),都會(huì)有NETDEV_UP事件發(fā)生,通知內(nèi)核,設(shè)備啟動(dòng)。
myfib_netdev_event函數(shù)處理該事件,對(duì)該網(wǎng)絡(luò)設(shè)備接口上的每一個(gè)IP地址調(diào)用myfib_add_ifaddr函數(shù),向路由表插入路由
項(xiàng)。
比如網(wǎng)絡(luò)設(shè)備接口eth0上有一個(gè)IP地址172.16.48.11,為從屬地址,其子網(wǎng)掩碼是255.255.255.0(注:這是一個(gè)B類地址,子網(wǎng)號(hào)和主機(jī)號(hào)都是8bit寬)。那么代表該IP地址的結(jié)構(gòu)體struct in_ifaddr的內(nèi)容如下所示:
struct in_ifaddr
{
struct in_ifaddr??? *ifa_next;
struct in_device??? *ifa_dev;
struct rcu_head???? rcu_head;
u32???????? ifa_local = 172.16.48.11;
u32???????? ifa_address =172.16.48.11;
u32???????? ifa_mask = 255.255.255.0;
u32???????? ifa_broadcast = 172.16.48.255;
u32???????? ifa_anycast = 0;
unsigned char?????? ifa_scope = RT_SCOPE_UNIVERSE;
unsigned char?????? ifa_flags = IFA_F_SECONDARY;
unsigned char?????? ifa_prefixlen = 24;
char??????????? ifa_label[IFNAMSIZ] = "eth0";
};
myfib_add_ifaddr函數(shù)首先要確保在eth0接口上至少有一個(gè)跟其同類型的primary地址。否則出錯(cuò),因?yàn)樵诓迦肼酚杀頃r(shí),該primary地址是有用的。然后,將該地址加入路由表,類型為RTN_LOCAL。
如果該網(wǎng)絡(luò)設(shè)備沒(méi)有開(kāi)啟,我們到此結(jié)束,返回,否則繼續(xù)。
如果有廣播地址,并且不是受限的廣播地址(發(fā)向255.255.255.255廣播地址的數(shù)據(jù)包永遠(yuǎn)不會(huì)被轉(zhuǎn)發(fā),稱為受限的廣播),則將廣播地址加入路由表(172.16.48.255),類型為RTN_BROADCAST。
如果網(wǎng)絡(luò)號(hào)不為零(網(wǎng)絡(luò)號(hào)為零,用于BOOTTP協(xié)議),并且是primary地址,并且主機(jī)號(hào)不為零或者子網(wǎng)掩碼不為255.255.255.255。
則把172.16.48.0(去掉主機(jī)號(hào))加入FIB,如果為環(huán)回地址,則類型為RTN_LOCAL,否則為RTN_UNICAST。
如果子網(wǎng)掩碼不為255.255.255.255,則再加入兩個(gè)類型為RTN_BROADCAST的地址172.16.48.255, 172.16.48.0。
這樣一來(lái),對(duì)于網(wǎng)絡(luò)設(shè)備接口上的一個(gè)IP地址,最多會(huì)向路由表加入五個(gè)路由項(xiàng),第一個(gè)是主機(jī)地址,第二個(gè)是廣播地址,后面三個(gè)暫時(shí)不是很清楚。
閱讀(2221) | 評(píng)論(0) | 轉(zhuǎn)發(fā)(1) |
總結(jié)
以上是生活随笔為你收集整理的linux路由表生成,路由表(FIB)内容的生成(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 大数据职业理解_大数据带给我们职业三大根
- 下一篇: redirect java 配置_Jav