Signed-off-by: Saurabh Shah <ssaur...@vmware.com> --- lib/dpif-netdev.c | 17 +---------------- lib/odp-util.c | 24 ++++++++++++++++++++++++ lib/odp-util.h | 2 ++ 3 files changed, 27 insertions(+), 16 deletions(-)
diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index fce2650..01ebcec 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -1185,22 +1185,7 @@ dpif_netdev_flow_from_nlattrs(const struct nlattr *key, uint32_t key_len, { odp_port_t in_port; - if (odp_flow_key_to_flow(key, key_len, flow)) { - /* This should not happen: it indicates that odp_flow_key_from_flow() - * and odp_flow_key_to_flow() disagree on the acceptable form of a - * flow. Log the problem as an error, with enough details to enable - * debugging. */ - static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5); - - if (!VLOG_DROP_ERR(&rl)) { - struct ds s; - - ds_init(&s); - odp_flow_format(key, key_len, NULL, 0, NULL, &s, true); - VLOG_ERR("internal error parsing flow key %s", ds_cstr(&s)); - ds_destroy(&s); - } - + if (odp_flow_key_to_flow_verbose(key, key_len, flow)) { return EINVAL; } diff --git a/lib/odp-util.c b/lib/odp-util.c index 162d85a..1e288ec 100644 --- a/lib/odp-util.c +++ b/lib/odp-util.c @@ -3466,6 +3466,30 @@ odp_flow_key_to_flow(const struct nlattr *key, size_t key_len, return odp_flow_key_to_flow__(key, key_len, flow, flow); } +enum odp_key_fitness +odp_flow_key_to_flow_verbose(const struct nlattr *key, size_t key_len, + struct flow *flow) +{ + enum odp_key_fitness error = odp_flow_key_to_flow(key, key_len, flow); + if (error) { + /* This should not happen: it indicates that odp_flow_key_from_flow() + * and odp_flow_key_to_flow() disagree on the acceptable form of a + * flow. Log the problem as an error, with enough details to enable + * debugging. */ + static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5); + + if (!VLOG_DROP_ERR(&rl)) { + struct ds s; + + ds_init(&s); + odp_flow_format(key, key_len, NULL, 0, NULL, &s, true); + VLOG_ERR("internal error parsing flow key %s", ds_cstr(&s)); + ds_destroy(&s); + } + } + return error; +} + /* Converts the 'key_len' bytes of OVS_KEY_ATTR_* attributes in 'key' to a mask * structure in 'mask'. 'flow' must be a previously translated flow * corresponding to 'mask'. Returns an ODP_FIT_* value that indicates how well diff --git a/lib/odp-util.h b/lib/odp-util.h index 4ce693c..a90a5f4 100644 --- a/lib/odp-util.h +++ b/lib/odp-util.h @@ -176,6 +176,8 @@ enum odp_key_fitness { }; enum odp_key_fitness odp_flow_key_to_flow(const struct nlattr *, size_t, struct flow *); +enum odp_key_fitness odp_flow_key_to_flow_verbose(const struct nlattr *, + size_t, struct flow *); enum odp_key_fitness odp_flow_key_to_mask(const struct nlattr *key, size_t len, struct flow *mask, const struct flow *flow); -- 1.7.9.5 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev