当前位置: 首页 > news >正文

梅州市五华县建设银行网站制作网页可以用

梅州市五华县建设银行网站,制作网页可以用,自助建站 知乎,建设部网站 挂证路由表的创建inet_init() - ip_init() - ip_fib_init() - fib_net_init() - ip_fib_net_init()[net\ipv4\fib_frontend.c]首先为路由表分配空间#xff0c;这里的每个表项hlist_head实际都会链接一个单独的路由表#xff0c;FIB_TABLE_HASHSZ表示了分配多少个…路由表的创建inet_init() - ip_init() - ip_fib_init() - fib_net_init() - ip_fib_net_init()[net\ipv4\fib_frontend.c]首先为路由表分配空间这里的每个表项hlist_head实际都会链接一个单独的路由表FIB_TABLE_HASHSZ表示了分配多少个路由表一般情况下至少有两个–LOCAL和MAIN。注意这里仅仅是表头的空间分配还没有真正分配路由表空间。net-ipv4.fib_table_hash kzalloc(sizeof(struct hlist_head)*FIB_TABLE_HASHSZ, GFP_KERNEL);ip_fib_net_init() - fib4_rules_init()这里真正分配了路由表空间local_table fib_hash_table(RT_TABLE_LOCAL);main_table fib_hash_table(RT_TABLE_MAIN);然后将local和main表链入之前的fib_table_hash中hlist_add_head_rcu(local_table-tb_hlist,net-ipv4.fib_table_hash[TABLE_LOCAL_INDEX]);hlist_add_head_rcu(main_table-tb_hlist,net-ipv4.fib_table_hash[TABLE_MAIN_INDEX]);最终生成结构如图LOCAL表位于fib_table_hash[0]MAIN表位于fib_table_hash[1]两张表通过结构tb_hlist链入链表而tb_id则标识了功能255是LOCAL表254是MAIN表。关于这里的struct fn_hash它表示了不同子网掩码长度的hash表[即fn_zone]对于ipv4从0~32共33个。而fn_hash的实现则是fib_table的最后一个参数unsigned char tb_data[0]。注意到这里fn_zone还只是空指针我们还只完成了路由表初始化的一部分。在启动阶段还会调用inet_rtm_newroute() - fib_table_insert() - fn_new_zone() [fib_hash.c]来创建fn_zone结构前面已经讲过fn_zone一共有33个其中掩码长度为0[/0]表示为默认路由fn_zone可以理解为相同掩码的地址集合。首先为fn_zone分配空间struct fn_zone *fz kzalloc(sizeof(struct fn_zone), GFP_KERNEL);传入参数z代表掩码长度z 0的掩码用于默认路由一般只有一个所以fz_divisor只需设为1其它设为16这里要提到fz_divisor的作用fz-fz_hash并不是个单链表而是一个哈希表而哈希表的大小就是fz_divisor。if (z) {fz-fz_divisor 16;} else {fz-fz_divisor 1;}fz_hashmask实际是用于求余数的当算出hash值再hash fz_hashmask就得出了在哈希表的位置而fz_hash就是下一层的哈希表了前面已经提过路由表被多组分层了这里fz_hash就是根据fz_divisor大小来创建的fz_order就是子网掩码长度fz_mask就是子网掩码。fz-fz_hashmask (fz-fz_divisor - 1);fz-fz_hash fz_hash_alloc(fz-fz_divisor);fz-fz_order z;fz-fz_mask inet_make_mask(z);从子网长度大于新添加fz的fn_zone中挑选一个不为空的fn_zones[i]将新创建的fz设成fn_zones[i].next然后将fz根据掩码长度添加到fn_zones[]中相应位置fn_zone_list始终指向掩码长度最长的fn_zone。for (iz1; i32; i)if (table-fn_zones[i])break;if (i32) {fz-fz_next table-fn_zone_list;table-fn_zone_list fz;} else {fz-fz_next table-fn_zones[i]-fz_next;table-fn_zones[i]-fz_next fz;}table-fn_zones[z] fz;这里的fn_hash是数组与链表的结合体看下fn_hash定义struct fn_hash {struct fn_zone*fn_zones[33];struct fn_zone*fn_zone_list;};fn_hash包含33数组元素每个元素存放一定掩码长度的fn_zone其中fn_zone[i]存储掩码长度为i。而fn_zone通过内部属性fz_next又彼此串连起来形成单向链表其中fn_zone_list可以看作链表头而这里链表的组织顺序是倒序的即从掩码长到短。到这里fz_hash所分配的哈希表还没有插入内容这部分为fib_insert_node()完成。inet_rtm_newroute() - fib_table_insert() - fib_insert_node() [net\ipv4\fib_hash.c]这里f是fib_node可以理解为具有相同网络地址的路由项集合。根据fn_key(网络地址)和fz(掩码长度)来计算hash值决定将f插入fz_hash的哪个项。struct hlist_head *head fz-fz_hash[fn_hash(f-fn_key, fz)];hlist_add_head(f-fn_hash, head);}如何fib_node还不存在则会创建它这里的kmem_cache_zalloc()其实就是内存分配new_f kmem_cache_zalloc(fn_hash_kmem, GFP_KERNEL);if (new_f NULL)goto out;INIT_HLIST_NODE(new_f-fn_hash);INIT_LIST_HEAD(new_f-fn_alias);new_f-fn_key key;f new_f;路由表最后一层是fib_info具体的路由信息都存储在此它由fib_create_info()创建。首先为fib_info分配空间由于fib_info的最后一个属性是struct fib_nh fib_nh[0]因此大小是fib_info nhs * fib_nh这里的fib_nh代表了下一跳(next hop)的信息nhs代表了下一跳的数目一般情况下nhs1除非配置了支持多路径。fi kzalloc(sizeof(*fi)nhs*sizeof(struct fib_nh), GFP_KERNEL);设置fi的相关属性fi-fib_net hold_net(net);fi-fib_protocol cfg-fc_protocol;fi-fib_flags cfg-fc_flags;fi-fib_priority cfg-fc_priority;fi-fib_prefsrc cfg-fc_prefsrc;fi-fib_nhs nhs;使fi后面所有的nh-nh_parent指向fi设置后如图所示change_nexthops(fi) {nexthop_nh-nh_parent fi;} endfor_nexthops(fi)设置fib_nh的属性这里仅展示了单一路径的情况struct fib_nh *nh fi-fib_nh;nh-nh_oif cfg-fc_oif;nh-nh_gw cfg-fc_gw;nh-nh_flags cfg-fc_flags;然后再根据cfg-fc_scope值来设置nh的其余属性。如果scope是RT_SCOPE_HOST则设置下一跳scope为RT_SCOPE_NOWHEREif (cfg-fc_scope RT_SCOPE_HOST) {struct fib_nh *nh fi-fib_nh;nh-nh_scope RT_SCOPE_NOWHERE;nh-nh_dev dev_get_by_index(net, fi-fib_nh-nh_oif);}如果scope是RT_SCOPE_LINK或RT_SCOPE_UNIVERSE则设置下跳change_nexthops(fi) {if ((err fib_check_nh(cfg, fi, nexthop_nh)) ! 0)goto failure;} endfor_nexthops(fi)最后将fi链入链表中这里要注意的是所有的fib_info(只要创建了的)都会加入fib_info_hash中如果路由项使用了优先地址属性还会加入fib_info_laddrhash中。hlist_add_head(fi-fib_hash,fib_info_hash[fib_info_hashfn(fi)]);if (fi-fib_prefsrc) {struct hlist_head *head;head fib_info_laddrhash[fib_laddr_hashfn(fi-fib_prefsrc)];hlist_add_head(fi-fib_lhash, head);}
http://www.yutouwan.com/news/276691/

