mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 14:25:26 +00:00
dpif-netdev: Print installed flows in dpif format.
When debug logging is enabled, dpif-netdev can print each flow as it is installed, which it currently does using OpenFlow match formatting. Compared to ODP formatting, there generally isn't too much difference since the fields are largely the same but it is inconsistent with other logging in dpif-netdev as well as the analogous functions that deal with the kernel. However, in some cases there is a difference between the two formats, such as in the cases of input port or tunnel metadata. For input port, datapath format helped detect that the generated masks were incorrect. As for tunnels, at the moment, it's possible to convert between the two formats on demand as we have a global metadata table. In the future, though this won't be possible as the metadata table becomes per-bridge which the datapath won't have access to. Signed-off-by: Jesse Gross <jesse@kernel.org> Acked-by: Daniele Di Proietto <diproiettod@vmware.com>
This commit is contained in:
@@ -2120,22 +2120,34 @@ dp_netdev_flow_add(struct dp_netdev_pmd_thread *pmd,
|
||||
dp_netdev_flow_hash(&flow->ufid));
|
||||
|
||||
if (OVS_UNLIKELY(VLOG_IS_DBG_ENABLED())) {
|
||||
struct match match;
|
||||
struct ds ds = DS_EMPTY_INITIALIZER;
|
||||
struct ofpbuf key_buf, mask_buf;
|
||||
struct odp_flow_key_parms odp_parms = {
|
||||
.flow = &match->flow,
|
||||
.mask = &match->wc.masks,
|
||||
.support = dp_netdev_support,
|
||||
};
|
||||
|
||||
match.tun_md.valid = false;
|
||||
match.flow = flow->flow;
|
||||
miniflow_expand(&flow->cr.mask->mf, &match.wc.masks);
|
||||
ofpbuf_init(&key_buf, 0);
|
||||
ofpbuf_init(&mask_buf, 0);
|
||||
|
||||
odp_flow_key_from_flow(&odp_parms, &key_buf);
|
||||
odp_parms.key_buf = &key_buf;
|
||||
odp_flow_key_from_mask(&odp_parms, &mask_buf);
|
||||
|
||||
ds_put_cstr(&ds, "flow_add: ");
|
||||
odp_format_ufid(ufid, &ds);
|
||||
ds_put_cstr(&ds, " ");
|
||||
match_format(&match, &ds, OFP_DEFAULT_PRIORITY);
|
||||
odp_flow_format(key_buf.data, key_buf.size,
|
||||
mask_buf.data, mask_buf.size,
|
||||
NULL, &ds, false);
|
||||
ds_put_cstr(&ds, ", actions:");
|
||||
format_odp_actions(&ds, actions, actions_len);
|
||||
|
||||
VLOG_DBG_RL(&upcall_rl, "%s", ds_cstr(&ds));
|
||||
|
||||
ofpbuf_uninit(&key_buf);
|
||||
ofpbuf_uninit(&mask_buf);
|
||||
ds_destroy(&ds);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user