in_device结构和in_ifaddr结构
in_device为ip配置块,关联了二层设备,包含ip地址列表,组播配置,arp参数,接口配置等;
/* ip配置块 */
struct in_device {
/* 二层设备 */
struct net_device *dev;
/* 引用计数 */
atomic_t refcnt;
/* 是否正在销毁 */
int dead;
/* ip地址列表 */
struct in_ifaddr *ifa_list; /* IP ifaddr chain */ /* 组播相关 */
struct ip_mc_list __rcu *mc_list; /* IP multicast filter chain */
struct ip_mc_list __rcu * __rcu *mc_hash; int mc_count; /* Number of installed mcasts */
spinlock_t mc_tomb_lock;
struct ip_mc_list *mc_tomb;
unsigned long mr_v1_seen;
unsigned long mr_v2_seen;
unsigned long mr_maxdelay;
unsigned char mr_qrv;
unsigned char mr_gq_running;
unsigned char mr_ifc_count;
struct timer_list mr_gq_timer; /* general query timer */
struct timer_list mr_ifc_timer; /* interface change timer */ /* arp参数 */
struct neigh_parms *arp_parms;
/* 设备接口的一些配置 */
struct ipv4_devconf cnf;
struct rcu_head rcu_head;
};
in_ifaddr表示地址结构,其成员包含了地址,掩码,范围等信息,多个地址连接成链表,主地址在前,从地址在后;
/* 地址结构 */
struct in_ifaddr {
struct hlist_node hash;
/* 下一个地址节点 */
struct in_ifaddr *ifa_next;
/* 所属ip配置块 */
struct in_device *ifa_dev;
struct rcu_head rcu_head;
/*
ifa_local和ifa_address都用来存储ip地址
但在不同设备接口意义不同
(1) 在配置了广播的设备上,都表示本地ip地址
(2) 在点对点设备上,ifa_address存储的是对端ip地址,
而ifa_local存储的是本地ip地址
*/
__be32 ifa_local;
__be32 ifa_address;
/* 子网掩码 */
__be32 ifa_mask;
/* 广播地址 */
__be32 ifa_broadcast;
/*
地址范围,值越小表示的范围越大
RT_SCOPE_UNIVERSE-在任何地方使用
RT_SCOPE_SITE-本地封闭系统的内部路由
RT_SCOPE_LINK-局域网内使用,如广播地址
RT_SCOPE_HOST-主机内部通信,如回环地址
RT_SCOPE_NOWHERE-目的地址不存在 */
unsigned char ifa_scope;
/* 子网掩码长度 */
unsigned char ifa_prefixlen;
/*
地址属性标记
IFA_F_SECONDARY-从属ip地址
IFA_F_NODAD-禁止重复地址检测,ipv6使用
IFA_F_HOMEADDRESS-移动ipv6家乡地址,ipv6使用
IFA_F_DEPRECATED-此ip地址不鼓励使用,也不禁止
IFA_F_TENTATIVE-尝试阶段的ip地址,仍在进行地址检测工作
IFA_F_PERMANENT-永久性地址,无此标识,则会动态配置ip地址
*/
__u32 ifa_flags;
/* 地址标签,通常是网络设备名或者网络设备别名 */
char ifa_label[IFNAMSIZ]; /* In seconds, relative to tstamp. Expiry is at tstamp + HZ * lft. */
/* 生命周期 */
__u32 ifa_valid_lft;
__u32 ifa_preferred_lft;
/* 时间戳 */
unsigned long ifa_cstamp; /* created timestamp */
unsigned long ifa_tstamp; /* updated timestamp */
};
in_device结构和in_ifaddr结构的更多相关文章
- C语言中的循环结构与选择结构
1. 为什么使用循环? 重复执行某段代码 2. while(条件){ 循环体: } 当条件成立的时候就执行循环体,条件不成立,就退出循环,继续执行while后面的语句 3. for ( 初始表达式 : ...
- Chrome弹窗的简单应用(选择结构与循环结构)
★选择结构★ ★JS实现弹窗显示随机数 示例代码效果图 ★ 弹窗实现对随机数的进一步判断 示例代码效果图 ★综合应用 比较大小 ★ 判断成绩等级 ): : : : : alert(" ...
- Linux程序存储结构与进程结构堆和栈的区别【转】
转自:http://www.hongkevip.com/caozuoxitong/Unix_Linux/24581.html 红客VIP(http://www.hongkevip.com):Linux ...
- C语言中的结构体,结构体数组
C语言中的结构体是一个小难点,下面我们详细来讲一下:至于什么是结构体,结构体为什么会产生,我就不说了,原因很简单,但是要注意到是结构体也是连续存储的,但要注意的是结构体里面类型各异,所以必然会产生内存 ...
- 黑马程序员——JAVA基础之程序控制流结构之循环结构,循环嵌套
------- android培训.java培训.期待与您交流! ---------- 循环结构: 代表语句:while ,do while ,for while语句格式 : while(条件表达式) ...
- 黑马程序员——JAVA基础之程序控制流结构之判断结构,选择结构
------- android培训.java培训.期待与您交流! ---------- 程序控制流结构:顺序结构:判断结构:选择结构:循环结构. 判断结构:条件表达式无论写成什么样子,只看最终的结构是 ...
- C#学习笔记11:C#中的顺序结构、分支结构、循环结构
顺序结构: 代码从Main()函数开始运行,从上到下,一行一行的执行,不漏掉代码. Int a=6; int b=5; int c=a+b; Console.Write(c); 分支结构: 代码有可能 ...
- LabVIEW设计模式系列——case结构模拟事件结构
标准:1.所有按钮的机械动作必须都用释放时触发或者单击时触发,这是为了保证仅仅触发一次动作. 标准:1.使用简单的case结构模拟事件结构.
- 【转】linux tree命令以树形结构显示文件目录结构 ---- 不错
原文网址:http://jingyan.baidu.com/article/acf728fd19c7eff8e510a3eb.html 今天小编来给分享Linux 系统下一个非常有用的命令的使用:tr ...
随机推荐
- BZOJ1195 HNOI2006最短母串(状压dp)
按照子串出现的先后考虑.令f[i][j]为已经出现的字符串集合为i,最后一个出现的字符串为j时的最短串长,预处理一下任意两个串的最长重叠长度,转移显然.有点麻烦的是字典序,强行增加代码难度. 另一个比 ...
- Javascript基础之-强制类型转换(二)
思考下面这个问题: console.log(+"123"); // 123 console.log(-"123"); // -123 console.log(+ ...
- [bzoj] 2657 ZJOI2012 旅游 || bfs
原题 题意: 一个多边形,三角剖分,求一条对角线最多能经过多少三角形 题解: 因为不涉及坐标之类的,所以根几何肯定一点关系都没有. 我们会发现,对于有共边的两个三角形,可以被同一条线穿过,而这就相当于 ...
- 函数strcpy的实现
strcpy函数的百科中给出了各种情况的详细说明,这里,仅给出一些注意事项: 1.strcpy的函数原型是: /* dest(destination)为目标字符串,src(source)为原字符串*/ ...
- [PKUWC2018]随机算法
题意:https://loj.ac/problem/2540 给定一个图(n<=20),定义一个求最大独立集的随机化算法 产生一个排列,依次加入,能加入就加入 求得到最大独立集的概率 loj25 ...
- HashMap多线程并发的问题
---恢复内容开始--- 前言:大多数javaer都知道HashMap是线程不安全的,多线程环境下数据可能会发生错乱,一定要谨慎使用.这个结论是没错,可是HashMap的线程不安全远远不是数据脏读这么 ...
- Install JDK In Ubuntu
安装Linux软件包管理器rpm apt install rpm 查看已安装的软件,如JDK rpm -qa|grep jdk #查询所有 找jdk 卸载已安装的软件 rpm -e nodeps 包名 ...
- Magic FZU - 2280 无脑HASH暴力
Kim is a magician, he can use n kinds of magic, number from 1 to n. We use string Si to describe mag ...
- js ejs for语句的第二种遍历用法
var A = {a:1,b:2,c:3,d:"hello world"}; for(var k in A) { console.log(k,A[k]); var h = new ...
- PHP调试的时候出现了警告:
It is not safe to rely on the system解决方法,其实就是时区设置不正确造成的,本文提供了3种方法来解决这个问题. 实际上,从PHP 5.1.0开始当对使用date() ...