[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