[ovs-dev] [patch] datapath-windows: Append tunnel info to upcall for correct template
Alin Serdean
aserdean at cloudbasesolutions.com
Wed Jan 22 04:42:57 UTC 2020
Hi Amber,
The patch fails to apply:
"error: corrupt patch at line 198"
Please rebase on master.
Trimming the patch a bit and comments inlined.
> -----Original Message-----
> From: Amber Hu <qhu at vmware.com>
> Sent: Tuesday, January 14, 2020 7:50 AM
> To: dev at openvswitch.org; Alin Serdean <aserdean at cloudbasesolutions.com>
> Cc: Qiong Wang <wqiong at vmware.com>; Wenyu Zhang
> <wenyuz at vmware.com>; Jinjun Gao <jinjung at vmware.com>
> Subject: [patch] datapath-windows: Append tunnel info to upcall for correct
> template
>
> diff --git a/datapath-windows/ovsext/Actions.c b/datapath-
> windows/ovsext/Actions.c
>
> index 0c4d64b..936e68b 100644
>
> --- a/datapath-windows/ovsext/Actions.c
>
> +++ b/datapath-windows/ovsext/Actions.c
>
> @@ -1839,11 +1839,16 @@ OvsOutputUserspaceAction(OvsForwardingContext
> *ovsFwdCtx,
>
> const PNL_ATTR attr)
>
> {
>
> NTSTATUS status = NDIS_STATUS_SUCCESS;
>
> - PNL_ATTR userdataAttr;
>
> - PNL_ATTR queueAttr;
[Alin Serdean] queueAttr can be safely removed since it's not actually used.
>
> + PNL_ATTR userdataAttr = NULL;
>
> + PNL_ATTR queueAttr = NULL;
>
> + PNL_ATTR egrTunAttr = NULL;
>
> + PNL_ATTR a = NULL;
[Alin Serdean] Not sure why did is needed. NlAttrFindNested does the safe version
of NL_ATTR_FOR_EACH_UNSAFE. Any reason to change it?
>
> POVS_PACKET_QUEUE_ELEM elem;
>
> POVS_PACKET_HDR_INFO layers = &ovsFwdCtx->layers;
>
> BOOLEAN isRecv = FALSE;
>
> + INT rem = 0;
>
> + OVS_FWD_INFO fwdInfo;
>
> + OvsIPv4TunnelKey tunKey;
>
> POVS_VPORT_ENTRY vport = OvsFindVportByPortNo(ovsFwdCtx-
> >switchContext,
>
> ovsFwdCtx->srcVportNo);
>
> @@ -1855,13 +1860,41 @@ OvsOutputUserspaceAction(OvsForwardingContext
> *ovsFwdCtx,
>
> }
>
> }
>
> - queueAttr = NlAttrFindNested(attr, OVS_USERSPACE_ATTR_PID);
>
> - userdataAttr = NlAttrFindNested(attr, OVS_USERSPACE_ATTR_USERDATA);
>
> + NL_ATTR_FOR_EACH_UNSAFE(a, rem, NlAttrData(attr), NlAttrGetSize(attr)) {
[Alin Serdean] NlAttrFindNested does the safe version of NL_ATTR_FOR_EACH_UNSAFE.
Any reason to change it?
>
> + switch (NlAttrType(a)) {
>
> + case OVS_USERSPACE_ATTR_PID:
>
> + queueAttr = a;
>
> + break;
>
> + case OVS_USERSPACE_ATTR_USERDATA:
>
> + userdataAttr = a;
>
> + break;
>
> + case OVS_USERSPACE_ATTR_EGRESS_TUN_PORT:
>
> + /* Indicate the packet is from egress tunnel port */
>
> + egrTunAttr = a;
>
> + break;
>
> + default:
>
> + break;
>
> + }
>
> + }
>
> +
>
> + /* Fill tunnel key to export to usersspace to calculate the template id */
>
> + if (egrTunAttr) {
>
[Alin Serdean] It would be safer to zero out tunKey before this.
> + RtlCopyMemory(&tunKey, &ovsFwdCtx->tunKey, sizeof tunKey);
>
> + if (!tunKey.src) {
>
> + status = OvsLookupIPFwdInfo(tunKey.src, tunKey.dst, &fwdInfo);
>
> + if (status == NDIS_STATUS_SUCCESS && tunKey.dst ==
> fwdInfo.dstIpAddr) {
>
> + tunKey.src = fwdInfo.srcIpAddr;
>
> + }
>
> + }
>
> + tunKey.flow_hash = tunKey.flow_hash?tunKey.flow_hash:MAXINT16;
[Alin Serdean] Missing a whitespace before and after '?'
>
> + }
>
> elem = OvsCreateQueueNlPacket(NlAttrData(userdataAttr),
>
> NlAttrGetSize(userdataAttr),
>
> OVS_PACKET_CMD_ACTION,
>
> - vport, key, ovsFwdCtx->curNbl,
>
> + vport, key,
>
> + egrTunAttr?&(tunKey):NULL,
[Alin Serdean] Missing whitespace before and after '?'
>
> + ovsFwdCtx->curNbl,
>
> NET_BUFFER_LIST_FIRST_NB(ovsFwdCtx->curNbl),
>
> isRecv,
>
> layers);
>
> diff --git a/datapath-windows/ovsext/Flow.c b/datapath-
> windows/ovsext/Flow.c
>
> index fdb1010..ac0582c 100644
>
> --- a/datapath-windows/ovsext/Flow.c
>
> +++ b/datapath-windows/ovsext/Flow.c
>
> @@ -1094,6 +1094,18 @@ MapFlowTunKeyToNlKey(PNL_BUFFER nlBuf,
>
> goto done;
>
> }
>
> + if (!NlMsgPutTailU16(nlBuf, OVS_TUNNEL_KEY_ATTR_TP_SRC,
>
> + tunKey->flow_hash)) {
>
> + rc = STATUS_UNSUCCESSFUL;
>
> + goto done;
>
> + }
>
> +
>
> + if (!NlMsgPutTailU16(nlBuf, OVS_TUNNEL_KEY_ATTR_TP_DST,
>
> + tunKey->dst_port)) {
>
> + rc = STATUS_UNSUCCESSFUL;
>
> + goto done;
>
> + }
>
> +
>
> done:
>
> NlMsgEndNested(nlBuf, offset);
>
> error_nested_start:
>
> diff --git a/datapath-windows/ovsext/User.c b/datapath-
> windows/ovsext/User.c
>
> index 16d6fd2..a1d05e1 100644
>
> --- a/datapath-windows/ovsext/User.c
>
> +++ b/datapath-windows/ovsext/User.c
>
> @@ -833,7 +833,7 @@ OvsCreateAndAddPackets(PVOID userData,
>
> nb = NET_BUFFER_LIST_FIRST_NB(nbl);
>
> while (nb) {
>
> elem = OvsCreateQueueNlPacket(userData, userDataLen,
>
> - cmd, vport, key, nbl, nb,
>
> + cmd, vport, key, NULL, nbl, nb,
>
> isRecv, hdrInfo);
>
> if (elem) {
>
> InsertTailList(list, &elem->link);
>
> @@ -1016,6 +1016,7 @@ OvsCreateQueueNlPacket(PVOID userData,
>
> UINT32 cmd,
>
> POVS_VPORT_ENTRY vport,
>
> OvsFlowKey *key,
>
> + OvsIPv4TunnelKey *tunnelKey,
>
> PNET_BUFFER_LIST nbl,
>
> PNET_BUFFER nb,
>
> BOOLEAN isRecv,
>
> @@ -1028,7 +1029,6 @@ OvsCreateQueueNlPacket(PVOID userData,
>
> NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO csumInfo;
>
> PNDIS_NET_BUFFER_LIST_8021Q_INFO vlanInfo = NULL;
>
> PVOID vlanTag;
>
> - OvsIPv4TunnelKey *tunnelKey = (OvsIPv4TunnelKey *)&key->tunKey;
>
> UINT32 pid;
>
> UINT32 nlMsgSize;
>
> NL_BUFFER nlBuf;
>
> @@ -1131,6 +1131,12 @@ OvsCreateQueueNlPacket(PVOID userData,
>
> }
>
[Alin Serdean] I guess this can be removed now 😊.
> /* XXX must send OVS_PACKET_ATTR_EGRESS_TUN_KEY if set by vswtchd */
>
> + if (tunnelKey) {
>
> + if (MapFlowTunKeyToNlKey(&nlBuf, tunnelKey,
>
> + OVS_PACKET_ATTR_EGRESS_TUN_KEY) != STATUS_SUCCESS)
> {
>
> + goto fail;
>
> + }
>
> + }
>
> if (userData){
>
> if (!NlMsgPutTailUnspec(&nlBuf, OVS_PACKET_ATTR_USERDATA,
>
> userData, (UINT16)userDataLen)) {
>
> diff --git a/datapath-windows/ovsext/User.h b/datapath-
> windows/ovsext/User.h
>
> index 3a42888..ccca0ba 100644
>
> --- a/datapath-windows/ovsext/User.h
>
> +++ b/datapath-windows/ovsext/User.h
>
> @@ -75,6 +75,7 @@ POVS_PACKET_QUEUE_ELEM
> OvsCreateQueueNlPacket(PVOID userData,
>
> UINT32 cmd,
>
> POVS_VPORT_ENTRY vport,
>
> OvsFlowKey *key,
>
> + OvsIPv4TunnelKey *tunnelKey,
>
> PNET_BUFFER_LIST nbl,
>
> PNET_BUFFER nb,
>
> BOOLEAN isRecv,
>
> --
>
> 2.6.2
>
>
>
> BR/Amber
More information about the dev
mailing list