openvswitch group hash实现代码分析

代码分析

ovs版本是2.11.0,linux版本是linux-3.10.0-693.21.1.el7。

只拿ovs实现的group hash和dp_hash举例分析代码,通过一个点一个功能切入代码,漫无目的看代码是很难看懂的,必须带着一个疑问看代码,点多了全面开花,从点到面,慢慢就搞定代码了。

代码分析的场景就是一个虚拟机中curl一个vip。

ovs都说首包从datapath上送到vswitchd那就找找vswitchd从哪开始处理首包的。

main
 └─bridge_run
    └─bridge_reconfigure
       └─ofproto_create
          └─construct
             └─open_dpif_backer
                ├─udpif_create
                |   └─dpif_register_upcall_cb//kernel为NULL,用于DPDK
                ├─udpif_set_threads
                |  └─dpif_handlers_set
                └─udpif_start_threads
                   └─udpif_upcall_handler
                      ├─dpif_recv
                      |  └─dpif_netlink_recv
                      |     └─dpif_netlink_recv__
                      |        └─parse_odp_packet
                      └─recv_upcalls

vswitchd启动时创建了udpif_start_threads几个thread,这几个thread循环调用recv_upcalls处理上送的首包。

再找datapath首包是在什么地方上送的。

#linux kernel datapath
ovs_vport_receive
  ├─ovs_flow_key_extract
  |   └─key_extract
  └─ovs_dp_process_packet
      ├─if ovs_flow_tbl_lookup_stats
      |   └─ovs_dp_upcall
      |      └─queue_userspace_packet
      |          └─ovs_nla_put_key
      |              └─__ovs_nla_put_key
      └─else ovs_execute_actions
          ├─case OVS_ACTION_ATTR_OUTPUT
          └─do_output
              └─ovs_vport_send

首包来了先从skb上ovs_flow_key_extract生成flow key,再根据key查找 表ovs_flow_tbl_lookup_stats,查找不到ÿ

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值