(OK) 第五章 传输层(tcp)到网络层(ip)--基于Linux3.10 - dst_neigh_output() - neigh_resolve_output() 真正的离开了IP层,程序员大本营,技术文章内容聚合第一站。
第411行调用的是neigh_resolve_output,该函数是通过路由表查到的,不论硬件支不支持硬件头缓存,neigh_resolve_output都会被调用到,它来源如下: staticconststructneigh_ops arp_generic_ops = { .family = AF_INET, .solicit = arp_solicit, .error_report =arp_error_report, .output = neigh_resolve_output,...
nexthop = (__force u32) rt_nexthop(rt, ip_hdr(skb)->daddr);// get the dst ip address (u32) neigh = __ipv4_neigh_lookup_noref(dev, nexthop); //根据目的IP查找邻居项是否存在 //如果没有则创建邻居项,然后通过dst_neigh_output 发包 if(unlikely(!neigh)) neigh = __neigh_create(&a...
(OK) 第五章 传输层(tcp)到网络层(ip)--基于Linux3.10 - dst_neigh_output() - neigh_resolve_output() 真正的离开了IP层 http://blog.csdn.net/shichaog/article/details/44600453 根据数据的流向跟踪代码,由于数据发送是从tcp层到网络层再到网络到主机层,所以先来看tcp层向ip层发送数据的函数。 tcp的...
n = dst_neigh_lookup(skb_dst(skb), &ip_hdr(skb)->daddr); break; case AF_INET6: skb->protocol = htons(ETH_P_IPV6); n = dst_neigh_lookup(skb_dst(skb), &ipv6_hdr(skb)->daddr); break; case AF_PACKET: skb->protocol = 0; ...