From 20131cefeb4c033e1c3cfaea03e06c6b86a6d98d Mon Sep 17 00:00:00 2001 From: Simon Horman Date: Thu, 2 May 2013 10:49:49 +0900 Subject: [PATCH] Make it more obvious that OVS_KEY_ATTR_MPLS may be an array Note that OVS_KEY_ATTR_MPLS may be an array of ovs_key_mpls and that the acceptable length may be restricted by the implementation. Currently the user-space datapath and proposed kernel datapath implementation restrict the length to a single element. Also update the mpls_top_lse name of the element of struct ovs_key_mpls, as it is an array of LSEs and thus not necessarily just the top LSE. As requested by Jesse Gross Cc: Jesse Gross Signed-off-by: Simon Horman Signed-off-by: Jesse Gross --- include/linux/openvswitch.h | 6 ++++-- lib/odp-util.c | 8 ++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/include/linux/openvswitch.h b/include/linux/openvswitch.h index bd2f05f8d..e890fd82d 100644 --- a/include/linux/openvswitch.h +++ b/include/linux/openvswitch.h @@ -287,7 +287,9 @@ enum ovs_key_attr { OVS_KEY_ATTR_IPV4_TUNNEL, /* struct ovs_key_ipv4_tunnel */ #endif - OVS_KEY_ATTR_MPLS = 62, /* struct ovs_key_mpls */ + OVS_KEY_ATTR_MPLS = 62, /* array of struct ovs_key_mpls. + * The implementation may restrict + * the accepted length of the array. */ __OVS_KEY_ATTR_MAX }; @@ -330,7 +332,7 @@ struct ovs_key_ethernet { }; struct ovs_key_mpls { - __be32 mpls_top_lse; + __be32 mpls_lse; }; struct ovs_key_ipv4 { diff --git a/lib/odp-util.c b/lib/odp-util.c index 1988c637e..ae0926766 100644 --- a/lib/odp-util.c +++ b/lib/odp-util.c @@ -942,7 +942,7 @@ format_odp_key_attr(const struct nlattr *a, struct ds *ds) case OVS_KEY_ATTR_MPLS: { const struct ovs_key_mpls *mpls_key = nl_attr_get(a); ds_put_char(ds, '('); - format_mpls_lse(ds, mpls_key->mpls_top_lse); + format_mpls_lse(ds, mpls_key->mpls_lse); ds_put_char(ds, ')'); break; } @@ -1267,7 +1267,7 @@ parse_odp_key_attr(const char *s, const struct simap *port_names, mpls = nl_msg_put_unspec_uninit(key, OVS_KEY_ATTR_MPLS, sizeof *mpls); - mpls->mpls_top_lse = mpls_lse_from_components(label, tc, ttl, bos); + mpls->mpls_lse = mpls_lse_from_components(label, tc, ttl, bos); return n; } } @@ -1630,7 +1630,7 @@ odp_flow_key_from_flow(struct ofpbuf *buf, const struct flow *flow, mpls_key = nl_msg_put_unspec_uninit(buf, OVS_KEY_ATTR_MPLS, sizeof *mpls_key); - mpls_key->mpls_top_lse = flow->mpls_lse; + mpls_key->mpls_lse = flow->mpls_lse; } if (is_ip_any(flow) && !(flow->nw_frag & FLOW_NW_FRAG_LATER)) { @@ -2285,7 +2285,7 @@ commit_mpls_action(const struct flow *flow, struct flow *base, } else { struct ovs_key_mpls mpls_key; - mpls_key.mpls_top_lse = flow->mpls_lse; + mpls_key.mpls_lse = flow->mpls_lse; commit_set_action(odp_actions, OVS_KEY_ATTR_MPLS, &mpls_key, sizeof(mpls_key)); } -- 2.43.0