[ovs-dev] [PATCH] datapath-windows: Increment ct packet counters based on ct_state.
aserdean at ovn.org
aserdean at ovn.org
Thu Sep 7 18:54:13 UTC 2017
Acked-by: Alin Serdean <aserdean at ovn.org>
> -----Original Message-----
> From: ovs-dev-bounces at openvswitch.org [mailto:ovs-dev-
> bounces at openvswitch.org] On Behalf Of Anand Kumar
> Sent: Wednesday, September 6, 2017 2:53 AM
> To: dev at openvswitch.org
> Subject: [ovs-dev] [PATCH] datapath-windows: Increment ct packet counters
> based on ct_state.
>
> 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 <kumaranand at vmware.com>
> ---
> 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
> dev at openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
More information about the dev
mailing list