Acked-by: Nithin Raju <nit...@vmware.com> -----Original Message----- From: dev <dev-boun...@openvswitch.org> on behalf of Sairam Venugopal <vsai...@vmware.com> Date: Thursday, March 31, 2016 at 4:46 PM To: "dev@openvswitch.org" <dev@openvswitch.org> Subject: [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 >https://urldefense.proofpoint.com/v2/url?u=http-3A__openvswitch.org_mailma >n_listinfo_dev&d=BQIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=pN >HQcdr7B40b4h6Yb7FIedI1dnBsxdDuTLBYD3JqV80&m=XZI843JBRYR5uNKG6N5yX6RPBS4RS2 >8yBM0QB01_Y2c&s=wej1-dtvzJyXTYSX207tYco3OFNkvp2wypO02yo5VXc&e= _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev