[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openvswitch-dev
Subject:    [ovs-dev] [PATCH 2/3] datapath-windows: Update flow lookup to support RecircId and DpHash
From:       nithin () vmware ! com (Nithin Raju)
Date:       2016-03-31 23:43:37
Message-ID: D3230454.357F8%nithin () vmware ! com
[Download RAW message or body]

Looks good to me.

Acked-by: Nithin Raju <nithin at vmware.com>

-----Original Message-----
From: Sairam Venugopal <vsairam at vmware.com>
Date: Tuesday, March 29, 2016 at 5:43 PM
To: <dev at openvswitch.org>
Cc: Sairam Venugopal <vsairam at vmware.com>
Subject: [PATCH 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 <vsairam at vmware.com>
>---
> datapath-windows/ovsext/Flow.c | 31 ++++++++++++++++++++++---------
> 1 file changed, 22 insertions(+), 9 deletions(-)
>
>diff --git a/datapath-windows/ovsext/Flow.c
>b/datapath-windows/ovsext/Flow.c
>index 02c41b7..0d48963 100644
>--- a/datapath-windows/ovsext/Flow.c
>+++ b/datapath-windows/ovsext/Flow.c
>@@ -1382,12 +1382,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 ===== */
>@@ -1765,12 +1763,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;
>@@ -2032,7 +2028,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);
>@@ -2046,6 +2042,20 @@ FlowEqual(UINT64 *src, UINT64 *dst, UINT32 size)
>     return TRUE;
> }
> 
>+__inline BOOLEAN
>+FlowEqual(OvsFlow *flow, const OvsFlowKey *key, UINT64 hash)
>+{
>+    UINT16 size = key->l2.keyLen;
>+    UINT16 offset = key->l2.offset;
>+    UINT64 *src = (UINT64 *)((UINT8 *)&flow->key + offset);
>+    UINT64 *dst = (UINT64 *)((UINT8 *)key + offset);
>+
>+    return (flow->hash == hash &&
>+            flow->key.l2.val == key->l2.val &&
>+            flow->key.recircId == key->recircId &&
>+            flow->key.dpHash == key->dpHash &&
>+            FlowMemoryEqual(src, dst, size));
>+}
> 
> /*
>  * 
>--------------------------------------------------------------------------
>--
>@@ -2133,6 +2143,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)];
>@@ -2140,10 +2156,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, *hash)) {
>             return flow;
>         }
>         link = link->Flink;
>-- 
>2.5.0.windows.1
>
>
>


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic