环境 : 两台host, host1 安装docker+ovs, host2 安装kvm+ovs。具体安装过程略。
host1(docker 容器) 收包流程:
首先,ens38口收包
__netif_receive_skb_core()->ip_rcv()->ip_rcv_finish()->dst_input->ip_local_deliver->ip_local_deliver_finish->udp_rcv->__udp4_lib_rcv->udp_queue_rcv_skb->encap_rcv->vxlan_rcv->gro_cells_receive -> net_rx_action->process_backlog->__netif_receive_skb
走到这里,此时skb->dev 已经换成vxlan0.
然后,vxlan0 上收到包
__netif_receive_skb_core->netdev_frame_hook(skb->dev->rx_handler)->netdev_port_receive->ovs_vport_receive->ovs_dp_process_packet->ovs_execute_actions->do_execute_actions->do_output->ovs_vport_send->(vport->ops->send(skb))(这时候发送到dev为veth378235617口)
最后,veth378235617 收包流程
veth_xmit->dev_forward_skb->netif_rx_internal->enqueue_to_backlog->触发软中断->net_rx_action->process_backlog->__netif_receive_skb->__netif_receive_skb_core
进入container容器。