[ovs-dev] [PATCH] datapath-windows: Increment ct packet counters based on ct_state.

aserdean at ovn.org aserdean at ovn.org
Thu Sep 7 20:07:53 UTC 2017


I added a missing curly bracket to make it compile.

Thanks Anand I applied it on master and branch-2.8.

Alin.

> -----Original Message-----
> From: ovs-dev-bounces at openvswitch.org [mailto:ovs-dev-
> bounces at openvswitch.org] On Behalf Of aserdean at ovn.org
> Sent: Thursday, September 7, 2017 9:54 PM
> To: 'Anand Kumar' <kumaranand at vmware.com>; dev at openvswitch.org
> Subject: Re: [ovs-dev] [PATCH] datapath-windows: Increment ct packet
> counters based on ct_state.
> 
> 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
> 
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev



More information about the dev mailing list