OpenvSwitch 代码笔记

摘要:
此处主要记录OpenvSwitch功能实现的调用过程:注册用户态接收包时回调函数:construct||open_dpif_backer/(dpif-netdev)/(dpif-net-link)/udpif_createudpif_set_threads||dpif_register_upcall_cbudpif_start_threads||dpif_netdev_register_upcal

此处主要记录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

免责声明:文章转载自《OpenvSwitch 代码笔记》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【Tempest】openstack自动化测试组件tempest及自动化测试工具noseOracle11 部署实践下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

dpdk+ovs安装和编译(一)

绑定前网卡驱动 [root@localhost ~]# ethtool -i enp5s0 driver: hinic version: firmware-version: expansion-rom-version: bus-info: 0000:05:00.0 supports-statistics: no supports-test: no...

ovs安装教程

原文链接:https://www.cnblogs.com/goldsunshine/p/10331606.html Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之三ovs-vsctl 命令使用 Ope...

ovn+ 控制节点 + 计算节点

启动ovn 控制节点: # start ovsdb-server /usr/share/openvswitch/scripts/ovs-ctl start --system-id=random # start ovn northd /usr/share/openvswitch/scripts/ovn-ctl start_northd export C...

Docker OpenvSwitch 应用部署

Docker OpenvSwitch 应用部署 安装部署OVS并建立GRE隧道 节点1:192.168.1.198 容器网段:172.17.1.0/24 节点2:192.168.1.199 容器网段:172.17.2.0/24 1、节点1节点2操作:修改docker 默认IP地址网段,主配置文件内修改配置参数。 vim /lib/systemd/sys...

虚拟化网络之OpenvSwitch

OpenvSwitch简称OVS,官网(http://openvswitch.org/) OVS是一个高质量、多层的虚拟交换软件,即虚拟交换机。 OpenvSwitch的见的相关组件:   ovs-vswitchd:实现switch的daemon功能,包括一个支持流交换的Linux内核模块,实现了交换功能   ovsdb-vswtich: openvswi...