int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_dev){ return NF_HOOK(NFPROTO_IPV4, NF_INET_PRE_ROUTING, skb, dev, NULL, ip_rcv_finish); } 这里NF_HOOK 是一个钩子函数,当执行完注册的钩子后就会执行到最后一个参数指向的函数 ip...
int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_dev) { ... return NF_HOOK(NFPROTO_IPV4, NF_INET_PRE_ROUTING, skb, dev, NULL, ip_rcv_finish); } 这里NF_HOOK是一个钩子函数,当执行完注册的钩子后就会执行到最后一个参数指向的函...
static int ip_rcv_finish(struct sk_buff *skb) { // 通过查路由表初始化数据包的目的地缓存项 if (skb_dst(skb) == NULL) { int err = ip_route_input(skb, iph->daddr, iph->saddr, iph->tos, skb->dev); ... } // 获取指向路由表的指针 rt = skb_rtable(skb); // 如果路由类型是...
IP_PRE_ROUTING节点处理完成后,数据包将交由*ip_rcv_finish*处理,该函数根据路由判决结果,决定数据包是交由本机上层应用处理,还是需要进行转发;如果是交由本机处理,则会交由*ip_local_deliver*走本地上交流程;如果需要转发,则交由*ip_forward*函数走转发流程; 在数据包上交本地的流程中,IP_LOCAL_INPUT节点用于...
2)ip_rcv_finish() 随后将分组发送到ip_rcv_finish()函数处理。根据skb结构的目的或路由信息发送到不同的处理函数。 ip_rcv_finish()函数的具体处理过程如下: 从skb->nh ( IP 头,由 netif_receive_skb 初始化)结构得到 IP 地址 struct net_device *dev = skb->dev; ...
内核实现了网络层的IP协议和传输层的TCP、UDP协议,这些协议对应的实现函数分别是ip_rcv()、tcp_v4_rcv()和udp_rcv()。 Linux内核中通过fs_initcall(文件系统初始化,类似subsys_initcall,也是初始化模块的入口)来调用inet_init进行网络协议栈的注册。inet_init将上述的协议实现函数注册到inet_protos(注册udp_rcv函数...
ip_finish_output2 填充二层头(涉及到ARP查询目的MAC) neigh_resolve_output ARP相关处理1.1 PRE_ROUTING部分函数介绍 1.1.1 ip_rcv() 此函数是接收报文时IP层的入口函数,very very 重要。它的主要功能如下: 是否发给本设备的报文(目的MAC是本设备) IP报文头部格式检查(其中包括校验和) 进入NF_IP_PRE_ROUTING...
int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_dev){ ... return NF_HOOK(NFPROTO_IPV4, NF_INET_PRE_ROUTING, skb, dev, NULL, ip_rcv_finish); } 1. 2. 3. 4. 5. ...
ip_rcv_finish ip_local_deliver ip_local_deliver_finish udp_rcv udp_queue_rcv_skb 引言 对于内核网络栈的分析我在大二听了李勇大神来小组的讲座以后就想干了,但像很多主题的文章一样,始终没有勇气,也没有时间动手,我终究还是把这个话题从大二延到大三,从大三延到大四了。冥冥之中某种东西好像早已是安排好...
ip_rcv_finish ip_local_deliver ip_local_deliver_finish udp_rcv udp_queue_rcv_skb 引言 对于内核网络栈的分析我在大二听了李勇大神来小组的讲座以后就想干了,但像很多主题的文章一样,始终没有勇气,也没有时间动手,我终究还是把这个话题从大二延到大三,从大三延到大四了。冥冥之中某种东西好像早已是安排好...