Mind creating a function for it? You will need to add the same for 
OvsTunnelPortTx as well, otherwise the packet won't be fragmented to the vif 
value before sending it via a tunnel type (i.e. vxlan).

I will try to explain more on patch 0.

> -----Original Message-----
> From: ovs-dev-boun...@openvswitch.org [mailto:ovs-dev-
> boun...@openvswitch.org] On Behalf Of Anand Kumar
> Sent: Friday, March 24, 2017 10:51 PM
> To: d...@openvswitch.org
> Subject: [ovs-dev] [PATCH v6 5/5] datapath-windows: Fragment NBL based
> on MRU size
> 
> This patch adds support for Fragmenting NBL based on the MRU value.
> MRU value is updated only for Ipv4 fragments, if it is non zero, then fragment
> the NBL and send out the new NBL to the vnic.
> 
> Signed-off-by: Anand Kumar <kumaran...@vmware.com>
> ---
> v5->v6: No Change
> v4->v5:
>       - Use MRU information in the _OVS_BUFFER_CONTEXT to fragment
> NBL.
> v3->v4: No Change
> v2->v3:
>       - Updated log message
> v1->v2: No change
> ---
>  datapath-windows/ovsext/Actions.c | 27
> +++++++++++++++++++++++++++
>  1 file changed, 27 insertions(+)
> 
> diff --git a/datapath-windows/ovsext/Actions.c b/datapath-
> windows/ovsext/Actions.c
> index cbc7640..a68679c 100644
> --- a/datapath-windows/ovsext/Actions.c
> +++ b/datapath-windows/ovsext/Actions.c
> @@ -34,6 +34,7 @@
>  #include "Vport.h"
>  #include "Vxlan.h"
>  #include "Geneve.h"
> +#include "IpFragment.h"
> 
>  #ifdef OVS_DBG_MOD
>  #undef OVS_DBG_MOD
> @@ -864,6 +865,8 @@ OvsOutputForwardingCtx(OvsForwardingContext
> *ovsFwdCtx)
>      NDIS_STATUS status = STATUS_SUCCESS;
>      POVS_SWITCH_CONTEXT switchContext = ovsFwdCtx->switchContext;
>      PCWSTR dropReason;
> +    PNET_BUFFER_LIST fragNbl = NULL;
> +    POVS_BUFFER_CONTEXT ctx;
> 
>      /*
>       * Handle the case where the some of the destination ports are tunneled
> @@ -909,6 +912,30 @@ OvsOutputForwardingCtx(OvsForwardingContext
> *ovsFwdCtx)
>              goto dropit;
>          }
> 
> +        ctx =
> (POVS_BUFFER_CONTEXT)NET_BUFFER_LIST_CONTEXT_DATA_START(ovsF
> wdCtx->curNbl);
> +        if (ctx->mru != 0) {
> +            /* Fragment nbl based on mru. If it returns NULL then the 
> original
> +             * reassembled NBL is sent out to the VIF which will be dropped 
> if
> +             * the packet size is more than VIF MTU.
> +             */
> +            fragNbl = OvsFragmentNBL(ovsFwdCtx->switchContext,
> +                                     ovsFwdCtx->curNbl,
> +                                     &(ovsFwdCtx->layers),
> +                                     ctx->mru, 0, TRUE);
> +            if (fragNbl != NULL) {
> +                OvsCompleteNBLForwardingCtx(ovsFwdCtx,
> +                                            L"Dropped since fragmenting 
> NBL");
> +                status = OvsInitForwardingCtx(ovsFwdCtx,
> +                                              ovsFwdCtx->switchContext,
> +                                              fragNbl,
> +                                              ovsFwdCtx->srcVportNo,
> +                                              ovsFwdCtx->sendFlags,
> +
> NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL(fragNbl),
> +                                              ovsFwdCtx->completionList,
> +                                              &ovsFwdCtx->layers, FALSE);
> +            }
> +        }
> +
>          OvsSendNBLIngress(ovsFwdCtx->switchContext, ovsFwdCtx->curNbl,
>                            ovsFwdCtx->sendFlags);
>          /* End this pipeline by resetting the corresponding context. */
> --
> 2.9.3.windows.1
> 
> _______________________________________________
> dev mailing list
> d...@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to