12.1 路由核心数据结构 路由分为策略路由和多路路由,策略路由会参考用户设置的一些路由策略。路由可以使 用 tcp/ip 分析的下篇系列文章之一中的 route 和 ip route 工具设置。路由分为路由部分包括 三大块,路由缓存、路由表、路由信息查找。策略路由常用于安全和统计(经济)方面。多路 路由允许对于一个给定的目的地址分配多个下一跳入口。这常被用于主备(可靠性、鲁棒性) 路由。 路由表的构建途径: 通过用户命令[route(ioctl) 、ip route(netlink)]静态配置 通过路由协议动态配置,这些协议是 BGP(Border Gateway Protocol)、EGP(Exterior Gateway Protocol)以及 OSPF(Open Shortest Path First) 这一章的内容基于 route 方法,其它的配置路由的方法不在这章中,但是上面的方法区 别在于配置方法,而对应调用的路由核心函数以及操作的核心路由数据结构是一样的,这章 的主要内容就是关于这些和核心函数和核心数据结构的。 路由相关数据结构在 include/net/route.h struct ip_rt_acct { __u32 o_bytes; //发送数据的字节数 __u32 o_packets; __u32 i_bytes; __u32 i_packets; }; 这个结构体在 ip_rcv_finish中被使用到,由于网络数据包的统计,分别按照 byte和 packet 两种方法计数,ip_rcv_finish 在网络层接收中分析过,这里会再一次看到在网络层被跳过的 关于路由相关的代码,下面的代码片段就是上面统计信息被赋值的一个地方: static int ip_rcv_finish(struct sk_buff *skb) { #ifdef CONFIG_IP_ROUTE_CLASSID if (unlikely(skb_dst(skb)->tclassid)) { struct ip_rt_acct *st = this_cpu_ptr(ip_rt_acct); u32 idx = skb_dst(skb)->tclassid; st[idx&0xFF].o_packets++; st[idx&0xFF].o_bytes += skb->len; st[(idx>>16)&0xFF].i_packets++; st[(idx>>16)&0xFF].i_bytes += skb->len; } #endif } 由上面的使用可以知道,定义了基于路由的分类器就会使用该字段。该字段根据 idx 索 引可构成具有 256 个成员的数组。其初始化在 ip_rt_init 中完成。 rt_cache_stat 路由表缓存的统计信息,除了输入输出路由信息统计,还有垃圾回收信息。 fib_result 查找路由表会得到此结构。 struct fib_result { unsigned char prefixlen; unsigned char nh_sel; unsigned char type;
2022-12-21 16:40:48 4.07MB Linux TCP/IP 协议栈
1
《数据结构与算法》实验报告 特殊线性表算法实践-
2022-12-20 18:33:43 92KB 数据结构与算法 实验报告
1
《数据结构》-李春葆 实验报告-与队列的应用-求解迷宫路径问题
2022-12-20 18:33:40 89KB 数据结构与算法 实验报告
1
@风离蓝 可以关注他的博客https://blog.csdn.net/sinat_19440229 CanFestival协议是用于嵌入式Canopen通信开发的常用协议源码之一,使用过的 不错,架构和逻辑层次比较清晰,因此方便开发人员进行后期应用扩展和源代码设计;
2022-12-20 09:24:11 2.05MB CANOPEN CANFestival
1
Windows驱动程序开发比较复杂,我将带领大家一起领略内核模式下编程的奥妙。 您将真正掌握内核编程的原理与技术,将技术水平提升一个档次,学会核心技术。 您将掌握Windows驱动开发的基本技术;灵活应用IRP、IO堆、设备、派遣函数等; 您将掌握Windows驱动的分层技术,了解WDM驱动的基本原理 您将掌握Windows驱动开发中的各种回调例程:完成例程、取消例程、DPC例程、APC例程、等等。 具体内容包括但不限于: Windows驱动开发小白入门,Windows内核架构与驱动开发的基本概念,VS2015+VMware(win10x64)双机调试驱动,Win10x64中安装WDM驱动,驱动程序的基本结构(NT,WDM),Windows内存管理,Windows内核函数,驱动程序的派遣函数,驱动程序的同步处理,IRP的同步,定时器,驱动程序调用驱动程序,分层驱动程序
1
大学应聘:自己制作的试讲PPT,试讲时长有10分钟,试讲已通过,祝你好运~
2022-12-18 20:18:19 2.08MB 数据结构
1
本文实例为大家分享了C++利用循环和实现走迷宫的具体代码,供大家参考,具体内容如下 要求: 1、将地图的数组保存在文件中,从文件中读取行列数 2.、动态开辟空间保存地图 3.、运行结束后再地图上标出具体的走法 说明: 1、文件中第一行分别放置的是地图的行数和列数 2、其中1表示墙,即路不通,0表示路,即通路 3、程序运行结束后用2标记走过的路径 4、当走到“死胡同”时用3标记此路为死路 5、每到一个点,按照 左 上 右 下 的顺序去试探 6、没有处理入口就是”死胡同”的极端情况 地图文件截图: 代码示例:maze.h #ifndef _MAZE_H_ #define _MAZE_H_
2022-12-17 21:09:41 88KB 循环
1
学习Linux,vim等操作,及的学习,语言主要用的是Python
2022-12-17 16:02:40 31KB 学习
1
(中缀表达式转后缀表达式)原理及代码实现 1. 逆波兰表达式的介绍 2. 中缀转后缀的原因 3. 存储特点和原理 4. 实现中缀转后缀的思路 5. 代码实现 6. 注意事项 一,逆波兰表达式的介绍 前缀: 前缀表达式又称波兰式,前缀表达式的运算符位于操作数之前 举例说明: (3+4)×5-6 对应的前缀表达式就是 – × + 3 4 5 6 中缀:不再多说。 后缀: 逆波兰表达式,与前缀表达式相似,只是运算符位于操作数之后,例如: (3+4)×5-6 对应的后缀表达式就是 3 4 + 5 × 6 – 二,中缀转后缀 为什么要中缀转后缀呢?WHY?我中缀表达式看的多爽为啥要转换?但是呢计算机
2022-12-16 11:28:55 59KB 括号 数据 数据结构
1
求解n皇后问题 #include #include //共用全局变量数据初始化, int place[8]={0}; bool flag[8]={1,1,1,1,1,1,1,1};//已放置列的坐标 bool col1[15]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};//已放置皇后的上对角线 bool col2[15]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};//已放置皇后的下对角线 int number=0; //递归回溯函数 void general(int n); //打印函数 void print(); int main(){ general(0); printf("\n共有%d种摆放方式",number); return 0; } void general(int n){ int col; for(col=0;col<8;col++){ if(flag[col]&&col1[n-col+7]&&col2[n+col]){ place[n]=col;
2022-12-16 09:15:05 12KB 数据结构
1