[ovs-dev] [PATCH 2/3] odp-util: Remove odp_in_port from struct odp_flow_key_parms.
Daniele Di Proietto
diproiettod at ovn.org
Mon Jun 13 20:16:17 UTC 2016
Acked-by: Daniele Di Proietto <diproiettod at vmware.com>
Thanks
2016-06-09 17:46 GMT-07:00 Jesse Gross <jesse at kernel.org>:
> When calling odp_flow_key_from_flow (or _mask), the in_port included
> as part of the flow is ignored and must be explicitly passed as a
> separate parameter. This is because the assumption was that the flow's
> version would often be in OFP format, rather than ODP.
>
> However, at this point all flows that are ready for serialization in
> netlink format already have their in_port properly set to ODP format.
> As a result, every caller needs to explicitly initialize the extra
> paramter to the value that is in the flow. This switches to just use
> the value in the flow to simply things and avoid the possibility of
> forgetting to initialize the extra parameter.
>
> Signed-off-by: Jesse Gross <jesse at kernel.org>
> ---
> lib/dpif-netdev.c | 3 ---
> lib/odp-util.c | 6 +++---
> lib/odp-util.h | 6 ------
> lib/tnl-ports.c | 2 --
> ofproto/ofproto-dpif-upcall.c | 3 ---
> tests/test-odp.c | 1 -
> 6 files changed, 3 insertions(+), 18 deletions(-)
>
> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
> index fcfd22e..f42d2da 100644
> --- a/lib/dpif-netdev.c
> +++ b/lib/dpif-netdev.c
> @@ -1942,14 +1942,12 @@ dp_netdev_flow_to_dpif_flow(const struct
> dp_netdev_flow *netdev_flow,
> /* Key */
> offset = key_buf->size;
> flow->key = ofpbuf_tail(key_buf);
> - odp_parms.odp_in_port = netdev_flow->flow.in_port.odp_port;
> odp_flow_key_from_flow(&odp_parms, key_buf);
> flow->key_len = key_buf->size - offset;
>
> /* Mask */
> offset = mask_buf->size;
> flow->mask = ofpbuf_tail(mask_buf);
> - odp_parms.odp_in_port = wc.masks.in_port.odp_port;
> odp_parms.key_buf = key_buf;
> odp_flow_key_from_mask(&odp_parms, mask_buf);
> flow->mask_len = mask_buf->size - offset;
> @@ -3518,7 +3516,6 @@ dp_netdev_upcall(struct dp_netdev_pmd_thread *pmd,
> struct dp_packet *packet_,
> struct odp_flow_key_parms odp_parms = {
> .flow = flow,
> .mask = &wc->masks,
> - .odp_in_port = flow->in_port.odp_port,
> .support = dp_netdev_support,
> };
>
> diff --git a/lib/odp-util.c b/lib/odp-util.c
> index d9ace90..289b969 100644
> --- a/lib/odp-util.c
> +++ b/lib/odp-util.c
> @@ -4274,10 +4274,10 @@ odp_flow_key_from_flow__(const struct
> odp_flow_key_parms *parms,
> nl_msg_put_u32(buf, OVS_KEY_ATTR_DP_HASH, data->dp_hash);
> }
>
> - /* Add an ingress port attribute if this is a mask or 'odp_in_port'
> + /* Add an ingress port attribute if this is a mask or
> 'in_port.odp_port'
> * is not the magical value "ODPP_NONE". */
> - if (export_mask || parms->odp_in_port != ODPP_NONE) {
> - nl_msg_put_odp_port(buf, OVS_KEY_ATTR_IN_PORT,
> parms->odp_in_port);
> + if (export_mask || flow->in_port.odp_port != ODPP_NONE) {
> + nl_msg_put_odp_port(buf, OVS_KEY_ATTR_IN_PORT,
> data->in_port.odp_port);
> }
>
> eth_key = nl_msg_put_unspec_uninit(buf, OVS_KEY_ATTR_ETHERNET,
> diff --git a/lib/odp-util.h b/lib/odp-util.h
> index 51cf5c3..2c3cc8c 100644
> --- a/lib/odp-util.h
> +++ b/lib/odp-util.h
> @@ -194,12 +194,6 @@ struct odp_flow_key_parms {
> const struct flow *flow;
> const struct flow *mask;
>
> - /* 'flow->in_port' is ignored (since it is likely to be an OpenFlow
> port
> - * number rather than a datapath port number). Instead, if
> 'odp_in_port'
> - * is anything other than ODPP_NONE, it is included in 'buf' as the
> input
> - * port. */
> - odp_port_t odp_in_port;
> -
> /* Indicates support for various fields. If the datapath supports a
> field,
> * then it will always be serialised. */
> struct odp_support support;
> diff --git a/lib/tnl-ports.c b/lib/tnl-ports.c
> index e8d43f0..e945eae 100644
> --- a/lib/tnl-ports.c
> +++ b/lib/tnl-ports.c
> @@ -316,7 +316,6 @@ tnl_port_show_v(struct ds *ds)
> miniflow_expand(p->cr.match.flow, &flow);
>
> /* Key. */
> - odp_parms.odp_in_port = flow.in_port.odp_port;
> odp_parms.support.recirc = true;
> ofpbuf_use_stack(&buf, &keybuf, sizeof keybuf);
> odp_flow_key_from_flow(&odp_parms, &buf);
> @@ -324,7 +323,6 @@ tnl_port_show_v(struct ds *ds)
> key_len = buf.size;
>
> /* mask*/
> - odp_parms.odp_in_port = wc.masks.in_port.odp_port;
> odp_parms.support.recirc = false;
> ofpbuf_use_stack(&buf, &maskbuf, sizeof maskbuf);
> odp_flow_key_from_mask(&odp_parms, &buf);
> diff --git a/ofproto/ofproto-dpif-upcall.c b/ofproto/ofproto-dpif-upcall.c
> index 9400ef9..b947da9 100644
> --- a/ofproto/ofproto-dpif-upcall.c
> +++ b/ofproto/ofproto-dpif-upcall.c
> @@ -1491,16 +1491,13 @@ ukey_create_from_upcall(struct upcall *upcall,
> struct flow_wildcards *wc)
> /* dpif-netdev doesn't provide a netlink-formatted flow key in the
> * upcall, so convert the upcall's flow here. */
> ofpbuf_use_stack(&keybuf, &keystub, sizeof keystub);
> - odp_parms.odp_in_port = upcall->flow->in_port.odp_port;
> odp_flow_key_from_flow(&odp_parms, &keybuf);
> }
>
> atomic_read_relaxed(&enable_megaflows, &megaflow);
> ofpbuf_use_stack(&maskbuf, &maskstub, sizeof maskstub);
> if (megaflow) {
> - odp_parms.odp_in_port = wc->masks.in_port.odp_port;
> odp_parms.key_buf = &keybuf;
> -
> odp_flow_key_from_mask(&odp_parms, &maskbuf);
> }
>
> diff --git a/tests/test-odp.c b/tests/test-odp.c
> index 602a6b6..8e4db09 100644
> --- a/tests/test-odp.c
> +++ b/tests/test-odp.c
> @@ -86,7 +86,6 @@ parse_keys(bool wc_keys)
> /* Convert cls_rule back to odp_key. */
> ofpbuf_uninit(&odp_key);
> ofpbuf_init(&odp_key, 0);
> - odp_parms.odp_in_port = flow.in_port.odp_port;
> odp_flow_key_from_flow(&odp_parms, &odp_key);
>
> if (odp_key.size > ODPUTIL_FLOW_KEY_BYTES) {
> --
> 2.5.0
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>
More information about the dev
mailing list