Only the default existing behaviour is translated. All other methods are rejected for now.
NTR selection method Signed-off-by: Simon Horman <simon.hor...@netronome.com> --- v4 * Update group_dpif_get_selection_method() to reflect that struct ofgroup now has a props field. * Do not needlessly include openflow/netronome-ext.h in ofproto-provider.h * Consider an unknown selection method a bug as parsing of groups should guard against that. v3 * No change v2 * Use array of TLVs rather than OF1.1 match for fields field of NTR selection method property --- ofproto/ofproto-dpif-xlate.c | 15 ++++++++++++++- ofproto/ofproto-dpif.c | 6 ++++++ ofproto/ofproto-dpif.h | 1 + 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c index 0e28c77..75d3eed 100644 --- a/ofproto/ofproto-dpif-xlate.c +++ b/ofproto/ofproto-dpif-xlate.c @@ -3092,7 +3092,7 @@ xlate_ff_group(struct xlate_ctx *ctx, struct group_dpif *group) } static void -xlate_select_group(struct xlate_ctx *ctx, struct group_dpif *group) +xlate_default_select_group(struct xlate_ctx *ctx, struct group_dpif *group) { struct flow_wildcards *wc = &ctx->xout->wc; struct ofputil_bucket *bucket; @@ -3117,6 +3117,19 @@ xlate_select_group(struct xlate_ctx *ctx, struct group_dpif *group) } static void +xlate_select_group(struct xlate_ctx *ctx, struct group_dpif *group) +{ + const char *selection_method = group_dpif_get_selection_method(group); + + if (selection_method[0] == '\0') { + xlate_default_select_group(ctx, group); + } else { + /* Parsing of groups should ensure this never happens */ + OVS_NOT_REACHED(); + } +} + +static void xlate_group_action__(struct xlate_ctx *ctx, struct group_dpif *group) { ctx->in_group = true; diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c index 38ad6e2..43a21c2 100644 --- a/ofproto/ofproto-dpif.c +++ b/ofproto/ofproto-dpif.c @@ -4241,6 +4241,12 @@ group_dpif_get_type(const struct group_dpif *group) { return group->up.type; } + +const char * +group_dpif_get_selection_method(const struct group_dpif *group) +{ + return group->up.props.selection_method; +} /* Sends 'packet' out 'ofport'. * May modify 'packet'. diff --git a/ofproto/ofproto-dpif.h b/ofproto/ofproto-dpif.h index e2359cd..fd099a2 100644 --- a/ofproto/ofproto-dpif.h +++ b/ofproto/ofproto-dpif.h @@ -137,6 +137,7 @@ bool group_dpif_lookup(struct ofproto_dpif *ofproto, uint32_t group_id, void group_dpif_get_buckets(const struct group_dpif *group, const struct ovs_list **buckets); enum ofp11_group_type group_dpif_get_type(const struct group_dpif *group); +const char *group_dpif_get_selection_method(const struct group_dpif *group); bool ofproto_has_vlan_splinters(const struct ofproto_dpif *); ofp_port_t vsp_realdev_to_vlandev(const struct ofproto_dpif *, -- 2.1.4 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev