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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

linux路由内核实现分析 四,linux路由内核实现分析(二)---FIB相关数据结构(4)

發(fā)布時間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux路由内核实现分析 四,linux路由内核实现分析(二)---FIB相关数据结构(4) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

fib_info結構

struct fib_info {

struct

hlist_node?fib_hash;

struct

hlist_node?fib_lhash;

int?fib_treeref;

atomic_t?fib_clntref;

int?fib_dead;

unsigned?fib_flags;

int?fib_protocol;

__be32?fib_prefsrc;

u32?fib_priority;

u32?fib_metrics[RTAX_MAX];

#define fib_mtu fib_metrics[RTAX_MTU-1]

#define fib_window fib_metrics[RTAX_WINDOW-1]

#define fib_rtt fib_metrics[RTAX_RTT-1]

#define fib_advmss fib_metrics[RTAX_ADVMSS-1]

int?fib_nhs;

#ifdef CONFIG_IP_ROUTE_MULTIPATH

int?fib_power;

#endif

struct

fib_nh?fib_nh[0];

#define

fib_dev?fib_nh[0].nh_dev

};

這個結構表示一個路由信息,一個路由信息可以被多個路由復用

例如:

struct fib_info{

.fib_protocol?=

RTPROT_KERNEL;// 表示這一條由內(nèi)核發(fā)起的消息

.fib_nhs?= 1;//表示fib_nh的數(shù)目

.fib_flags?= 0;

.fib_prefsrc?= 172.16.48.2; //接口上的primary地址

struct fib_nh{

.nh_oif?= indexof(eth0);

.nh_flags?= 0;

.nh_weight?= 1;

.nh_scope?=

RT_SCOPE_NOWHERE;

.nh_dev?= eth0;

}

}

fib_nh結構

struct fib_nh {

struct

net_device?*nh_dev;

struct

hlist_node?nh_hash;

struct

fib_info?*nh_parent;

unsigned?nh_flags;

unsigned

char?nh_scope;

#ifdef CONFIG_IP_ROUTE_MULTIPATH

int?nh_weight;

int?nh_power;

#endif

#ifdef CONFIG_NET_CLS_ROUTE

__u32?nh_tclassid;

#endif

int?nh_oif;

u32?nh_gw;

};

fib_nh結構存放著下一跳路由的地址(nh_gw)。一個路由(fib_alias)可能有多個fib_nh結構,它表示這個路由有多個下一跳地址,即它是多路徑(multipath)的。下一跳地址的選擇也有多種算法,這些算法都是基于nh_weight,

nh_power域的。nh_hash域則是用于將nh_hash鏈入HASH表的。

u32?nh_gw;//下以跳的路由地址

struct

net_device?*nh_dev; //下一跳的DEV指針

以上幾種數(shù)據(jù)結構之間的關系

可以這樣理解這些結構之間的關系:

1,fib_table中包含fn_hash結構指針

2,fn_hash中包含fn_zone的數(shù)組,按照目的地址長度進行分類,相同長度的地址共用一個fz_zone

3, fn_key相同的兩條路由(同一子網(wǎng)),共享一個路由節(jié)點(fn_node)

4,根據(jù)具體子網(wǎng)內(nèi)地址的不同,使用不同的fib_alias和fib_info

5,目的地址相同的情況下,也可以使用多條路由,不同的路由存放在不同的fib_nh里面

總結

以上是生活随笔為你收集整理的linux路由内核实现分析 四,linux路由内核实现分析(二)---FIB相关数据结构(4)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。