此处主要记录OpenvSwitch 功能实现的调用过程:
注册用户态接收包时回调函数: construct | | open_dpif_backer / (dpif-netdev) / (dpif-net-link) / udpif_create udpif_set_threads | | dpif_register_upcall_cb udpif_start_threads | | dpif_netdev_register_upcall_cb ovs_thread_create | udpif_upcall_handler (* 接收到内核态的请求) | recv_upcalls / (2) / (1) / upcall_receive dpif_recv | | flow_extract dpif_netlink_recv | process_upcall | upcall_xlate | xlate_actions
处理controller发送的packetout数据包: ofconn_run | handle_openflow | handle_packet_out / (2) / (1) / ofproto_packet_out_finish ofproto_packet_out_start | | packet_execute packet_xlate | | dpif_execute xlate_actions | | dpif_operate rule_dpif_lookup_from_table (dpif-netdev) / (dpif-netlink) | / rule_dpif_lookup_in_table dpif_netdev_operate dpif_netlink_operate / | | (2) / (1) dpif_netdev_execute dpif_netlink_encode_execute / | | do_xlate_actions classifier_lookup dp_netdev_execute_actions nl_msg_put_genlmsghdr | | | xlate_output_action find_match_wc odp_execute_actions | | compose_output_action dp_execute_cb | | nl_msg_put_odp_port netdev_send
内核态Datapath处理packet流程: netdev_frame_hook | netdev_port_receive | ovs_vport_receive | ovs_dp_process_packet / (Normal Match)/ (Non-normal Match) / ovs_execute_actions ovs_dp_upcall | queue_userspace_packet | genlmsg_unicast
用户态Datapath处理packet流程: pmd_thread_main dpif_netdev_run / / dp_netdev_process_rxq_port | dp_netdev_input | fast_path_processing | handle_packet_upcall / (2) / (1) / dp_netdev_execute_actions dp_netdev_upcall | | odp_execute_actions upcall_cb(调用注册的回调函数) | dp_execute_cb | netdev_send