ovs内核转发流程

虚拟机使用ovs场景下,流量从物理网卡转发到tap设备过程:

__netif_receive_skb
    __netif_receive_skb_core
        rx_handler()   (ovs场景下,通过netdev_rx_handler_register将rx_handler注册为netdev_frame_hook)
            netdev_frame_hook
                netdev_port_receive
                    ovs_vport_receive
                        ovs_dp_process_packet(查找flow规则是否匹配,不匹配upcall到用户态)
                            ovs_execute_actions
                                do_output
                                    ovs_vport_send
                                        vport->ops->send(ops在netdev_create->ovs_vport_alloc时指定为ovs_netdev_vport_ops)
                                            dev_queue_xmit
                                                __dev_xmit_skb(qdisc入队列)
                                                    net_tx_action(触发软中断)
                                                        qdisc_run
                                                            qdisc_restart
                                                                sch_direct_xmit    
                                                                    dev_hard_start_xmit
                                                                        xmit_one
                                                                            netdev_start_xmit
                                                                                __netdev_start_xmit
                                                                                    ndo_start_xmit(执行tap设备对应的函数)
                                                                                        tap_netdev_ops
                                                                                            wake_up_interruptible_poll(唤醒vhost线程)
                                                                                                handle_rx

你可能感兴趣的:(虚拟化)