Please find the comments inline. I have prefixed them with “sai:” Thanks, Sairam
On 1/12/17, 1:13 PM, "ovs-dev-boun...@openvswitch.org on behalf of Anand Kumar" <ovs-dev-boun...@openvswitch.org on behalf of kumaran...@vmware.com> wrote: >This patch adds support for Ipv4 fragments in conntrack module. >Individual fragments are not tracked, the reassembled Ipv4 datagram is treated >as a single ct entry. > >Added MRU field in OvsForwardingContext, to keep track of Maximum recieved unit >from all the recieved IPv4 fragments. >--- > datapath-windows/ovsext/Actions.c | 15 +++++++++++---- > datapath-windows/ovsext/Conntrack.c | 31 +++++++++++++++++++++++++------ > datapath-windows/ovsext/Conntrack.h | 7 ++++++- > 3 files changed, 42 insertions(+), 11 deletions(-) > >diff --git a/datapath-windows/ovsext/Actions.c >b/datapath-windows/ovsext/Actions.c >index b4a286b..f378619 100644 >--- a/datapath-windows/ovsext/Actions.c >+++ b/datapath-windows/ovsext/Actions.c >@@ -125,6 +125,9 @@ typedef struct OvsForwardingContext { > > /* header information */ > OVS_PACKET_HDR_INFO layers; >+ >+ /* Maximum Recieving Unit */ >+ UINT16 mru; > } OvsForwardingContext; > > /* >@@ -1910,11 +1913,15 @@ OvsDoExecuteActions(POVS_SWITCH_CONTEXT switchContext, > } > } > >- status = OvsExecuteConntrackAction(ovsFwdCtx.curNbl, layers, >- key, (const PNL_ATTR)a); >+ status = OvsExecuteConntrackAction(switchContext, >&ovsFwdCtx.curNbl, &(ovsFwdCtx.mru), >+ ovsFwdCtx.completionList, >+ >ovsFwdCtx.fwdDetail->SourcePortId, >+ layers, key, (const >PNL_ATTR)a); > if (status != NDIS_STATUS_SUCCESS) { >- OVS_LOG_ERROR("CT Action failed"); >- dropReason = L"OVS-conntrack action failed"; >+ if (status != NDIS_STATUS_PENDING) { >+ OVS_LOG_ERROR("CT Action failed"); >+ dropReason = L"OVS-conntrack action failed"; saii: Can you align the }. Also add a comment saying Pending Packets are currently consumed by the Defragmentation process. >+ } > goto dropit; > } > break; >diff --git a/datapath-windows/ovsext/Conntrack.c >b/datapath-windows/ovsext/Conntrack.c >index d1be480..219680e 100644 >--- a/datapath-windows/ovsext/Conntrack.c >+++ b/datapath-windows/ovsext/Conntrack.c >@@ -15,6 +15,7 @@ > */ > > #include "Conntrack.h" >+#include "IpFragment.h" > #include "Jhash.h" > #include "PacketParser.h" > #include "Event.h" >@@ -312,13 +313,25 @@ OvsCtEntryExpired(POVS_CT_ENTRY entry) > } > > static __inline NDIS_STATUS >-OvsDetectCtPacket(OvsFlowKey *key) >+OvsDetectCtPacket(POVS_SWITCH_CONTEXT switchContext, >+ PNET_BUFFER_LIST *curNbl, >+ OvsCompletionList *completionList, >+ NDIS_SWITCH_PORT_ID sourcePort, >+ OvsFlowKey *key, >+ UINT16 *mru, >+ PNET_BUFFER_LIST *newNbl) > { > /* Currently we support only Unfragmented TCP packets */ > switch (ntohs(key->l2.dlType)) { > case ETH_TYPE_IPV4: > if (key->ipKey.nwFrag != OVS_FRAG_TYPE_NONE) { >- return NDIS_STATUS_NOT_SUPPORTED; >+ return OvsProcessIpv4Fragment(switchContext, >+ curNbl, >+ completionList, >+ sourcePort, >+ mru, >+ key->tunKey.tunnelId, >+ newNbl); > } > if (key->ipKey.nwProto == IPPROTO_TCP > || key->ipKey.nwProto == IPPROTO_UDP >@@ -688,7 +701,11 @@ OvsCtExecute_(PNET_BUFFER_LIST curNbl, > *--------------------------------------------------------------------------- > */ Sai: Update the summary to say we consume the original fragment Nbl. > NDIS_STATUS >-OvsExecuteConntrackAction(PNET_BUFFER_LIST curNbl, >+OvsExecuteConntrackAction(POVS_SWITCH_CONTEXT switchContext, >+ PNET_BUFFER_LIST *curNbl, >+ UINT16 *mru, >+ OvsCompletionList *completionList, >+ NDIS_SWITCH_PORT_ID sourcePort, > OVS_PACKET_HDR_INFO *layers, > OvsFlowKey *key, > const PNL_ATTR a) >@@ -699,10 +716,11 @@ OvsExecuteConntrackAction(PNET_BUFFER_LIST curNbl, > MD_MARK *mark = NULL; > MD_LABELS *labels = NULL; > PCHAR helper = NULL; >- >+ PNET_BUFFER_LIST newNbl = NULL; > NDIS_STATUS status; > >- status = OvsDetectCtPacket(key); >+ status = OvsDetectCtPacket(switchContext, curNbl, completionList, >+ sourcePort, key, mru, &newNbl); > if (status != NDIS_STATUS_SUCCESS) { > return status; > } >@@ -735,7 +753,8 @@ OvsExecuteConntrackAction(PNET_BUFFER_LIST curNbl, > } > } > >- status = OvsCtExecute_(curNbl, key, layers, >+ /* If newNbl is not allocated, use the current Nbl*/ >+ status = OvsCtExecute_(newNbl != NULL ? newNbl : *curNbl, key, layers, > commit, zone, mark, labels, helper); > return status; > } >diff --git a/datapath-windows/ovsext/Conntrack.h >b/datapath-windows/ovsext/Conntrack.h >index af99885..2e7285b 100644 >--- a/datapath-windows/ovsext/Conntrack.h >+++ b/datapath-windows/ovsext/Conntrack.h >@@ -20,6 +20,7 @@ > #include "precomp.h" > #include "Flow.h" > #include "Debug.h" >+#include "PacketIO.h" > #include <stddef.h> > > #ifdef OVS_DBG_MOD >@@ -155,7 +156,11 @@ OvsGetTcpPayloadLength(PNET_BUFFER_LIST nbl) > VOID OvsCleanupConntrack(VOID); > NTSTATUS OvsInitConntrack(POVS_SWITCH_CONTEXT context); > >-NDIS_STATUS OvsExecuteConntrackAction(PNET_BUFFER_LIST curNbl, >+NDIS_STATUS OvsExecuteConntrackAction(POVS_SWITCH_CONTEXT switchContext, >+ PNET_BUFFER_LIST *curNbl, >+ UINT16 *mru, >+ OvsCompletionList *completionList, >+ NDIS_SWITCH_PORT_ID sourcePort, > OVS_PACKET_HDR_INFO *layers, > OvsFlowKey *key, > const PNL_ATTR a); >-- >2.9.3.windows.1 > >_______________________________________________ >dev mailing list >d...@openvswitch.org >https://urldefense.proofpoint.com/v2/url?u=https-3A__mail.openvswitch.org_mailman_listinfo_ovs-2Ddev&d=DwICAg&c=uilaK90D4TOVoH58JNXRgQ&r=Z6vowHUOjP5ysP_g372c49Nqc1vEKqHKNBkR5Q5Z7uo&m=Bwari9A-81G4aEK9k3Bi4VbSlFU3dL30d7Cic3AIWWw&s=bgbBOY2sY7t7DSiL88w6St8aWmdHGL7GumOBtY1f9XU&e= > _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev