> On Nov 25, 2015, at 11:23 AM, Jarno Rajahalme <ja...@ovn.org> wrote: > >> >> On Nov 25, 2015, at 11:11 AM, Jarno Rajahalme <ja...@ovn.org >> <mailto:ja...@ovn.org>> wrote: >> >> >>> On Nov 25, 2015, at 10:52 AM, Joe Stringer <j...@ovn.org >>> <mailto:j...@ovn.org>> wrote: >>> >>> On 25 November 2015 at 10:31, Jarno Rajahalme <ja...@ovn.org >>> <mailto:ja...@ovn.org>> wrote: >>>> >>>>> On Nov 24, 2015, at 5:02 PM, Joe Stringer <j...@ovn.org >>>>> <mailto:j...@ovn.org>> wrote: >>>>> >>>>> On 24 November 2015 at 13:41, Jarno Rajahalme <ja...@ovn.org >>>>> <mailto:ja...@ovn.org>> wrote: >>>>>> Sometimes xlate_actions() fails due to too deep recursion, too many >>>>>> MPLS labels, or missing recirculation context. Make xlate_actions() >>>>>> clear out the produced odp actions in these cases to make it easy for >>>>>> the caller to install a drop flow (instead or installing a flow with >>>>>> partially translated actions). Also, return a specific error code, so >>>>>> that the error can be properly propagated where meaningful. >>>>>> >>>>>> Before this patch it was possible that the revalidation installed a >>>>>> flow with a recirculation ID with an invalid recirc ID (== 0), due to >>>>>> the introduction of in-place modification in commit 43b2f131a229 >>>>>> (ofproto: Allow in-place modifications of datapath flows). >>>>>> >>>>>> Signed-off-by: Jarno Rajahalme <ja...@ovn.org <mailto:ja...@ovn.org>> >>>>> >>>>> Should this also set the error when receiving packets on a mirror port >>>>> in xlate_actions()? Or when receiving tagged VLAN traffic that doesn't >>>>> correspond to the port's vlan tag? Or when a group has no live bucket? >>>>> Are there any other cases that should also be covered? (I just scanned >>>>> across ofproto/ofproto-dpif-xlate.c looking for cases where we're >>>>> already logging that we drop the packet, but maybe there's a reasoning >>>>> behind not including these - if so, please enlighten me) >>>> >>>> No reasoning for missing those, I just did not notice them. Thanks for >>>> pointing them out. >>> >>> OK, I thought it may have been something like "expected errors" vs. >>> "unexpected errors". >> >> Looking into these I noticed this to be the case. Must discern whether to >> fail just the individual action v.s. the whole pipeline. >> > > How about this incremental to cover two cases here (rest are “expected > errors” IMO): > > diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c > index 36a6fbc..2908339 100644 > --- a/ofproto/ofproto-dpif-xlate.c > +++ b/ofproto/ofproto-dpif-xlate.c > @@ -336,6 +336,10 @@ const char *xlate_strerror(enum xlate_error error) > return "Recirculation conflict"; > case XLATE_TOO_MANY_MPLS_LABELS: > return "Too many MPLS labels"; > + case XLATE_BUCKET_CHAINING_TOO_DEEP: > + return "Bucket chaining too deep"; > + case XLATE_NO_INPUT_BUNDLE: > + return "No input bundle"; > } > return "Unknown error"; > } > @@ -1444,10 +1448,9 @@ bucket_is_alive(const struct xlate_ctx *ctx, > struct ofputil_bucket *bucket, int depth) > { > if (depth >= MAX_LIVENESS_RECURSION) { > - static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1); > - > - VLOG_WARN_RL(&rl, "bucket chaining exceeded %d links", > - MAX_LIVENESS_RECURSION); > + XLATE_REPORT_ERROR(ctx, "bucket chaining exceeded %d links", > + MAX_LIVENESS_RECURSION); > + ctx->error = XLATE_BUCKET_CHAINING_TOO_DEEP; > return false; > } > > @@ -2323,7 +2326,8 @@ xlate_normal(struct xlate_ctx *ctx) > in_xbundle = lookup_input_bundle(ctx->xbridge, flow->in_port.ofp_port, > ctx->xin->packet != NULL, &in_port); > if (!in_xbundle) { > - xlate_report(ctx, "no input bundle, dropping"); > + XLATE_REPORT_ERROR(ctx, "no input bundle, dropping"); > + ctx->error = XLATE_NO_INPUT_BUNDLE; > return; > } > > > The last one is debatable, as setting the error fails the whole translation > rather than just the normal action. But this is most likely an configuration > error, so maybe failing the whole pipeline (and installing a drop flow) is > the right thing to do here? >
I’d like to push this patch today, either with or without the above incremental, if possible, and then post a new version of the NAT series re-based on this. Ben already Acked the 2nd patch. Jarno _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev