[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