Acked-by: Sairam Venugopal <[email protected]>
On 9/5/17, 4:53 PM, "[email protected] on behalf of Anand Kumar" <[email protected] on behalf of [email protected]> wrote: >For a given packet, packet counters in conntrack should be accounted only >once, even if the packet is processed multiple times by conntrack. > >When a packet is processed by conntrack, ct_state flag is set to >OVS_CS_F_TRACKED. Use this state to identify if a packet has been >processed previously by conntrack. > >Also update the ct packet counters when ct entry is created. > >With this patch, the conntrack's packet counters behavior is similar >to linux > >Signed-off-by: Anand Kumar <[email protected]> >--- > datapath-windows/ovsext/Conntrack.c | 34 +++++++++++++++++++++------------- > 1 file changed, 21 insertions(+), 13 deletions(-) > >diff --git a/datapath-windows/ovsext/Conntrack.c >b/datapath-windows/ovsext/Conntrack.c >index 8bcda05..0adb6d5 100644 >--- a/datapath-windows/ovsext/Conntrack.c >+++ b/datapath-windows/ovsext/Conntrack.c >@@ -169,6 +169,18 @@ OvsPostCtEventEntry(POVS_CT_ENTRY entry, UINT8 type) > OvsPostCtEvent(&ctEventEntry); > } > >+static __inline VOID >+OvsCtIncrementCounters(POVS_CT_ENTRY entry, BOOLEAN reply, PNET_BUFFER_LIST >nbl) >+{ >+ if (reply) { >+ entry->rev_key.byteCount+= OvsPacketLenNBL(nbl); >+ entry->rev_key.packetCount++; >+ } else { >+ entry->key.byteCount += OvsPacketLenNBL(nbl); >+ entry->key.packetCount++; >+ } >+} >+ > static __inline BOOLEAN > OvsCtAddEntry(POVS_CT_ENTRY entry, OvsConntrackKeyLookupCtx *ctx, > PNAT_ACTION_INFO natInfo, UINT64 now) >@@ -287,6 +299,9 @@ OvsCtEntryCreate(OvsForwardingContext *fwdCtx, > } > > OvsCtUpdateFlowKey(key, state, ctx->key.zone, 0, NULL); >+ if (entry) { >+ OvsCtIncrementCounters(entry, ctx->reply, curNbl); >+ } > return entry; > } > >@@ -382,18 +397,6 @@ OvsCtKeyAreSame(OVS_CT_KEY ctxKey, OVS_CT_KEY entryKey) > (ctxKey.zone == entryKey.zone)); > } > >-static __inline VOID >-OvsCtIncrementCounters(POVS_CT_ENTRY entry, BOOLEAN reply, PNET_BUFFER_LIST >nbl) >-{ >- if (reply) { >- entry->rev_key.byteCount+= OvsPacketLenNBL(nbl); >- entry->rev_key.packetCount++; >- } else { >- entry->key.byteCount += OvsPacketLenNBL(nbl); >- entry->key.packetCount++; >- } >-} >- > POVS_CT_ENTRY > OvsCtLookup(OvsConntrackKeyLookupCtx *ctx) > { >@@ -730,6 +733,12 @@ OvsCtExecute_(OvsForwardingContext *fwdCtx, > NdisReleaseRWLock(ovsConntrackLockObj, &lockState); > OVS_LOG_ERROR("Conntrack Limit hit: %lu", ctTotalEntries); > return NDIS_STATUS_RESOURCES; >+ >+ /* Increment the counters soon after the lookup, since we set ct.state >+ * to OVS_CS_F_TRACKED after processing the ct entry. >+ */ >+ if (entry && (!(key->ct.state & OVS_CS_F_TRACKED))) { >+ OvsCtIncrementCounters(entry, ctx.reply, curNbl); > } > > if (!entry) { >@@ -740,7 +749,6 @@ OvsCtExecute_(OvsForwardingContext *fwdCtx, > &entryCreated); > } else { > /* Process the entry and update CT flags */ >- OvsCtIncrementCounters(entry, ctx.reply, curNbl); > entry = OvsProcessConntrackEntry(fwdCtx, layers->l4Offset, &ctx, key, > zone, natInfo, commit, currentTime, > &entryCreated); >-- >2.9.3.windows.1 > >_______________________________________________ >dev mailing list >[email protected] >https://urldefense.proofpoint.com/v2/url?u=https-3A__mail.openvswitch.org_mailman_listinfo_ovs-2Ddev&d=DwICAg&c=uilaK90D4TOVoH58JNXRgQ&r=Z6vowHUOjP5ysP_g372c49Nqc1vEKqHKNBkR5Q5Z7uo&m=UUkY3ld1vxNjRMbNPm79bHFxEAWK0F9-VhuWaYlU0KM&s=W9Yf7wNSiWN-x1a9C_wSYqDGpCswFcmcyoNzE8rpuwk&e= > _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