相关文章:

  • 无锡哪里建设网站色和尙做爰网站
  • 旅游交友的网站建设常州市城市建设局网站
  • 商丘网站公司wordpress 爱情模板
  • 潍坊哪里做网站好织梦网站wap
  • 成都网站建设公司 四川冠辰科技软件开发师
  • 建设网站有哪些目的是什么深圳电商公司排行榜
  • 网站建设要达到什么水平报ui设计班
  • 广州网站推广模板企业seo指的是
  • 成都私人网站建设wordpress陌陌主题
  • 手机版网站开发框架商城网站做推广有什么好处
  • 网站建设外包给别人要注意什么做网站智能工具
  • 中企动力是怎么建设网站的wordpress手机端
  • 长沙微信网站制作万网有网站建设吗
  • 做特卖网站徐州网站建设多少钱
  • 网站底部悬浮代码wordpress医院信息化建设会议安排网站
  • 购物网站后台模板xshuan主题wordpress
  • 怎么查询菠菜网站做没作弊php简单购物网站源码
  • 建设银行信用卡境外网站盗刷app是什么意思
  • 网站建设后的团队总结wordpress 国内视频网站
  • wordpress网站排行广州开发区交通投资集团有限公司
  • 做科技汽车的视频网站成都新津县建设网站
  • 工信部网站备案怎么查询seo的课谁讲的好
  • 网站后台管理员扫描组织建设小标题
  • 建网站免费空间乾县做网站
  • 可以免费做调查问卷的网站禁止域名访问网站
  • 网站建设报价单表格模板用自己电脑做服务器建网站
  • 重庆工业建设网站安徽网站开发项目
  • 网站开发硬件配置织梦cms网站更新
  • 网站目录 index.html大连建设工程信息网华宇凤凰城东侧市政管网配套工程
  • 手机网站开发合同西安云众网站建设