From patchwork Tue Feb 4 05:03:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "Kumar, Rohit via dev" X-Patchwork-Id: 1233151 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.133; helo=hemlock.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=openvswitch.org Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=vmware.com header.i=@vmware.com header.a=rsa-sha256 header.s=selector2 header.b=iB+vpXh4; dkim-atps=neutral Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 48BZhy6SFkzB3tj for ; Tue, 4 Feb 2020 17:36:18 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id 876D786D85; Tue, 4 Feb 2020 06:36:16 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id kl0UKRASOgF5; Tue, 4 Feb 2020 06:36:11 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by hemlock.osuosl.org (Postfix) with ESMTP id 6FDB48546F; Tue, 4 Feb 2020 06:36:11 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 517C3C1D81; Tue, 4 Feb 2020 06:36:11 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id E5B8EC0174 for ; Tue, 4 Feb 2020 06:36:09 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id D7318203F1 for ; Tue, 4 Feb 2020 06:36:09 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 05k88SBeR8k4 for ; Tue, 4 Feb 2020 06:36:08 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2080.outbound.protection.outlook.com [40.107.223.80]) by silver.osuosl.org (Postfix) with ESMTPS id 1A383203C9 for ; Tue, 4 Feb 2020 06:36:08 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LMgOfhsTRtabsvWJ9qRelYPuahe4AXt+rrsjmacyhm4e1ZTUTUA54gz95WgELbV4M+4z4abQbwptLgnNB3Q6G3rZdMVkGVW57UhvYq4sPShJW9fO4uYtUM3zyaU0pYUhMDLwWCJPFQVhKKdetlZGGBI6eoDwpixEDwWQEDliMy3fYQxCUoiIFH9/O17USjMCxG8+7LG9z1MBLLfXDNSOwwbFMAblJY9X7IrdvGzKtvYoRbNeFU1bGceCsL/jrICdR5BpHB4Tic4fgNyiQ6x0mKXR8PbX6ix7H6+OFxoB587nJ1pH2R2esyT6RLPtE6Wn/Q50he9z8ZNMbfHWFl1w9g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8s22EOF5bby+kdKZqvVLi3Ph60alDS0M1fCHufdivUs=; b=iBClQp64EkYyeh/WDd/LaJ/7O7RpM9lLzBhFTlaFi09VQCfAqDntEMUaqboKxB3mtG6Qzl+cNeQ2tUr3K9P83BEG23gc1YX3N4MDzFQv3HbfiasyVObPDVbJ97+2hXdllG/+wCJqSeavL8Wf9Qw/MYFhtTYaxm5lUw7nd8XKkN9kuvxJuZOrZfxQTy7R3KzEvai+zlLJ+/EocVnHBQi+ksEr+Ya3mp3XOrEB6nM2uQP6J//oNmpB7jIqWPY5ItO0Zdp2Ak8zNt3CP3Ty98CmVJRKttFoHee5x3P0Xy+j3xJ5oXvjUdcNvUM5tuM0GdOSAs3CdwH6UTZ3CRt2T7w9rQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=vmware.com; dmarc=pass action=none header.from=vmware.com; dkim=pass header.d=vmware.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vmware.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8s22EOF5bby+kdKZqvVLi3Ph60alDS0M1fCHufdivUs=; b=iB+vpXh45zyCDFcjfD5ONje1z6vezsM5IfXM08IErlWQ4M0uUpmD8x1iFxiRZU/N4850zZpTEaj0BfnUrDJWYu8ZKoxyci9H0LCAFn67Gu9JrtyQHZ1rD+jbOSJRQHZOxl7dIwRwB9eIDwL1GYOan1X+6LI2Q8PcgUBjxXm3/sY= Received: from BYAPR05MB5461.namprd05.prod.outlook.com (20.177.185.142) by BYAPR05MB4791.namprd05.prod.outlook.com (52.135.235.89) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.19; Tue, 4 Feb 2020 05:03:03 +0000 Received: from BYAPR05MB5461.namprd05.prod.outlook.com ([fe80::4c74:3042:bc2a:49c9]) by BYAPR05MB5461.namprd05.prod.outlook.com ([fe80::4c74:3042:bc2a:49c9%3]) with mapi id 15.20.2707.016; Tue, 4 Feb 2020 05:03:03 +0000 To: Alin Serdean , "dev@openvswitch.org" Thread-Topic: [patch v3] datapath-windows: Append tunnel info to upcall for correct template Thread-Index: AQHV2xhhKoLG2loZj06dF6dhiGrucg== Date: Tue, 4 Feb 2020 05:03:03 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=qhu@vmware.com; x-originating-ip: [112.227.128.136] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 5cf5fb2e-8dc9-407f-0c53-08d7a92f83c9 x-ms-traffictypediagnostic: BYAPR05MB4791:|BYAPR05MB4791: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-forefront-prvs: 03030B9493 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(136003)(39860400002)(366004)(396003)(376002)(346002)(189003)(199004)(6486002)(478600001)(71200400001)(53546011)(6506007)(2906002)(2616005)(54906003)(33656002)(36756003)(76116006)(91956017)(186003)(110136005)(66946007)(66556008)(66446008)(64756008)(66476007)(316002)(4326008)(8936002)(81156014)(81166006)(8676002)(6512007)(5660300002)(86362001)(107886003)(26005)(21314003); DIR:OUT; SFP:1101; SCL:1; SRVR:BYAPR05MB4791; H:BYAPR05MB5461.namprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: vmware.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: nA3ay124MLeJJU+qZU1AAM/gAdzqm1zZVXdzFTSXiq/SyKY2DBeBw8eT9DYwwBuqg3TpYEBAhF3XNahsnjM/pdSPctuaErtXo4z2cWG43kAFQ4qs6XDRTOd+n8yKWmWzvhmIbhjlhR+e25edRwYEWWRZaHsAJ3oWjNXz8QDSx6JaOKoK+uILzk6b7muPoDbNqX3tkT16GKwa8B9BJ3DDhse62nhFemKEahd2vQ1jQUYyyDfPQ/2A+fEEPVs6cAyazBuM78gRm/KWFTiAZF+v8wufrQqcxYEP5574XScXPmXZkeVxbpBYyjrUzeRaNHPY5CxNWv7puPHX7matiW9OXlrbtk+HLt3KiDOqM+ADdRPnCg/E8agweMaNtCJ6hPpBgAlxX7E+BlKzjkSL4CqCtsiw3jfjmDms2bP9wpDkwy/EswsyzE609kKwR5CdqOs9dUOl9jAcEjdfvFqU6EM6pqX6d+nsWxME8wubqgLiJ/ruxmYzZnIXLUi1HSVIjsaR x-ms-exchange-antispam-messagedata: 2c8UmDt/5jAf/16X0AbUNiNo/MkQFtNZlqO2GKi5rafO/eqUu6B9k7hImDjNxewhpckxuFER0z7+jmKa7HKz8Mlrt4ac0CZLqqjhnnXXEkuG0reJn5aUS4vZr/W5iMbiySBVc42hGHKFtjwwGr/uUQ== Content-ID: <651C75ABACCD4E45A766735B37A0C0AE@namprd05.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: vmware.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5cf5fb2e-8dc9-407f-0c53-08d7a92f83c9 X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Feb 2020 05:03:03.3653 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b39138ca-3cee-4b4a-a4d6-cd83d9dd62f0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: CwC2AkkOighLgZ1tD/tda5eTT+1Mi7LCK3rdkhR6X3X2MA5QWFCej/sf+vXvOn3y X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR05MB4791 Cc: Qiong Wang , Jinjun Gao Subject: [ovs-dev] [patch v3] datapath-windows: Append tunnel info to upcall for correct template X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Amber Hu via dev From: "Kumar, Rohit via dev" Reply-To: Amber Hu Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" Formerly, there is no tunnel information appended in the upcall’s packet data, which is expected by IPFIX in userspace to calculate the template for exporting the sampled flow record of on egress tunnel port. To fix this, during performing OvsOutputUserspaceAction(), we would check whether it is initiated by the sampling on egress tunnel which would be indicated by the attribute as OVS_USERSPACE_ATTR_EGRESS_TUN_PORT in the nested attribute list. If so, we would append the tunKey in OvsForwardingContext indexed by OVS_PACKET_ATTR_EGRESS_TUN_KEY to the upcall. Besides, at this point, the source transport port and source ip address are not available in the structure, so we have to fill it in the way how the packet would be capsulated during performing OvsEncapGeneve(), which is following the OvsOutputUserspaceAction() unfortunately. I have tested the IPFIX functionality with the change, we could see the template is correct and the expected tunnel information could be packed in the IPFIX packet finally. The traffic for test is generated by PING utility. From d727d051c9a44a4a93e5ee5f3da3ca9b125aad29 Mon Sep 17 00:00:00 2001 From: Amber Hu Date: Thu, 30 Jan 2020 18:01:32 -0800 Subject: [PATCH v3] datapath-windows: Append tunnel info to upcall for correct template Signed-off-by: Amber Hu Acked-by: Alin Gabriel Serdean --- datapath-windows/ovsext/Actions.c | 24 +++++++++++++++++++++--- datapath-windows/ovsext/Flow.c | 12 ++++++++++++ datapath-windows/ovsext/Tunnel.c | 2 +- datapath-windows/ovsext/User.c | 12 +++++++++--- datapath-windows/ovsext/User.h | 1 + 5 files changed, 44 insertions(+), 7 deletions(-) diff --git a/datapath-windows/ovsext/Actions.c b/datapath-windows/ovsext/Actions.c index 5c9b5c3..4a11cea 100644 --- a/datapath-windows/ovsext/Actions.c +++ b/datapath-windows/ovsext/Actions.c @@ -1815,10 +1815,12 @@ OvsOutputUserspaceAction(OvsForwardingContext *ovsFwdCtx, { NTSTATUS status = NDIS_STATUS_SUCCESS; PNL_ATTR userdataAttr; - PNL_ATTR queueAttr; + PNL_ATTR egrTunAttr = NULL; POVS_PACKET_QUEUE_ELEM elem; POVS_PACKET_HDR_INFO layers = &ovsFwdCtx->layers; BOOLEAN isRecv = FALSE; + OVS_FWD_INFO fwdInfo; + OvsIPv4TunnelKey tunKey; POVS_VPORT_ENTRY vport = OvsFindVportByPortNo(ovsFwdCtx->switchContext, ovsFwdCtx->srcVportNo); @@ -1830,13 +1832,29 @@ OvsOutputUserspaceAction(OvsForwardingContext *ovsFwdCtx, } } - queueAttr = NlAttrFindNested(attr, OVS_USERSPACE_ATTR_PID); userdataAttr = NlAttrFindNested(attr, OVS_USERSPACE_ATTR_USERDATA); + /* Indicate the packet is from egress-tunnel direction */ + egrTunAttr = NlAttrFindNested(attr, OVS_USERSPACE_ATTR_EGRESS_TUN_PORT); + + /* Fill tunnel key to export to usersspace to calculate the template id */ + if (egrTunAttr) { + RtlZeroMemory(&tunKey, sizeof tunKey); + 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; + } elem = OvsCreateQueueNlPacket(NlAttrData(userdataAttr), NlAttrGetSize(userdataAttr), OVS_PACKET_CMD_ACTION, - vport, key, ovsFwdCtx->curNbl, + vport, key, + egrTunAttr ? &(tunKey) : NULL, + 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/Tunnel.c b/datapath-windows/ovsext/Tunnel.c index ad2c254..5d1be80 100644 --- a/datapath-windows/ovsext/Tunnel.c +++ b/datapath-windows/ovsext/Tunnel.c @@ -308,7 +308,7 @@ OvsInjectPacketThroughActions(PNET_BUFFER_LIST pNbl, datapath->misses++; elem = OvsCreateQueueNlPacket(NULL, 0, OVS_PACKET_CMD_MISS, - vport, &key, pNbl, curNb, + vport, &key, NULL, pNbl, curNb, TRUE, &layers); if (elem) { /* Complete the packet since it was copied to user buffer. */ diff --git a/datapath-windows/ovsext/User.c b/datapath-windows/ovsext/User.c index ed1fcbe..ee0e38d 100644 --- a/datapath-windows/ovsext/User.c +++ b/datapath-windows/ovsext/User.c @@ -830,7 +830,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); @@ -1013,6 +1013,7 @@ OvsCreateQueueNlPacket(PVOID userData, UINT32 cmd, POVS_VPORT_ENTRY vport, OvsFlowKey *key, + OvsIPv4TunnelKey *tunnelKey, PNET_BUFFER_LIST nbl, PNET_BUFFER nb, BOOLEAN isRecv, @@ -1025,7 +1026,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; @@ -1127,7 +1127,13 @@ OvsCreateQueueNlPacket(PVOID userData, } } - /* XXX must send OVS_PACKET_ATTR_EGRESS_TUN_KEY if set by vswtchd */ + /* Set OVS_PACKET_ATTR_EGRESS_TUN_KEY attribute */ + 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,