[ovs-dev] [PATCH v3] datapath-windows: Update port property

Eitan Eliahu eliahue at vmware.com
Wed Nov 12 09:31:27 UTC 2014


Update Hyper-V port properties on NDIS property port set callback.
Driver update the port friendly name in its internal table.
Since the NIC Create callback won't be called after we need to maintain the
NIC and THE OVS states of the Vport.

Setting a new friendly name was tested in the following states:
[1] The port is disconnected
[2] The port is connected but not OVS user mode counter port
[3] The port is connected and an OCS port associated with it

Signed-off-by: Eitan Eliahu <eliahue at vmware.com>
---
 datapath-windows/ovsext/Oid.c   |  3 +++
 datapath-windows/ovsext/Vport.c | 57 +++++++++++++++++++++++++++++++++++++++++
 datapath-windows/ovsext/Vport.h |  2 ++
 3 files changed, 62 insertions(+)

diff --git a/datapath-windows/ovsext/Oid.c b/datapath-windows/ovsext/Oid.c
index 9659af7..83fa1e3 100644
--- a/datapath-windows/ovsext/Oid.c
+++ b/datapath-windows/ovsext/Oid.c
@@ -171,6 +171,9 @@ OvsProcessSetOidPort(POVS_SWITCH_CONTEXT switchObject,
     case OID_SWITCH_PORT_CREATE:
         status = HvCreatePort(switchObject, portParam);
         break;
+    case OID_SWITCH_PORT_UPDATED:
+        status = HvUpdatePort(switchObject, portParam);
+       break;
     case OID_SWITCH_PORT_TEARDOWN:
         HvTeardownPort(switchObject, portParam);
         break;
diff --git a/datapath-windows/ovsext/Vport.c b/datapath-windows/ovsext/Vport.c
index a46d49f..68755b9 100644
--- a/datapath-windows/ovsext/Vport.c
+++ b/datapath-windows/ovsext/Vport.c
@@ -102,6 +102,63 @@ create_port_done:
     return status;
 }
 
+
+/*
+ * Function updating the port properties
+ */
+NDIS_STATUS
+HvUpdatePort(POVS_SWITCH_CONTEXT switchContext,
+             PNDIS_SWITCH_PORT_PARAMETERS portParam)
+{
+    POVS_VPORT_ENTRY vport;
+    LOCK_STATE_EX lockState;
+    OVS_VPORT_STATE ovsState;
+    NDIS_SWITCH_NIC_STATE nicState;
+
+    VPORT_PORT_ENTER(portParam);
+
+    NdisAcquireRWLockWrite(switchContext->dispatchLock, &lockState, 0);
+    vport = OvsFindVportByPortIdAndNicIndex(switchContext,
+                                            portParam->PortId, 0);
+    /*
+     * Update properties only for NETDEV ports for supprting PS script
+     * We don't allow changing the names of the internal or external ports
+     */
+    if (vport == NULL || ( vport->portType != NdisSwitchPortTypeSynthetic) || 
+        ( vport->portType != NdisSwitchPortTypeEmulated)) {
+        goto update_port_done;
+    }
+
+    /* Store the nic and the OVS states as Nic Create won't be called */
+    ovsState = vport->ovsState;
+    nicState = vport->nicState;
+    
+    /*
+     * Currently only the port friendly name is being updated
+     * Make sure that no other properties are changed
+     */
+    ASSERT(portParam->PortId == vport->portId);
+    ASSERT(portParam->PortState == vport->portState);
+    ASSERT(portParam->PortType == vport->portType);
+
+    /*
+     * Call the set parameters function the handle all properties
+     * change in a single place in case future version supports change of
+     * other properties
+     */
+    OvsInitVportWithPortParam(vport, portParam);
+    /* Retore the nic and OVS states */
+    vport->nicState = nicState;
+    vport->ovsState = ovsState;
+
+update_port_done:
+    NdisReleaseRWLock(switchContext->dispatchLock, &lockState);
+    VPORT_PORT_EXIT(portParam);
+
+    /* Must always return success */
+    return NDIS_STATUS_SUCCESS;
+}
+
 VOID
 HvTeardownPort(POVS_SWITCH_CONTEXT switchContext,
                PNDIS_SWITCH_PORT_PARAMETERS portParam)
diff --git a/datapath-windows/ovsext/Vport.h b/datapath-windows/ovsext/Vport.h
index b4e4fca..ec7c21c 100644
--- a/datapath-windows/ovsext/Vport.h
+++ b/datapath-windows/ovsext/Vport.h
@@ -158,6 +158,8 @@ NDIS_STATUS HvCreateNic(POVS_SWITCH_CONTEXT switchContext,
                         PNDIS_SWITCH_NIC_PARAMETERS nicParam);
 NDIS_STATUS HvCreatePort(POVS_SWITCH_CONTEXT switchContext,
                          PNDIS_SWITCH_PORT_PARAMETERS portParam);
+NDIS_STATUS HvUpdatePort(POVS_SWITCH_CONTEXT switchContext,
+                         PNDIS_SWITCH_PORT_PARAMETERS portParam);
 VOID HvTeardownPort(POVS_SWITCH_CONTEXT switchContext,
                     PNDIS_SWITCH_PORT_PARAMETERS portParam);
 VOID HvDeletePort(POVS_SWITCH_CONTEXT switchContext,
-- 
1.9.4.msysgit.0




More information about the dev mailing list