Acked-by: Alin Gabriel Serdean <aserd...@cloudbasesolutions.com> 

> -----Mesaj original-----
> De la: dev [mailto:dev-boun...@openvswitch.org] În numele Sairam
> Venugopal
> Trimis: Friday, April 1, 2016 2:47 AM
> Către: dev@openvswitch.org
> Subiect: [ovs-dev] [PATCH v2, 2/3] datapath-windows: Update flow lookup
> to support RecircId and DpHash
> 
> Update the OvsLookupFlow to include RecircId and DpHash in its flow
> comparison. Revert the keyLen related changes until they are aligned
> appropriately.
> 
> Signed-off-by: Sairam Venugopal <vsai...@vmware.com>
> ---
>  datapath-windows/ovsext/Flow.c | 33 ++++++++++++++++++++++++-------
> --
>  1 file changed, 24 insertions(+), 9 deletions(-)
> 
> diff --git a/datapath-windows/ovsext/Flow.c b/datapath-
> windows/ovsext/Flow.c index c079540..f74ce12 100644
> --- a/datapath-windows/ovsext/Flow.c
> +++ b/datapath-windows/ovsext/Flow.c
> @@ -1380,12 +1380,10 @@ _MapKeyAttrToFlowPut(PNL_ATTR *keyAttrs,
> 
>      if (keyAttrs[OVS_KEY_ATTR_RECIRC_ID]) {
>          destKey->recircId =
> NlAttrGetU32(keyAttrs[OVS_KEY_ATTR_RECIRC_ID]);
> -        destKey->l2.keyLen += sizeof(destKey->recircId);
>      }
> 
>      if (keyAttrs[OVS_KEY_ATTR_DP_HASH]) {
>          destKey->dpHash =
> NlAttrGetU32(keyAttrs[OVS_KEY_ATTR_DP_HASH]);
> -        destKey->l2.keyLen += sizeof(destKey->dpHash);
>      }
> 
>      /* ===== L2 headers ===== */
> @@ -1770,12 +1768,10 @@ OvsGetFlowMetadata(OvsFlowKey *key,
> 
>      if (keyAttrs[OVS_KEY_ATTR_RECIRC_ID]) {
>          key->recircId = NlAttrGetU32(keyAttrs[OVS_KEY_ATTR_RECIRC_ID]);
> -        key->l2.keyLen += sizeof(key->recircId);
>      }
> 
>      if (keyAttrs[OVS_KEY_ATTR_DP_HASH]) {
>          key->dpHash = NlAttrGetU32(keyAttrs[OVS_KEY_ATTR_DP_HASH]);
> -        key->l2.keyLen += sizeof(key->dpHash);
>      }
> 
>      return status;
> @@ -2037,7 +2033,7 @@ OvsExtractFlow(const NET_BUFFER_LIST *packet,  }
> 
>  __inline BOOLEAN
> -FlowEqual(UINT64 *src, UINT64 *dst, UINT32 size)
> +FlowMemoryEqual(UINT64 *src, UINT64 *dst, UINT32 size)
>  {
>      UINT32 i;
>      ASSERT((size & 0x7) == 0);
> @@ -2051,6 +2047,22 @@ FlowEqual(UINT64 *src, UINT64 *dst, UINT32 size)
>      return TRUE;
>  }
> 
> +__inline BOOLEAN
> +FlowEqual(OvsFlow *srcFlow,
> +         const OvsFlowKey *dstKey,
> +         UINT8 *dstStart,
> +         UINT64 hash,
> +         UINT32 offset,
> +         UINT16 size)
> +{
> +    return (srcFlow->hash == hash &&
> +            srcFlow->key.l2.val == dstKey->l2.val &&
> +            srcFlow->key.recircId == dstKey->recircId &&
> +            srcFlow->key.dpHash == dstKey->dpHash &&
> +            FlowMemoryEqual((UINT64 *)((UINT8 *)&srcFlow->key + offset),
> +                            (UINT64 *) dstStart,
> +                            size));
> +}
> 
>  /*
>   * 
> ----------------------------------------------------------------------------
> @@ -2138,6 +2150,12 @@ OvsLookupFlow(OVS_DATAPATH *datapath,
> 
>      if (!hashValid) {
>          *hash = OvsJhashBytes(start, size, 0);
> +        if (key->recircId) {
> +            *hash = OvsJhashWords((UINT32*)hash, 1, key->recircId);
> +        }
> +        if (key->dpHash) {
> +            *hash = OvsJhashWords((UINT32*)hash, 1, key->dpHash);
> +        }
>      }
> 
>      head = &datapath->flowTable[HASH_BUCKET(*hash)];
> @@ -2145,10 +2163,7 @@ OvsLookupFlow(OVS_DATAPATH *datapath,
>      while (link != head) {
>          OvsFlow *flow = CONTAINING_RECORD(link, OvsFlow, ListEntry);
> 
> -        if (flow->hash == *hash &&
> -            flow->key.l2.val == key->l2.val &&
> -            FlowEqual((UINT64 *)((uint8 *)&flow->key + offset),
> -                         (UINT64 *)start, size)) {
> +        if (FlowEqual(flow, key, start, *hash, offset, size)) {
>              return flow;
>          }
>          link = link->Flink;
> --
> 2.5.0.windows.1
> 
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to