日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux路由表生成,路由表(FIB)内容的生成(一)

發布時間:2024/7/23 linux 107 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux路由表生成,路由表(FIB)内容的生成(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前面已經講到過路由表的初始化,路由表是一個比較復雜的數據結構,一下子并不好理解。下面我們通過模塊初始化時Linux的notify機制所觸發的網絡設備事件回調myfib_netdev_event,來逐步分析如何向FIB插入路由項,來進一步理解FIB。

每一個網絡設備接口在啟動時或者模塊my_inet被插入到內核空間時,都會有NETDEV_UP事件發生,通知內核,設備啟動。

myfib_netdev_event函數處理該事件,對該網絡設備接口上的每一個IP地址調用myfib_add_ifaddr函數,向路由表插入路由

項。

比如網絡設備接口eth0上有一個IP地址172.16.48.11,為從屬地址,其子網掩碼是255.255.255.0(注:這是一個B類地址,子網號和主機號都是8bit寬)。那么代表該IP地址的結構體struct in_ifaddr的內容如下所示:

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函數首先要確保在eth0接口上至少有一個跟其同類型的primary地址。否則出錯,因為在插入路由表時,該primary地址是有用的。然后,將該地址加入路由表,類型為RTN_LOCAL。

如果該網絡設備沒有開啟,我們到此結束,返回,否則繼續。

如果有廣播地址,并且不是受限的廣播地址(發向255.255.255.255廣播地址的數據包永遠不會被轉發,稱為受限的廣播),則將廣播地址加入路由表(172.16.48.255),類型為RTN_BROADCAST。

如果網絡號不為零(網絡號為零,用于BOOTTP協議),并且是primary地址,并且主機號不為零或者子網掩碼不為255.255.255.255。

則把172.16.48.0(去掉主機號)加入FIB,如果為環回地址,則類型為RTN_LOCAL,否則為RTN_UNICAST。

如果子網掩碼不為255.255.255.255,則再加入兩個類型為RTN_BROADCAST的地址172.16.48.255, 172.16.48.0。

這樣一來,對于網絡設備接口上的一個IP地址,最多會向路由表加入五個路由項,第一個是主機地址,第二個是廣播地址,后面三個暫時不是很清楚。

閱讀(2221) | 評論(0) | 轉發(1) |

總結

以上是生活随笔為你收集整理的linux路由表生成,路由表(FIB)内容的生成(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。