in_device和in_ifaddr数据结构

本文介绍了Linux内核中与IPv4相关的in_device和in_ifaddr数据结构,包括它们在net_device结构中的作用、相关操作函数如in_dev_get()和in_dev_put(),以及IP地址块的详细信息。in_device存储网络设备的IP配置,而in_ifaddr则用于记录主机的IP地址、子网掩码和广播地址等信息。
摘要由CSDN通过智能技术生成

net_device、in_device、in_ifaddr数据结构关系:

一、in_device数据结构:

IP配置块,网络设备层与IPv4相关的配置都存放在in_device结构中,应用层可以通过ip或者ifconfig工具来修改这些配置。
该结构实例的地址保存在net_device的in_ptr中,可以通过in_dev_get()访问它。访问结束后,必须使用in_dev_put()。
in_dev_get()会递增该实例的引用计数,in_dev_put()函数会递减该结构的引用计数,当引用计数为0时,才真正释放该实例。

struct in_device {
	struct net_device	*dev;/*指向所属的网络设备*/
	atomic_t		refcnt;/*引用计数*/
	int			dead;/*为1时标识所在的IP配置块将要被释放,不允许再访问其成员*/
	
	/*指向 in_ifaddr架构链表,in_ifaddr中存储了网络设备的IP地址,
	因为一个网络设备可以配置多个IP地址,因此使用链表来存储。*/
	struct in_ifaddr	*ifa_list;

	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 */

	/*指向neigh_parms结构实例,存储一些与ARP相关的参数*/
	struct neigh_parms	*arp_parms;
	
	/*ipv4_devconf相关信息,还不知道干啥的,以后再看*/
	struct ipv4_devconf	cnf;
	
	/*RCU机制使用,实现互斥,如果锁一般*/
	struct rcu_head		rcu_head;
};

二、in_ifaddr数据结构:

IP地址块,存储主机的IP地址,子网掩码,广播地址等信息。一个网络设备有多少个IP地址,就有多少个IP地址块。 

struct in_ifaddr {
	struct hlist_node	hash;
	struct in_ifaddr	*ifa_next;//in_ifaddr链表
	struct in_device	*if
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值