ip_output-设置输出设备和协议,然后经过POST_ROUTING钩子点,最后调用ip_finish_output; ip_finish_output-对skb进行分片判断,需要分片,则分片后输出,不需要分片则知直接输出; ip_finish_output2-对skb的头部空间进行检查,看是否能够容纳下二层头部,若空间不足,则需要重新申请skb;然后,获取邻居子系统,并通过邻居子系...
staticinline intip_finish_output2(struct sk_buff*skb){/* variable declarations */if(rt->rt_type==RTN_MULTICAST){IP_UPD_PO_STATS(dev_net(dev),IPSTATS_MIB_OUTMCAST,skb->len);}elseif(rt->rt_type==RTN_BROADCAST)IP_UPD_PO_STATS(dev_net(dev),IPSTATS_MIB_OUTBCAST,skb->len);/* Be ...
ip_local_deliver_finish函数是 IP 层处理数据包的最后一步,我们接着分析ip_local_deliver_finish函数的实现: static inline int ip_local_deliver_finish(struct sk_buff *skb) { struct iphdr *iph = skb->nh.iph; // 获取数据包的IP头部 ... skb->h.raw = skb->nh.raw + iph->ihl * 4; //...
在这里,okfn是ip_finish_output。 5.ip_finish_output static int ip_finish_output(struct sk_buff *skb) { #if defined(CONFIG_NETFILTER) && defined(CONFIG_XFRM) /* Policy lookup after SNAT yielded a new policy */ if (skb_dst(skb)->xfrm != NULL) { IPCB(skb)->flags |= IPSKB_REROUTE...
914 [ 10.269541] [<ffffffff816de51b>] ? ip_rcv_finish+0x19b/0x350 915 [ 10.269541] [<ffffffff81711f00>] arp_rcv+0x150/0x180 916 [ 10.269541] [<ffffffff816de380>] ? ip_local_deliver_finish+0x1a0/0x1a0 917 [ 10.269541] [<ffffffff816851ea>] __netif_receive_skb_core+0x34a/...
skb_recv_datagram net/core/datagram.c sock_queue_rcv_skb include/net/sock.h udp_queue_rcv_skb net/ipv4/udp.c udp_rcv net/ipv4/udp.c ip_local_deliver_finish net/ipv4/ip_input.c ip_local_deliver net/ipv4/ip_input.c ip_recv net/ipv4/ip_input.c ...
2.5.2 设计skb_shared_info数据结构的目的 46 2.5.3 操作skb_shared_info的函数 46 2.6 本章总结 47 第3章 网络设备在内核中的抽象——struct net_device数据结构 48 3.1 协议栈与网络设备 49 3.1.1 协议栈软件与网络设备硬件之间的接口 49 3.1.2 设备独立接口文件dev.c 50 3.1.3 设备驱动...
大概路由查找的原理是:主机需要通过路由表来判断数据包的目的地在ip6_rcv_finish()里面,会调用ip6_route_input(skb),这个函数返回的是路由表中对应的fib6_node,这个节点的input函数,就会根据不同的目的地调用不同的函数来处理。 2)发送时候发生的路由:ip6_route_output() ...
printk(KERN_DEBUG"ip_finish_output2: No header cache and no neighbour!\n"); 3. kfree_skb(skb); 4. return-EINVAL; 5. } 在IPv4中,neighbour subsystem使用的是arp,所以一般情况下,dst->neighbour->outpu指向的是arp_generic_ops->neigh_resolve_output(这是需要解析L2硬件地址的情况,其他情况本文暂...
ip_local_deliver_finish 函数是 IP 层处理数据包的最后一步,我们接着分析 ip_local_deliver_finish 函数的实现: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 static inline int ip_local_deliver_finish(struct sk_buff *skb) { struct iphdr *iph = skb->nh.iph; // 获取数据包的IP头部 ......