mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 14:25:26 +00:00
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 <jesse@nicira.com> Signed-off-by: Simon Horman <horms@verge.net.au> Signed-off-by: Jesse Gross <jesse@nicira.com>
This commit is contained in:
committed by
Jesse Gross
parent
b82b19e938
commit
20131cefeb
@@ -287,7 +287,9 @@ enum ovs_key_attr {
|
|||||||
OVS_KEY_ATTR_IPV4_TUNNEL, /* struct ovs_key_ipv4_tunnel */
|
OVS_KEY_ATTR_IPV4_TUNNEL, /* struct ovs_key_ipv4_tunnel */
|
||||||
#endif
|
#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
|
__OVS_KEY_ATTR_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -330,7 +332,7 @@ struct ovs_key_ethernet {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct ovs_key_mpls {
|
struct ovs_key_mpls {
|
||||||
__be32 mpls_top_lse;
|
__be32 mpls_lse;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ovs_key_ipv4 {
|
struct ovs_key_ipv4 {
|
||||||
|
@@ -942,7 +942,7 @@ format_odp_key_attr(const struct nlattr *a, struct ds *ds)
|
|||||||
case OVS_KEY_ATTR_MPLS: {
|
case OVS_KEY_ATTR_MPLS: {
|
||||||
const struct ovs_key_mpls *mpls_key = nl_attr_get(a);
|
const struct ovs_key_mpls *mpls_key = nl_attr_get(a);
|
||||||
ds_put_char(ds, '(');
|
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, ')');
|
ds_put_char(ds, ')');
|
||||||
break;
|
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,
|
mpls = nl_msg_put_unspec_uninit(key, OVS_KEY_ATTR_MPLS,
|
||||||
sizeof *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;
|
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,
|
mpls_key = nl_msg_put_unspec_uninit(buf, OVS_KEY_ATTR_MPLS,
|
||||||
sizeof *mpls_key);
|
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)) {
|
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 {
|
} else {
|
||||||
struct ovs_key_mpls mpls_key;
|
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,
|
commit_set_action(odp_actions, OVS_KEY_ATTR_MPLS,
|
||||||
&mpls_key, sizeof(mpls_key));
|
&mpls_key, sizeof(mpls_key));
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user