The field nameLink of the OVS_VPORT_ENTRY is the link within the
OVS_SWITCH_CONTEXT's hash array of vports nameHashArray, hashed by the
ovsName field of the OVS_VPORT_ENTRY.
Later on, the friendly name of the hyper-v switch port will need to be
set from userspace using WMI. This will require that the hyper-v switch
port friendly name be set to the exact string value as the ovs
(datapath) port name set from netlink command vport add.
The vport will need to differentiate between the ovs (datapath) port
name and hyper-v switch port friendly name, because they may differ in
erroneous scenarios, or state differences between the hyper-v switch
port and the ovs (datapath) port. This may happen if the vport was
created by the netlink command vport add, but the VM disconnected (i.e.
the hyper-v switch port was later deleted).
Storing another field in vport, "portFriendlyName" would normally
make the current switchContext->nameHashArray and vport->nameLink
confusing since the "name"-s may be understood to mean the hyper-v
switch port friendly name, or the hyper-v switch port name, when it
actually refers to the ovs (datapath) port name.
Hence, the variable nameHashArray is renamed to ovsPortNameHashArray,
while the nameLink is renamed to ovsPortNameLink. This change will make
a clearer connection between these and the vport field "ovsName" to
which they revolve around.
Signed-off-by: Samuel Ghinet <sghinet@cloudbasesolutions.com>
Co-authored-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Acked-by: Ankur Sharma <ankursharma@vmware.com>
Acked-by: Eitan Eliahu <eliahue@vmware.com>
Acked-by: Nithin Raju <nithin@vmware.com>
Tested-by: Nithin Raju <nithin@vmware.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
switchContext->vportArray =
(PVOID *)OvsAllocateMemory(sizeof (PVOID) * OVS_MAX_VPORT_ARRAY_SIZE);
switchContext->vportArray =
(PVOID *)OvsAllocateMemory(sizeof (PVOID) * OVS_MAX_VPORT_ARRAY_SIZE);
- switchContext->nameHashArray = (PLIST_ENTRY)
+ switchContext->ovsPortNameHashArray = (PLIST_ENTRY)
OvsAllocateMemory(sizeof (LIST_ENTRY) * OVS_MAX_VPORT_ARRAY_SIZE);
switchContext->portHashArray = (PLIST_ENTRY)
OvsAllocateMemory(sizeof (LIST_ENTRY) * OVS_MAX_VPORT_ARRAY_SIZE);
OvsAllocateMemory(sizeof (LIST_ENTRY) * OVS_MAX_VPORT_ARRAY_SIZE);
switchContext->portHashArray = (PLIST_ENTRY)
OvsAllocateMemory(sizeof (LIST_ENTRY) * OVS_MAX_VPORT_ARRAY_SIZE);
if (status != NDIS_STATUS_SUCCESS ||
switchContext->dispatchLock == NULL ||
switchContext->vportArray == NULL ||
if (status != NDIS_STATUS_SUCCESS ||
switchContext->dispatchLock == NULL ||
switchContext->vportArray == NULL ||
- switchContext->nameHashArray == NULL ||
+ switchContext->ovsPortNameHashArray == NULL ||
switchContext->portHashArray == NULL) {
if (switchContext->dispatchLock) {
NdisFreeRWLock(switchContext->dispatchLock);
switchContext->portHashArray == NULL) {
if (switchContext->dispatchLock) {
NdisFreeRWLock(switchContext->dispatchLock);
if (switchContext->vportArray) {
OvsFreeMemory(switchContext->vportArray);
}
if (switchContext->vportArray) {
OvsFreeMemory(switchContext->vportArray);
}
- if (switchContext->nameHashArray) {
- OvsFreeMemory(switchContext->nameHashArray);
+ if (switchContext->ovsPortNameHashArray) {
+ OvsFreeMemory(switchContext->ovsPortNameHashArray);
}
if (switchContext->portHashArray) {
OvsFreeMemory(switchContext->portHashArray);
}
if (switchContext->portHashArray) {
OvsFreeMemory(switchContext->portHashArray);
}
for (i = 0; i < OVS_MAX_VPORT_ARRAY_SIZE; i++) {
}
for (i = 0; i < OVS_MAX_VPORT_ARRAY_SIZE; i++) {
- InitializeListHead(&switchContext->nameHashArray[i]);
+ InitializeListHead(&switchContext->ovsPortNameHashArray[i]);
}
for (i = 0; i < OVS_MAX_VPORT_ARRAY_SIZE; i++) {
InitializeListHead(&switchContext->portHashArray[i]);
}
for (i = 0; i < OVS_MAX_VPORT_ARRAY_SIZE; i++) {
InitializeListHead(&switchContext->portHashArray[i]);
ASSERT(switchContext->numVports == 0);
NdisFreeRWLock(switchContext->dispatchLock);
ASSERT(switchContext->numVports == 0);
NdisFreeRWLock(switchContext->dispatchLock);
- OvsFreeMemory(switchContext->nameHashArray);
+ OvsFreeMemory(switchContext->ovsPortNameHashArray);
OvsFreeMemory(switchContext->portHashArray);
OvsFreeMemory(switchContext->vportArray);
OvsDeleteFlowTable(&switchContext->datapath);
OvsFreeMemory(switchContext->portHashArray);
OvsFreeMemory(switchContext->vportArray);
OvsDeleteFlowTable(&switchContext->datapath);
POVS_VPORT_ENTRY internalVport;
PVOID *vportArray;
POVS_VPORT_ENTRY internalVport;
PVOID *vportArray;
- PLIST_ENTRY nameHashArray; // based on ovsName
+ PLIST_ENTRY ovsPortNameHashArray; // based on ovsName
PLIST_ENTRY portHashArray; // based on portId
UINT32 numPhysicalNics;
PLIST_ENTRY portHashArray; // based on portId
UINT32 numPhysicalNics;
POVS_VPORT_ENTRY vport;
PLIST_ENTRY head, link;
UINT32 hash = OvsJhashBytes((const VOID *)name, length, OVS_HASH_BASIS);
POVS_VPORT_ENTRY vport;
PLIST_ENTRY head, link;
UINT32 hash = OvsJhashBytes((const VOID *)name, length, OVS_HASH_BASIS);
- head = &(switchContext->nameHashArray[hash & OVS_VPORT_MASK]);
+ head = &(switchContext->ovsPortNameHashArray[hash & OVS_VPORT_MASK]);
LIST_FORALL(head, link) {
LIST_FORALL(head, link) {
- vport = CONTAINING_RECORD(link, OVS_VPORT_ENTRY, nameLink);
+ vport = CONTAINING_RECORD(link, OVS_VPORT_ENTRY, ovsNameLink);
if (vport->ovsNameLen == length &&
RtlEqualMemory(name, vport->ovsName, length)) {
return vport;
if (vport->ovsNameLen == length &&
RtlEqualMemory(name, vport->ovsName, length)) {
return vport;
return NDIS_STATUS_SUCCESS;
}
hash = OvsJhashBytes(vport->ovsName, vport->ovsNameLen, OVS_HASH_BASIS);
return NDIS_STATUS_SUCCESS;
}
hash = OvsJhashBytes(vport->ovsName, vport->ovsNameLen, OVS_HASH_BASIS);
- InsertHeadList(&switchContext->nameHashArray[hash & OVS_VPORT_MASK],
- &vport->nameLink);
+ InsertHeadList(&switchContext->ovsPortNameHashArray[hash & OVS_VPORT_MASK],
+ &vport->ovsNameLink);
hash = OvsJhashWords(&vport->portId, 1, OVS_HASH_BASIS);
InsertHeadList(&switchContext->portHashArray[hash & OVS_VPORT_MASK],
hash = OvsJhashWords(&vport->portId, 1, OVS_HASH_BASIS);
InsertHeadList(&switchContext->portHashArray[hash & OVS_VPORT_MASK],
switchContext->numVports++;
return NDIS_STATUS_SUCCESS;
}
switchContext->numVports++;
return NDIS_STATUS_SUCCESS;
}
- RemoveEntryList(&vport->nameLink);
+ RemoveEntryList(&vport->ovsNameLink);
RemoveEntryList(&vport->portLink);
gen = (gen + 1) & 0xff;
switchContext->vportArray[OVS_VPORT_INDEX(vport->portNo)] =
RemoveEntryList(&vport->portLink);
gen = (gen + 1) & 0xff;
switchContext->vportArray[OVS_VPORT_INDEX(vport->portNo)] =
* tunnel type, such as vxlan, gre, gre64
*/
typedef struct _OVS_VPORT_ENTRY {
* tunnel type, such as vxlan, gre, gre64
*/
typedef struct _OVS_VPORT_ENTRY {
+ LIST_ENTRY ovsNameLink;
LIST_ENTRY portLink;
OVS_VPORT_STATE ovsState;
LIST_ENTRY portLink;
OVS_VPORT_STATE ovsState;