mirror of
https://github.com/openvswitch/ovs
synced 2025-08-30 22:05:19 +00:00
dpif: Fix flow put debug message match content.
The odp_flow_format() function applies a wildcard mask when a mask for a given key was not present. However, in the context of installing flows in the datapath, the absence of a mask actually indicates that the key should be ignored, meaning it should not be masked at all. To address this inconsistency, odp_flow_format() now includes an option to skip formatting keys that are missing a mask. This was found during a debug session of the ‘datapath - ping between two ports on cvlan’ test case. The log message was showing the following: put[create] ufid:XX recirc_id(0),dp_hash(0/0),skb_priority(0/0),in_port(3), skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0), eth(src=12:f6:8b:52:f9:75,dst=6e:48:c8:77:d3:8c),eth_type(0x88a8), vlan(vid=4094,pcp=0/0x0),encap(eth_type(0x8100), vlan(vid=100/0x0,pcp=0/0x0),encap(eth_type(0x0800), ipv4(src=10.2.2.2,dst=10.2.2.1,proto=1,tos=0,ttl=64,frag=no), icmp(type=0,code=0))), actions:2 Where it should have shown the below: put[create] ufid:XX recirc_id(0),dp_hash(0/0),skb_priority(0/0),in_port(3), skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0), eth(src=12:f6:8b:52:f9:75,dst=6e:48:c8:77:d3:8c),eth_type(0x88a8), vlan(vid=4094,pcp=0/0x0),encap(eth_type(0x8100)), actions:2 Acked-by: Simon Horman <horms@ovn.org> Signed-off-by: Eelco Chaudron <echaudro@redhat.com>
This commit is contained in:
@@ -3039,7 +3039,7 @@ log_netdev_flow_change(const struct dp_netdev_flow *flow,
|
||||
ds_put_cstr(&ds, " ");
|
||||
odp_flow_format(key_buf.data, key_buf.size,
|
||||
mask_buf.data, mask_buf.size,
|
||||
NULL, &ds, false);
|
||||
NULL, &ds, false, true);
|
||||
if (old_actions) {
|
||||
ds_put_cstr(&ds, ", old_actions:");
|
||||
format_odp_actions(&ds, old_actions->actions, old_actions->size,
|
||||
@@ -3859,7 +3859,7 @@ dpif_netdev_mask_from_nlattrs(const struct nlattr *key, uint32_t key_len,
|
||||
|
||||
ds_init(&s);
|
||||
odp_flow_format(key, key_len, mask_key, mask_key_len, NULL, &s,
|
||||
true);
|
||||
true, true);
|
||||
VLOG_ERR("internal error parsing flow mask %s (%s)",
|
||||
ds_cstr(&s), odp_key_fitness_to_string(fitness));
|
||||
ds_destroy(&s);
|
||||
@@ -3888,7 +3888,7 @@ dpif_netdev_flow_from_nlattrs(const struct nlattr *key, uint32_t key_len,
|
||||
struct ds s;
|
||||
|
||||
ds_init(&s);
|
||||
odp_flow_format(key, key_len, NULL, 0, NULL, &s, true);
|
||||
odp_flow_format(key, key_len, NULL, 0, NULL, &s, true, false);
|
||||
VLOG_ERR("internal error parsing flow key %s", ds_cstr(&s));
|
||||
ds_destroy(&s);
|
||||
}
|
||||
|
Reference in New Issue
Block a user