IP地址

IP地址

/include/linux/inetdevice.h,定义IPV4专用的网络设备相关的结构、宏等

/net/ipv4/devinet.c,支持IPV4特性的设备操作接口

数据组织

net_device结构中包含了驱动相关的所有信息,先按分类把同一类型的信息组织到其他结构中,然后嵌套到net_device结构中。例如,与ipv4相关的配置存放在in_device结构中,IP地址、子网掩码、广播地址等信息存放到in_ifaddr结构中等

相关函数

inetdev_init()     为通过参数指定的网络设备分配并绑定IP配置模块

inetdev_destroy()  通常在设备注销时被调用,释放指定的IP配置模块

inet_select_addr() 在通过输出网络设备向目的地址发送报文时,如果没有指定源地址,会调用该函数来根据                    给定设备、目的地址和作用范围,获取给定作用范围内的主IP地址作为源地址。

inet_confirm_addr()用来确认参数中指定的本地地址是否存在

inet_addr_onlink() 根据指定网络设备的IP配置块,检查两个给定的IP地址是否属于同一个子网

inet_ifa_match()   该函数用于判断IP地址是否处于同一网段内

static __inline__ int inet_ifa_match(u32 addr, struct in_ifaddr *ifa)
{
  return !((addr^ifa->ifa_address)&ifa->ifa_mask);
}

也就是!((IP1^IP2)&mask)。对于这个需求,最直观的作法是IP1&mask == IP2&mask。经过测试,前者要比后面那个直观的作法快10%以上。

那么kernel中的作法需要如何理解呢?其实我们完全可以从后面那个直观的作法得到kernel的作法。

IP1&mask == IP2&mask ---> !((IP1&mask)^(IP2&mask)) ---->!((IP1^IP2)&mask)

这下理解了吧?两个IP做异或,如果其网络部分如果相同,那么网络部分异或的值应该为0.而主机部分的值则通过mask屏蔽掉。最后取反,就得到了是否匹配的结果。

IP地址的设置

net-tools包中的命令ifconfig是通过ioctl接口对网络设备进行相应的操作和配置的。而linux提供的功能更强大的配置工具IPROUTE2包,则是通过linux特有的netlink接口对IP地址进行操作

netlink

inet_rtm_newaddr() 当通过netlink,操作类型为RTM_NEWADDR添加IP地址时,会调用此函数

inet_rtm_deladdr()  当通过netlink,操作类型为

RTM_DELADDR添加IP地址时,会调用此函数

inet_insert_ifa()  用来添加一个IP地址。通常在设置广播地址、点对点对端地址和地址掩码时,先调用                        inet_del_ifa()清除原有的信息,然后再调用inet_insert_ifa()进行设置

inet_del_ifa()     用来删除一个IP地址。

ioctl

应用程序对套接口有关接口层地址的ioctl操作,最终由devinet_ioctl()来处理。

inetaddr_chain通知链

内核模块可以通过register_inetaddr_notifier()将处理IP地址事件的函数注册到inetaddr_chain通知链中,之后可以通过unregister_inetaddr_notifier()注销,处理代码可以对一个或多个事件感兴趣。linux系统中有多个内核模块注册到inetaddr_chain通知链,如路由、SCTP、ATM。目前提供的IP地址事件如下:

NETDEV_UP      添加了IP地址

NETDEV_DOWN    删除了IP地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值