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