Yes, the dpHash is only used for reporting purposes. -----Original Message----- From: Nithin Raju [mailto:nit...@vmware.com] Sent: Tuesday, 22 March, 2016 08:29 To: Sorin Vinturis; dev@openvswitch.org Subject: Re: [ovs-dev] [PATCH v6 4/6] datapath-windows: Support for OVS_ACTION_ATTR_HASH attribute
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-boun...@openvswitch.org> on behalf of Sorin Vinturis <svintu...@cloudbasesolutions.com> Date: Friday, March 18, 2016 at 7:58 AM To: "dev@openvswitch.org" <dev@openvswitch.org> Subject: [ovs-dev] [PATCH v6 4/6] datapath-windows: Support for OVS_ACTION_ATTR_HASH attribute >Signed-off-by: Sorin Vinturis <svintu...@cloudbasesolutions.com> >Acked-by: Sairam Venugopal <vsai...@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@openvswitch.org >https://urldefense.proofpoint.com/v2/url?u=http-3A__openvswitch.org_mai >lma >n_listinfo_dev&d=BQIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r >=pN >HQcdr7B40b4h6Yb7FIedI1dnBsxdDuTLBYD3JqV80&m=Bhg9sDtKIkBoffL3BFZxugnQcDF >6It j3PVJoBamO9R0&s=7JQkv65eD-wsZlCjefnV3oIyYL-lNA5hUDySp9i658I&e= _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev