From patchwork Thu Mar 3 08:51:11 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nithin Raju X-Patchwork-Id: 591342 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from archives.nicira.com (archives.nicira.com [96.126.127.54]) by ozlabs.org (Postfix) with ESMTP id AF91A140134 for ; Thu, 3 Mar 2016 19:51:20 +1100 (AEDT) Received: from archives.nicira.com (localhost [127.0.0.1]) by archives.nicira.com (Postfix) with ESMTP id 18A2710938; Thu, 3 Mar 2016 00:51:19 -0800 (PST) X-Original-To: dev@openvswitch.org Delivered-To: dev@openvswitch.org Received: from mx3v3.cudamail.com (mx3.cudamail.com [64.34.241.5]) by archives.nicira.com (Postfix) with ESMTPS id 8E66510927 for ; Thu, 3 Mar 2016 00:51:18 -0800 (PST) Received: from bar6.cudamail.com (localhost [127.0.0.1]) by mx3v3.cudamail.com (Postfix) with ESMTPS id A3CE01617F9 for ; Thu, 3 Mar 2016 01:51:17 -0700 (MST) X-ASG-Debug-ID: 1456995077-0b32372d793729d0001-byXFYA Received: from mx1-pf2.cudamail.com ([192.168.24.2]) by bar6.cudamail.com with ESMTP id pArtASMUp8E1mV5o (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Thu, 03 Mar 2016 01:51:17 -0700 (MST) X-Barracuda-Envelope-From: nithin@vmware.com X-Barracuda-RBL-Trusted-Forwarder: 192.168.24.2 Received: from unknown (HELO smtp-outbound-1.vmware.com) (208.91.2.12) by mx1-pf2.cudamail.com with ESMTPS (DHE-RSA-AES256-SHA encrypted); 3 Mar 2016 08:51:16 -0000 Received-SPF: error (mx1-pf2.cudamail.com: error in processing during lookup of vmware.com: DNS problem) X-Barracuda-Apparent-Source-IP: 208.91.2.12 X-Barracuda-RBL-IP: 208.91.2.12 Received: from sc9-mailhost3.vmware.com (sc9-mailhost3.vmware.com [10.113.161.73]) by smtp-outbound-1.vmware.com (Postfix) with ESMTP id 1C72528EA6 for ; Thu, 3 Mar 2016 00:51:13 -0800 (PST) Received: from pa-dbc1118.eng.vmware.com (unknown [10.162.210.18]) by sc9-mailhost3.vmware.com (Postfix) with ESMTP id 5AAEC40B34; Thu, 3 Mar 2016 00:51:13 -0800 (PST) X-CudaMail-Envelope-Sender: nithin@vmware.com From: Nithin Raju To: dev@openvswitch.org X-CudaMail-Whitelist-To: dev@openvswitch.org X-CudaMail-MID: CM-E2-302003323 X-CudaMail-DTE: 030316 X-CudaMail-Originating-IP: 208.91.2.12 Date: Thu, 3 Mar 2016 00:51:11 -0800 X-ASG-Orig-Subj: [##CM-E2-302003323##][PATCH] datapath-windows: Fix a couple of bugs during port enumeration Message-Id: <1456995071-54996-1-git-send-email-nithin@vmware.com> X-Mailer: git-send-email 2.6.2 X-Barracuda-Connect: UNKNOWN[192.168.24.2] X-Barracuda-Start-Time: 1456995077 X-Barracuda-Encrypted: DHE-RSA-AES256-SHA X-Barracuda-URL: https://web.cudamail.com:443/cgi-mod/mark.cgi X-ASG-Whitelist: Header =?UTF-8?B?eFwtY3VkYW1haWxcLXdoaXRlbGlzdFwtdG8=?= X-Virus-Scanned: by bsmtpd at cudamail.com X-Barracuda-BRTS-Status: 1 X-ASG-Whitelist: EmailCat (corporate) Subject: [ovs-dev] [PATCH] datapath-windows: Fix a couple of bugs during port enumeration X-BeenThere: dev@openvswitch.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dev-bounces@openvswitch.org Sender: "dev" While enumerating the ports on a switch, if adding one of the ports fails, we are not handling that error gracefully. Instead, we fail adding of all the ports. This patch rectifies that. Signed-off-by: Nithin Raju Acked-by: Sairam Venugopal --- datapath-windows/ovsext/Vport.c | 41 +++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/datapath-windows/ovsext/Vport.c b/datapath-windows/ovsext/Vport.c index 7b0103d..a991d10 100644 --- a/datapath-windows/ovsext/Vport.c +++ b/datapath-windows/ovsext/Vport.c @@ -125,7 +125,7 @@ HvCreatePort(POVS_SWITCH_CONTEXT switchContext, if (vport != NULL) { OVS_LOG_ERROR("Port add failed due to duplicate port name, " "port Id: %u", portParam->PortId); - status = STATUS_DATA_NOT_ACCEPTED; + status = NDIS_STATUS_DATA_NOT_ACCEPTED; goto create_port_done; } @@ -140,7 +140,7 @@ HvCreatePort(POVS_SWITCH_CONTEXT switchContext, OVS_LOG_ERROR("Port add failed since a port already exists on " "the specified port Id: %u, ovsName: %s", portParam->PortId, vport->ovsName); - status = STATUS_DATA_NOT_ACCEPTED; + status = NDIS_STATUS_DATA_NOT_ACCEPTED; goto create_port_done; } @@ -157,7 +157,7 @@ HvCreatePort(POVS_SWITCH_CONTEXT switchContext, OVS_LOG_INFO("Port add failed due to PortType change, port Id: %u" " old: %u, new: %u", portParam->PortId, vport->portType, portParam->PortType); - status = STATUS_DATA_NOT_ACCEPTED; + status = NDIS_STATUS_DATA_NOT_ACCEPTED; goto create_port_done; } vport->isAbsentOnHv = FALSE; @@ -365,7 +365,7 @@ HvCreateNic(POVS_SWITCH_CONTEXT switchContext, OVS_LOG_ERROR("Create NIC without Switch Port," " PortId: %x, NicIndex: %d", nicParam->PortId, nicParam->NicIndex); - status = NDIS_STATUS_INVALID_PARAMETER; + status = NDIS_STATUS_ADAPTER_NOT_FOUND; goto add_nic_done; } OvsInitVportWithNicParam(switchContext, vport, nicParam); @@ -1393,6 +1393,7 @@ OvsAddConfiguredSwitchPorts(POVS_SWITCH_CONTEXT switchContext) ULONG arrIndex; PNDIS_SWITCH_PORT_PARAMETERS portParam; PNDIS_SWITCH_PORT_ARRAY portArray = NULL; + BOOLEAN portAdded = FALSE; OVS_LOG_TRACE("Enter: switchContext:%p", switchContext); @@ -1402,16 +1403,24 @@ OvsAddConfiguredSwitchPorts(POVS_SWITCH_CONTEXT switchContext) } for (arrIndex = 0; arrIndex < portArray->NumElements; arrIndex++) { - portParam = NDIS_SWITCH_PORT_AT_ARRAY_INDEX(portArray, arrIndex); + portParam = NDIS_SWITCH_PORT_AT_ARRAY_INDEX(portArray, arrIndex); - if (portParam->IsValidationPort) { - continue; - } + if (portParam->IsValidationPort) { + continue; + } - status = HvCreatePort(switchContext, portParam, 0); - if (status != STATUS_SUCCESS && status != STATUS_DATA_NOT_ACCEPTED) { - break; - } + status = HvCreatePort(switchContext, portParam, 0); + if (status == NDIS_STATUS_SUCCESS) { + portAdded = TRUE; + } else if (status != NDIS_STATUS_DATA_NOT_ACCEPTED) { + /* Any other error. */ + break; + } + } + + /* If at least one port was added, return success. */ + if (status != NDIS_STATUS_SUCCESS && portAdded == TRUE) { + status = NDIS_STATUS_SUCCESS; } cleanup: @@ -1438,6 +1447,7 @@ OvsInitConfiguredSwitchNics(POVS_SWITCH_CONTEXT switchContext) PNDIS_SWITCH_NIC_ARRAY nicArray = NULL; ULONG arrIndex; PNDIS_SWITCH_NIC_PARAMETERS nicParam; + BOOLEAN nicAdded = FALSE; OVS_LOG_TRACE("Enter: switchContext: %p", switchContext); /* @@ -1459,9 +1469,16 @@ OvsInitConfiguredSwitchNics(POVS_SWITCH_CONTEXT switchContext) status = HvCreateNic(switchContext, nicParam); if (status == NDIS_STATUS_SUCCESS) { + nicAdded = TRUE; HvConnectNic(switchContext, nicParam); } } + + /* If at least one NIC was added, return success. */ + if (status != NDIS_STATUS_SUCCESS && nicAdded == TRUE) { + status = NDIS_STATUS_SUCCESS; + } + cleanup: OvsFreeSwitchNicsArray(nicArray);