(&tunnel->gro_cells, skb); return 0; drop: if (tun_dst) dst_release((struct dst_entry *)tun_dst); kfree_skb(skb); return 0; } EXPORT_SYMBOL_GPL(ip_tunnel_rcv); int ip_tunnel_encap_add_ops(const struct ip_tunnel_encap_ops *ops, unsigned int num) { if (num >= MAX_IP...
static const struct net_protocol tunnelmpls4_protocol = {.handler= tunnelmpls4_rcv,.err_handler= tunnelmpls4_err,.no_policy=1,.netns_ok=1, }; And deliver the IPIP packets to a handler list by staticinttunnelmpls4_rcv(structsk_buff *skb){structxfrm_tunnel *handler;if(!pskb_may_pull...
entry = jtcp_rcv_established, }; 可以看出来,tcpprobe其实是用的jprobe方式实现的,监听tcp_rcv_established函数(这也是为什么tcpprobe不会抓取三次握手时候的包信息的原因)。 对kprobe和jprobe感兴趣的话,可以看看最后给出的几个参考资料。 最后说说jtcp_rcv_established()函数,由于它是用于监听tcp_rcv_establish...
See comment https://elixir.bootlin.com/linux/v6.11/source/net/ipv4/inet_hashtables.c#L1164 Member blanquicet Oct 14, 2024 • edited We could retrieve the source port in exit_inet_stream_connect as we do in handle_tcp_rcv_state_process. Member Author burak-ok Oct 14, 2024 I don...