路由表項中的proto欄位

2021-09-26 04:03:42 字數 2182 閱讀 9243

如下的ip命令顯示的兩條路由,proto的值分別為21和kernel。

/ # ip -d route

unicast default via 192.168.1.1 dev ens33 proto 21 scope global

unicast 192.168.1.0/24 dev ens33 proto kernel scope link src 192.168.1.118

/ #

proto欄位的定義如下(部分):

#define rtprot_unspec   0

#define rtprot_redirect 1 /* route installed by icmp redirects; not used by current ipv4 */

#define rtprot_kernel 2 /* route installed by kernel */

#define rtprot_boot 3 /* route installed during boot */

#define rtprot_static 4 /* route installed by administrator */

proto欄位的定義在核心中並沒有實質的意義,只是乙個顯示字段。rtprot_unspec表示未指定;rtprot_redirect已經不再使用;核心自身新增的路由使用rtprot_kernel;rtprot_boot為在啟動過程中安裝的路由;

例如對於rtprot_kernel型別,核心函式fib_magic新增的路由的protocol固定為rtprot_kernel。在為核心介面新增ip位址時,觸發此函式,用於新增相關的直連路由。

static void fib_magic(int cmd, int type, __be32 dst, int dst_len, struct in_ifaddr *ifa, u32 rt_priority)

對於rtprot_boot型別,一方面通過ioctl介面(如route命令)新增的路由proto欄位會設定為rtprot_boot;此外,如果使能了ip位址自動配置功能,核心可在啟動過程中通過dhcp或者rarp等獲取ip位址資訊,此時,在新增與之相關的路由時,路由項也會使用rtprot_boot型別。

數值大於rtprot_static(4)的proto值,不由核心解釋。核心只是在路由下發時儲存此值,顯示時回顯此值。目前定義的值如下:

#define rtprot_ra 9 /* rdisc/nd router advertisements */

#define rtprot_mrt 10 /* merit mrt */

#define rtprot_zebra 11 /* zebra */

#define rtprot_bird 12 /* bird */

#define rtprot_dnrouted 13 /* decnet routing daemon */

#define rtprot_xorp 14 /* xorp */

#define rtprot_ntk 15 /* netsukuku */

#define rtprot_dhcp 16 /* dhcp client */

#define rtprot_mrouted 17 /* multicast daemon */

#define rtprot_babel 42 /* babel daemon */

#define rtprot_bgp 186 /* bgp routes */

#define rtprot_isis 187 /* isis routes */

#define rtprot_ospf 188 /* ospf routes */

#define rtprot_rip 189 /* rip routes */

#define rtprot_eigrp 192 /* eigrp routes */

比如quagga路由程式下發的動態路由(rip/ospf/bgp/isis)同一使用rtprot_zebra型別proto值。這也說明這個欄位的使用比較混亂。

核心版本 5.0

路由表的建立

1.路由表 由很多路由條目組成,每個條目都指明去往某個網路的資料報應該由哪個介面傳送,其中最後一條是預設路由條目。2.路由條目 路由表中一行,每個條目主要由目的網路位址 子網掩碼 下一跳位址 傳送介面四部分組成,如果要傳送的資料報的目的網路位址匹配路由表中的某一行,就按規定的介面傳送到下一跳位址。3...

WindowsXP中修改本地路由表

很多的vpn使用者會遇到這樣的情況 使用vpn玩國外遊戲的同時,需要使用qq或其他的國內網路 若是通過vpn訪問國內網路,不但延時高連線慢,還會增加vpn伺服器的負擔。這時候我們就需要修改本地路由表,讓訪問國內網路的應用程式不走vpn,改走本地網路。示例如下 要訪問的國內網路 219.0.0.0 本...

flake的路由表述方式

在flask中定義url路由規則有三種方法 1 使用flask.flask.route 裝飾器 2 使用flask.flask.add url rule函式 3 直接訪問底層的werkzeug路由系統 flask.flask.url map 下面就第1,2兩種方法進行講解 flask.flask.r...