Acked-by: Sairam Venugopal <vsai...@vmware.com>


On 3/3/16, 12:51 AM, "Nithin Raju" <nit...@vmware.com> wrote:

>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 <nit...@vmware.com>
>---
> 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);
>-- 
>2.6.2
>
>_______________________________________________
>dev mailing list
>dev@openvswitch.org
>https://urldefense.proofpoint.com/v2/url?u=http-3A__openvswitch.org_mailma
>n_listinfo_dev&d=BQIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=Dc
>ruz40PROJ40ROzSpxyQSLw6fcrOWpJgEcEmNR3JEQ&m=uP8XA9CichccgQAFi2F0J46OoUxEne
>Gfn3OJFwYQiTQ&s=dqRv8YX_Qsg2fAdcel5qU_zdJ2AtYwY-gn0oG5a9JEY&e= 

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to