Message ID | AM5PR0701MB29613FD81970491479C04841A41C0@AM5PR0701MB2961.eurprd07.prod.outlook.com |
---|---|
State | Not Applicable |
Headers | show |
Series | [ovs-dev,V3] ofproto-dpif-xlate: Incorrect handling of errors in group action processing | expand |
On Fri, Jan 05, 2018 at 10:42:31AM +0000, Vishal Deep Ajmera wrote: > As per OpenFlow v1.3 specification, when an action list contains a group > action a copy of the packet is passed to the group for processing by the > group. This means that if there is an error encountered during group > processing, only the copy of packet should be dropped, but subsequent > actions in the action list should be executed on the original packet. > > Additionally, if the group type is "ALL", each action bucket of the group > should process a copy of the packet. If there is an error while processing > one bucket other buckets should still be processed. > > Example 1: > table=0,in_port=tap0 actions=output:tap1,group:10,output:tap2 > > Even if any error is encountered while processing the group action, the > packet should still be forwarded to ports tap1 and tap2. > > Example 2: > group_id=1,type=all,bucket=actions=output:tap1,bucket=actions=encap(eth) > > Even if processing the action in the second bucket fails because the > packet already has an Ethernet header, the other copy of the packet should > still be processed by the first bucket and output to port tap1. Thanks for the patch! This patch is corrupted and cannot be applied. Please send it with "git send-email" or push it as a branch to some Git repository. Thanks, Ben.
Hi Ben, The whitespace issue with the patch seems to be triggered by my MS Outlook. I compose mail in HTML format which is causing the issue. V4 version of patch in plain-text format is sent. In case it still has issues, I have committed changes in my repo on git-hub with details below. Extremely sorry for the inconvenience caused. https://github.com/vishaldeepajmera/ovs-evisajm.git commit-id: 2bc667afc7023b07c0abbf019222604b41a95b59 Warm Regards, Vishal Ajmera -----Original Message----- From: Ben Pfaff [mailto:blp@ovn.org] Sent: Wednesday, January 10, 2018 12:57 AM To: Vishal Deep Ajmera <vishal.deep.ajmera@ericsson.com> Cc: dev@openvswitch.org Subject: Re: [ovs-dev] [PATCH V3] ofproto-dpif-xlate: Incorrect handling of errors in group action processing On Fri, Jan 05, 2018 at 10:42:31AM +0000, Vishal Deep Ajmera wrote: > As per OpenFlow v1.3 specification, when an action list contains a > group action a copy of the packet is passed to the group for > processing by the group. This means that if there is an error > encountered during group processing, only the copy of packet should be > dropped, but subsequent actions in the action list should be executed on the original packet. > > Additionally, if the group type is "ALL", each action bucket of the > group should process a copy of the packet. If there is an error while > processing one bucket other buckets should still be processed. > > Example 1: > table=0,in_port=tap0 actions=output:tap1,group:10,output:tap2 > > Even if any error is encountered while processing the group action, > the packet should still be forwarded to ports tap1 and tap2. > > Example 2: > group_id=1,type=all,bucket=actions=output:tap1,bucket=actions=encap(et > h) > > Even if processing the action in the second bucket fails because the > packet already has an Ethernet header, the other copy of the packet > should still be processed by the first bucket and output to port tap1. Thanks for the patch! This patch is corrupted and cannot be applied. Please send it with "git send-email" or push it as a branch to some Git repository. Thanks, Ben.
diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c index d94e9dc..eb8021a 100644 --- a/ofproto/ofproto-dpif-xlate.c +++ b/ofproto/ofproto-dpif-xlate.c @@ -4066,6 +4066,22 @@ xlate_group_bucket(struct xlate_ctx *ctx, struct ofputil_bucket *bucket, * the group bucket freezes translation, the actions after the group action * must continue processing with the original, not the frozen packet! */ ctx->exit = false; + + /* Context error in a bucket should not impact processing of other buckets + * or actions. This is similar to cloning a packet for group buckets. + * There is no need to restore the error back to old value due to the fact + * that we actually processed group action which can happen only when there + * is no previous context error. + * + * Exception to above is errors which are system limits to protect + * translation from running too long or occupy too much space. These errors + * should not be masked. XLATE_RECURSION_TOO_DEEP, XLATE_TOO_MANY_RESUBMITS + * and XLATE_STACK_TOO_DEEP fall in this category. */ + if (ctx->error == XLATE_TOO_MANY_MPLS_LABELS || + ctx->error == XLATE_UNSUPPORTED_PACKET_TYPE) { + /* reset the error and continue processing other buckets */ + ctx->error = XLATE_OK; + } } static void