Linux内核VLAN学习笔记(4)

对于L5来说,recvfrom系统调用sys_recvfrom在/net/socket.c中,通过prepare_to_wait_exclusive等待skb的到来,从而唤醒它。

接收流程图

Linux内核VLAN学习笔记

协议栈模块其实是块大头,研究不深入,就简要概括了。

----------------------------------纠结的分割线--------------------------------

六、进一步(路由模块):

还有一个很重要的模块就是内核路由子系统,它应该是工作在L3层。发送报文时会在L3层打好IP头前,路由到具体的网络设备,然后才进入L2填充以太网头。

路由的工作是通过函数ip_route_input()(/net/ipv4/route.c)实现的,对于进来的包可能的路由有这些:

属于本地的数据(即是需要传递给TCP,UDP,IGMP这些上层协议的) ;

需要要转发的数据包(网关或者NAT服务器之类的);

不可能路由的数据包(地址信息有误);

当路由发现是本地数据时,rth->u.dst.input = ip_local_deliver,返回后就可以在skb->dst->input(skb)中进入ip_local_deliver,找到对应的interface设备。如我们的eht0.y vlan虚拟设备,进入vlan处理流程。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwpgxx.html