版本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__。