Looks good to me. Acked-by: Nithin Raju <nit...@vmware.com>
-----Original Message----- From: Sairam Venugopal <vsai...@vmware.com> Date: Tuesday, March 29, 2016 at 5:43 PM To: <dev@openvswitch.org> Cc: Sairam Venugopal <vsai...@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 <vsai...@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 > > > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev