这里主要分析在网络功能简单配置,且报文正常的情况下,报文的处理过程。
网卡接收到IP报文,经过一些执行路径后,最终进入ip_rcv做处理。
ip_rcv在网络功能简单配置,且报文正常的情况下,就是简单的通过ip_rcv_finish完成后续的全部处理工作。
ip_rcv_finish通过查找路由,为此报文找到一个dst_entry,然后即由skb_dst(skb)->input(skb);完成后续全部工作。
dst_entry来自查找到的路由表目。既然后续的处理,都由此dst_entry完成。那么dst_entry会将报文带到什么处理流程上去呢?
只有找到dst_entry初始化的代码,才能看出线索了。
先来看看普通的路由转发对应的dst_entry是怎么初始化的,代码在net/ipv4/route.c中的__mkroute_input中。