6g下载网
当前位置: 主页 > 软件教程 > 云计算 >

Datapath流表查询源码分析

时间: 2017-01-17 14:43 来源: 本站整理

分享到:

今天小编整理一篇Datapath流表查询源码分析的文章和大家分享,希望能给大家提供帮助。

Datapath流表查询源码分析

数据结构关系图

Datapath流表查询源码分析

函数调用关系图

Datapath流表查询源码分析

① ovs_vport_receive() ,vport端口接收数据包。

②ovs_flow_key_extract(),提取数据包中的信息,封装key值。

③ ovs_dp_process_packet(),处理数据包。

④ ovs_flow_tbl_lookup_stats()查询并匹配流表。

⑤ ovs_execute_actions()执行处理动作。

Ovs中的流规则匹配是采用的TSS包分类算法,并在此算法的基础上进行了优化,匹配的步骤如下:

①提取数据包中的关键字段封装在struct sw_flow_key key结构中,对此key值计算hash值skb_hash;

②skb_hash传入ovs_flow_tbl_lookup_stats函数,在此函数内部将skb_hash和key->recirc_id作为jhash_1word的参数再次进行哈希,得到hash_key,利用此hash_key找到哈希桶,匹配哈希格子后得到mask_index。

③将此mask_index传入flow_lookup函数得到mask掩码值。

④将此mask掩码作为参数传入masked_flow_lookup函数。将masked_key和key值进行与运算得到masked_key。

⑤将此masked_key作为参数调用flow_hash再次计算hash得到哈希值。

⑥将第五步中得到的hash值作为参数传入find_bucket得到hash冲突链的头指针。

⑦遍历冲突链比较链表节点中的mask掩码值、hash值、masked_key,如果都匹配则匹配此节点,并得到流规则获取流规则中的action信息,调用ovs_execute_actions执行处理动作。

Datapath流表查询源码分析的文章和大家分享结束,感谢阅读!

(责任编辑:大卫)

分享到:

------分隔线----------------------------