[ovs-dev] [PATCH v6 4/6] datapath-windows: Support for OVS_ACTION_ATTR_HASH attribute
Nithin Raju
nithin at vmware.com
Tue Mar 22 06:29:19 UTC 2016
How is key->dphash being used after it gets stored as part of the key.
Shouldn¹t it be used for flow lookup? Is it purely for reporting purposes?
Thanks,
-- Nithin
-----Original Message-----
From: dev <dev-bounces at openvswitch.org> on behalf of Sorin Vinturis
<svinturis at cloudbasesolutions.com>
Date: Friday, March 18, 2016 at 7:58 AM
To: "dev at openvswitch.org" <dev at openvswitch.org>
Subject: [ovs-dev] [PATCH v6 4/6] datapath-windows: Support for
OVS_ACTION_ATTR_HASH attribute
>Signed-off-by: Sorin Vinturis <svinturis at cloudbasesolutions.com>
>Acked-by: Sairam Venugopal <vsairam at vmware.com>
>---
> datapath-windows/ovsext/Actions.c | 32
>++++++++++++++++++++++++++++++++
> datapath-windows/ovsext/DpInternal.h | 1 +
> datapath-windows/ovsext/Flow.c | 13 +++++++++++++
> 3 files changed, 46 insertions(+)
>
>diff --git a/datapath-windows/ovsext/Actions.c
>b/datapath-windows/ovsext/Actions.c
>index 333d487..dc94022 100644
>--- a/datapath-windows/ovsext/Actions.c
>+++ b/datapath-windows/ovsext/Actions.c
>@@ -21,6 +21,7 @@
> #include "Event.h"
> #include "Flow.h"
> #include "Gre.h"
>+#include "Jhash.h"
> #include "Mpls.h"
> #include "NetProto.h"
> #include "Offload.h"
>@@ -1572,6 +1573,21 @@ OvsActionExecuteRecirc(OvsFlowKey *key,
> return NDIS_STATUS_SUCCESS;
> }
>
>+VOID
>+OvsActionExecuteHash(OvsFlowKey *key,
>+ const PNL_ATTR attr)
OvsExecuteHash() would be better name I think.
>+{
>+ struct ovs_action_hash *hash_act = NlAttrData(attr);
>+ UINT32 hash = 0;
>+
>+ hash = (UINT32)OvsHashFlow(key);
>+ hash = OvsJhashWords(&hash, 1, hash_act->hash_basis);
>+ if (!hash)
>+ hash = 1;
>+
>+ key->dpHash = hash;
>+}
>+
> /*
> *
>--------------------------------------------------------------------------
> * OvsDoExecuteActions --
>@@ -1749,6 +1765,22 @@ OvsDoExecuteActions(POVS_SWITCH_CONTEXT
>switchContext,
> break;
> }
>
>+ case OVS_ACTION_ATTR_HASH:
>+ {
>+ if (ovsFwdCtx.destPortsSizeOut > 0 || ovsFwdCtx.tunnelTxNic
>!= NULL
>+ || ovsFwdCtx.tunnelRxNic != NULL) {
>+ status = OvsOutputBeforeSetAction(&ovsFwdCtx);
>+ if (status != NDIS_STATUS_SUCCESS) {
>+ dropReason = L"OVS-adding destination failed";
>+ goto dropit;
>+ }
>+ }
>+
>+ OvsActionExecuteHash(key, (const PNL_ATTR)a);
>+
>+ break;
>+ }
>+
> case OVS_ACTION_ATTR_RECIRC:
> {
> if (ovsFwdCtx.destPortsSizeOut > 0 || ovsFwdCtx.tunnelTxNic
>!= NULL
>diff --git a/datapath-windows/ovsext/DpInternal.h
>b/datapath-windows/ovsext/DpInternal.h
>index 845c132..612ff7b 100644
>--- a/datapath-windows/ovsext/DpInternal.h
>+++ b/datapath-windows/ovsext/DpInternal.h
>@@ -166,6 +166,7 @@ typedef __declspec(align(8)) struct OvsFlowKey {
> MplsKey mplsKey; /* size 8 */
> };
> UINT32 recircId; /* Recirculation ID. */
>+ UINT32 dpHash; /* Datapath calculated hash value. */
> } OvsFlowKey;
>
> #define OVS_WIN_TUNNEL_KEY_SIZE (sizeof (OvsIPv4TunnelKey))
>diff --git a/datapath-windows/ovsext/Flow.c
>b/datapath-windows/ovsext/Flow.c
>index 555d6b2..5625d01 100644
>--- a/datapath-windows/ovsext/Flow.c
>+++ b/datapath-windows/ovsext/Flow.c
>@@ -830,6 +830,14 @@ MapFlowKeyToNlKey(PNL_BUFFER nlBuf,
> goto done;
> }
>
>+ if (flowKey->dpHash) {
>+ if (!NlMsgPutTailU32(nlBuf, OVS_KEY_ATTR_DP_HASH,
>+ flowKey->dpHash)) {
>+ rc = STATUS_UNSUCCESSFUL;
>+ goto done;
>+ }
>+ }
>+
> /* Ethernet header */
> RtlCopyMemory(&(ethKey.eth_src), flowKey->l2.dlSrc, ETH_ADDR_LEN);
> RtlCopyMemory(&(ethKey.eth_dst), flowKey->l2.dlDst, ETH_ADDR_LEN);
>@@ -1356,6 +1364,10 @@ _MapKeyAttrToFlowPut(PNL_ATTR *keyAttrs,
> destKey->recircId =
>NlAttrGetU32(keyAttrs[OVS_KEY_ATTR_RECIRC_ID]);
> }
>
>+ if (keyAttrs[OVS_KEY_ATTR_DP_HASH]) {
>+ destKey->dpHash = NlAttrGetU32(keyAttrs[OVS_KEY_ATTR_DP_HASH]);
>+ }
>+
> /* ===== L2 headers ===== */
> destKey->l2.inPort = NlAttrGetU32(keyAttrs[OVS_KEY_ATTR_IN_PORT]);
>
>@@ -2292,6 +2304,7 @@ ReportFlowInfo(OvsFlow *flow,
> }
>
> info->key.recircId = flow->key.recircId;
>+ info->key.dpHash = flow->key.dpHash;
>
> return status;
> }
>--
>1.9.0.msysgit.0
>_______________________________________________
>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=Bhg9sDtKIkBoffL3BFZxugnQcDF6It
>j3PVJoBamO9R0&s=7JQkv65eD-wsZlCjefnV3oIyYL-lNA5hUDySp9i658I&e=
More information about the dev
mailing list