在Open VSwitch中新增匹配域

版本2.3.2

include/openflow/openflow-1.2.h中enum oxm12_ofb_match_fields修改2处:


lib/flow.h中struct flow:

lib/meta-flow.h的enum OVS_PACKED_ENUM mf_field_id:

lib/meta-flow.c中的struct mf_field:注意这里的倒数2、3、4、5字段非常重要,倒数23代表这个字段适用的OF版本,倒数45关联着OXM的定义:

lib/match.h定义函数:

lib/match.c实现函数:

修改lib/meta-flow.c中的mf_is_all_wild,mf_is_value_valid:

还有mf_set_flow_value:

mf_get_value:

还有mf_set_value,mf_set_wild,mf_set。

注意:无论是case还是上面的MFF定义,都要写在MFF_N_IDS之前,否则无法识别,因为代码中认为MFF_N_IDS为结构体最后的标志。

修改datapath/flow.h的sw_flow_key结构体:

修改datapath/flow.c的key_extract函数:

修改datapath/linux/datapath.c中的key_attr_size:

已注释

修改include/linux/openvswitch.h中的ovs_key_attr:

新增结构体:

修改datapath/linux/flow_netlink.c的ovs_nla_put_flow函数:

lib/flow.c中的miniflow_extract

lib/odp-util.c中odp_flow_key_from_flow__:

datapath/flow_netlink.c中ovs_key_lens:

ovs_key_from_nlattrs:

match_validate:

打印相关lib/match.c中match_format:

lib/odp-util.c中的odp_flow_key_attr_len:

ovs_key_attr_to_string:

format_odp_key_attr:

注释掉了case后的部分

lib/nx-match.c中的nx_put_raw:

lib\odp-util.c中parse_odp_key_mask_attr函数:

未改动

FLOW_WC_SEQ序列号,涉及多个函数,但并非所有都要改,只是根据自己需要即可,不相关的函数中只需要修改序列号的判断即可,其他不用改:

lib/flow.h

lib/flow.c中的flow_get_metadata,flow_push_mpls,lib/match.c的match_format,lib/nx-match.c的nx_put_raw,lib/ofp-util.c中的ofputil_wildcard_from_ofpfw10,ofproto/ofproto-dpif-xlate.c的compose_output_action__。

猜你喜欢

转载自blog.csdn.net/u011412226/article/details/81123224