[ovs-dev] [PATCH v2, 2/3] datapath-windows: Update flow lookup to support RecircId and DpHash
Nithin Raju
nithin at vmware.com
Fri Apr 1 00:26:13 UTC 2016
Acked-by: Nithin Raju <nithin at vmware.com>
-----Original Message-----
From: dev <dev-bounces at openvswitch.org> on behalf of Sairam Venugopal
<vsairam at vmware.com>
Date: Thursday, March 31, 2016 at 4:46 PM
To: "dev at openvswitch.org" <dev at 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 <vsairam at 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 at 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=
More information about the dev
mailing list