inet_select_addr】的更多相关文章

当通过输出设备向目的地址发送报文时,如果没有源地址,则需要调用inet_select_addr来选择ip地址作为源地址: /* 选择ip地址 通过设备找到ip控制块,从ip控制块中遍历地址列表中的主地址, 优先选择满足范围,满足于目的地址网络部分相同的地址, 找不到则默认第一个满足范围的地址 找不到ip控制块,则走no_in_dev流程 */ __be32 inet_select_addr(const struct net_device *dev, __be32 dst, int scope)…
以下代码取自 kernel . [数据结构] 该结构被基于路由表的classifier使用,用于跟踪与一个标签(tag)相关联的路由流量的统计信息,该统计信息中包含字节数和报文数两类信息. 这个结构包含一个counters数组,每个处理器有256个元素.*大小为256是因为路由标签的取值范围为0到255.IPv4中是由ip_rt_init接 口为该向量分配空间,IPv6中没有为该向量分配空间.ip_rt_acct结构中的四个字段是在ip_rcv_finish接口中更新. struct ip_rt…
ARP 实现 现在我们介绍一下arp的实现,内核版本2.6.24. [数据结构] 协议栈通过ARP协议获取到的网络上邻居主机的IP地址与MAC地址的对应关 系都会保存在这个表中,以备下次与邻居通讯时使用, 同时,ARP模块自身也会提供一套相应的机制来更新和维护这个邻居表. struct neigh_table { struct neigh_table *next; //下一个邻居表 int family; //协议簇 int entry_size;//入口长度,也就是一个邻居结构的大小,初始化为…
IP地址 /include/linux/inetdevice.h,定义IPV4专用的网络设备相关的结构.宏等 /net/ipv4/devinet.c.支持IPV4特性的设备操作接口 数据组织 net_device结构中包括了驱动相关的全部信息.先按分类把同一类型的信息组织到其它结构中.然后嵌套到net_device结构中. 比如,与ipv4相关的配置存放在in_device结构中,IP地址.子网掩码.广播地址等信息存放到in_ifaddr结构中等 相关函数 inetdev_init()    …
概述 1.不论是入口还是出口流量,都是利用fib_lookup来查找路由表,fib_lookup是对每一个路由表所提供的查找函数的包裹函数,当不支持策略路由时,查找函数版本针对的是local表和main表 2.辅助函数: fib_validate_source:对从一个给定设备接收到的封包的源IP地址检查,检测企图的IP欺骗,而且要在开启非对称路由情况下,确保封包的源IP地址通过该封包接收接口是可达的.另外,该函数也返回用于反方向的首选源地址spec_dst,并初始化路由标签(routing t…
概述 arp_solicit用来发送ARP请求,首先会根据ARP_ANNOUNCE参数来选取源地址,然后判断是否达到内核发送次数上限,未达到则调用内核arp_send_dst函数发送,如果达到上限,则继续判断是否达到应用程序请求发送次数上限,未达到则通知应用程序发送ARP请求: 源码分析 /* 发送arp请求 ARP请求的目的邻居项 缓存在该邻居项中的待发送报文,来获取该skb的源IP地址 */ static void arp_solicit(struct neighbour *neigh, s…
转:http://blog.csdn.net/hsly_support/article/details/8797976 来吧,路由 路由是网络的核心,是linux网络协议栈的核心,我们找个入口进去看看 还记得在笔记5-IP层的处理1中ip_rcv_finish走到过一个岔口 ->ip_rcv_finish()      ->ip_route_input()  查找路由信息      ->if (iph->ihl > 5 && ip_rcv_options(sk…