zoukankan      html  css  js  c++  java
  • 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地址

  • 相关阅读:
    MySQL数据库常见面试题
    抽象类与接口
    HashMap与Hashtable的区别
    IDEA破解
    重写equals方法
    MFC编程入门之十七(对话框:文件对话框)
    MFC编程入门之十六(对话框:消息对话框)
    MFC编程入门之十五(对话框:一般属性页对话框的创建及显示)
    MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)
    MFC编程入门之十二(对话框:非模态对话框的创建及显示)
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/6751868.html
Copyright © 2011-2022 走看看