summaryrefslogtreecommitdiff
path: root/datapath-windows
diff options
context:
space:
mode:
Diffstat (limited to 'datapath-windows')
-rw-r--r--datapath-windows/ovsext/Actions.c27
-rw-r--r--datapath-windows/ovsext/Switch.c32
-rw-r--r--datapath-windows/ovsext/Switch.h24
-rw-r--r--datapath-windows/ovsext/Tunnel.c2
-rw-r--r--datapath-windows/ovsext/Vport.c162
-rw-r--r--datapath-windows/ovsext/Vport.h56
6 files changed, 93 insertions, 210 deletions
diff --git a/datapath-windows/ovsext/Actions.c b/datapath-windows/ovsext/Actions.c
index 180b6b88e..ab8b6736b 100644
--- a/datapath-windows/ovsext/Actions.c
+++ b/datapath-windows/ovsext/Actions.c
@@ -205,7 +205,7 @@ OvsDetectTunnelRxPkt(OvsForwardingContext *ovsFwdCtx,
if (!flowKey->ipKey.nwFrag &&
flowKey->ipKey.nwProto == IPPROTO_UDP &&
flowKey->ipKey.l4.tpDst == VXLAN_UDP_PORT_NBO) {
- tunnelVport = OvsGetTunnelVport(OVS_VPORT_TYPE_VXLAN);
+ tunnelVport = ovsFwdCtx->switchContext->vxlanVport;
ovsActionStats.rxVxlan++;
}
@@ -271,9 +271,14 @@ OvsDetectTunnelPkt(OvsForwardingContext *ovsFwdCtx,
* If the packet will not be encapsulated, consume the tunnel context
* by clearing it.
*/
- if (ovsFwdCtx->srcVportNo != OVS_DEFAULT_PORT_NO &&
- !OvsIsVifVportNo(ovsFwdCtx->srcVportNo)) {
- ovsFwdCtx->tunKey.dst = 0;
+ if (ovsFwdCtx->srcVportNo != OVS_DEFAULT_PORT_NO) {
+
+ POVS_VPORT_ENTRY vport = OvsFindVportByPortNo(
+ ovsFwdCtx->switchContext, ovsFwdCtx->srcVportNo);
+
+ if (!vport || vport->ovsType != OVS_VPORT_TYPE_NETDEV) {
+ ovsFwdCtx->tunKey.dst = 0;
+ }
}
/* Tunnel the packet only if tunnel context is set. */
@@ -1468,9 +1473,17 @@ OvsActionsExecute(POVS_SWITCH_CONTEXT switchContext,
PNL_ATTR queueAttr;
POVS_PACKET_QUEUE_ELEM elem;
UINT32 queueId = OVS_DEFAULT_PACKET_QUEUE;
- //XXX confusing that portNo is actually portId for external port.
- BOOLEAN isRecv = (portNo == switchContext->externalPortId)
- || OvsIsTunnelVportNo(portNo);
+ BOOLEAN isRecv = FALSE;
+
+ POVS_VPORT_ENTRY vport = OvsFindVportByPortNo(switchContext,
+ portNo);
+
+ if (vport) {
+ if (vport->isExternal ||
+ OvsIsTunnelVportType(vport->ovsType)) {
+ isRecv = TRUE;
+ }
+ }
queueAttr = NlAttrFindNested(a, OVS_USERSPACE_ATTR_PID);
userdataAttr = NlAttrFindNested(a, OVS_USERSPACE_ATTR_USERDATA);
diff --git a/datapath-windows/ovsext/Switch.c b/datapath-windows/ovsext/Switch.c
index 7d8aa7a1f..ac4a847bf 100644
--- a/datapath-windows/ovsext/Switch.c
+++ b/datapath-windows/ovsext/Switch.c
@@ -354,12 +354,12 @@ OvsInitSwitchContext(POVS_SWITCH_CONTEXT switchContext)
switchContext->dispatchLock =
NdisAllocateRWLock(switchContext->NdisFilterHandle);
- switchContext->vportArray =
- (PVOID *)OvsAllocateMemory(sizeof (PVOID) * OVS_MAX_VPORT_ARRAY_SIZE);
+ switchContext->portNoHashArray = (PLIST_ENTRY)
+ OvsAllocateMemory(sizeof(LIST_ENTRY) * OVS_MAX_VPORT_ARRAY_SIZE);
switchContext->ovsPortNameHashArray = (PLIST_ENTRY)
- OvsAllocateMemory(sizeof (LIST_ENTRY) * OVS_MAX_VPORT_ARRAY_SIZE);
+ OvsAllocateMemory(sizeof (LIST_ENTRY) * OVS_MAX_VPORT_ARRAY_SIZE);
switchContext->portIdHashArray= (PLIST_ENTRY)
- OvsAllocateMemory(sizeof (LIST_ENTRY) * OVS_MAX_VPORT_ARRAY_SIZE);
+ OvsAllocateMemory(sizeof (LIST_ENTRY) * OVS_MAX_VPORT_ARRAY_SIZE);
status = OvsAllocateFlowTable(&switchContext->datapath, switchContext);
if (status == NDIS_STATUS_SUCCESS) {
@@ -367,14 +367,14 @@ OvsInitSwitchContext(POVS_SWITCH_CONTEXT switchContext)
}
if (status != NDIS_STATUS_SUCCESS ||
switchContext->dispatchLock == NULL ||
- switchContext->vportArray == NULL ||
+ switchContext->portNoHashArray == NULL ||
switchContext->ovsPortNameHashArray == NULL ||
switchContext->portIdHashArray== NULL) {
if (switchContext->dispatchLock) {
NdisFreeRWLock(switchContext->dispatchLock);
}
- if (switchContext->vportArray) {
- OvsFreeMemory(switchContext->vportArray);
+ if (switchContext->portNoHashArray) {
+ OvsFreeMemory(switchContext->portNoHashArray);
}
if (switchContext->ovsPortNameHashArray) {
OvsFreeMemory(switchContext->ovsPortNameHashArray);
@@ -395,13 +395,13 @@ OvsInitSwitchContext(POVS_SWITCH_CONTEXT switchContext)
for (i = 0; i < OVS_MAX_VPORT_ARRAY_SIZE; i++) {
InitializeListHead(&switchContext->portIdHashArray[i]);
}
- RtlZeroMemory(switchContext->vportArray,
- sizeof (PVOID) * OVS_MAX_VPORT_ARRAY_SIZE);
+ for (i = 0; i < OVS_MAX_VPORT_ARRAY_SIZE; i++) {
+ InitializeListHead(&switchContext->portNoHashArray[i]);
+ }
switchContext->isActivated = FALSE;
switchContext->isActivateFailed = FALSE;
switchContext->dpNo = OVS_DP_NUMBER;
- switchContext->lastPortIndex = OVS_MAX_VPORT_ARRAY_SIZE -1;
ovsTimeIncrementPerTick = KeQueryTimeIncrement() / 10000;
OVS_LOG_TRACE("Exit: Succesfully initialized switchContext: %p",
switchContext);
@@ -419,7 +419,7 @@ OvsCleanupSwitchContext(POVS_SWITCH_CONTEXT switchContext)
NdisFreeRWLock(switchContext->dispatchLock);
OvsFreeMemory(switchContext->ovsPortNameHashArray);
OvsFreeMemory(switchContext->portIdHashArray);
- OvsFreeMemory(switchContext->vportArray);
+ OvsFreeMemory(switchContext->portNoHashArray);
OvsDeleteFlowTable(&switchContext->datapath);
OvsCleanupBufferPool(switchContext);
OVS_LOG_TRACE("Exit: Delete switchContext: %p", switchContext);
@@ -469,16 +469,6 @@ cleanup:
}
PVOID
-OvsGetVportFromIndex(UINT16 index)
-{
- if (index < OVS_MAX_VPORT_ARRAY_SIZE &&
- !OVS_IS_VPORT_ENTRY_NULL(gOvsSwitchContext, index)) {
- return gOvsSwitchContext->vportArray[index];
- }
- return NULL;
-}
-
-PVOID
OvsGetExternalVport()
{
return gOvsSwitchContext->externalVport;
diff --git a/datapath-windows/ovsext/Switch.h b/datapath-windows/ovsext/Switch.h
index d9761b45c..4591c11a7 100644
--- a/datapath-windows/ovsext/Switch.h
+++ b/datapath-windows/ovsext/Switch.h
@@ -37,17 +37,6 @@
#define OVS_GRE64_VPORT_INDEX 4
#define OVS_TUNNEL_INDEX_END OVS_GRE64_VPORT_INDEX
-#define OVS_EXTERNAL_VPORT_START 8
-#define OVS_EXTERNAL_VPORT_END 40
-#define OVS_INTERNAL_VPORT_START 40
-#define OVS_INTERNAL_VPOR_END 72
-#define OVS_VM_VPORT_START 72
-#define OVS_VM_VPORT_MAX 0xffff
-#define OVS_VPORT_INDEX(_portNo) ((_portNo) & 0xffffff)
-#define OVS_VPORT_PORT_NO(_index, _gen) \
- (((_index) & 0xffffff) | ((UINT32)(_gen) << 24))
-#define OVS_VPORT_GEN(portNo) (portNo >> 24)
-
#define OVS_MAX_PHYS_ADAPTERS 32
#define OVS_MAX_IP_VPOR 32
@@ -109,9 +98,15 @@ typedef struct _OVS_SWITCH_CONTEXT
POVS_VPORT_ENTRY externalVport; // the virtual adapter vport
POVS_VPORT_ENTRY internalVport;
- PVOID *vportArray;
- PLIST_ENTRY ovsPortNameHashArray; // based on ovsName
- PLIST_ENTRY portIdHashArray; // based on portId
+ /*
+ * XXX when we support multiple VXLAN ports, we will need a list entry
+ * instead
+ */
+ POVS_VPORT_ENTRY vxlanVport;
+
+ PLIST_ENTRY ovsPortNameHashArray; // based on ovsName
+ PLIST_ENTRY portIdHashArray; // based on portId
+ PLIST_ENTRY portNoHashArray; // based on ovs port number
UINT32 numPhysicalNics;
UINT32 numVports; // include validation port
@@ -165,7 +160,6 @@ OvsReleaseDatapath(OVS_DATAPATH *datapath,
}
-PVOID OvsGetVportFromIndex(UINT16 index);
PVOID OvsGetExternalVport();
#endif /* __SWITCH_H_ */
diff --git a/datapath-windows/ovsext/Tunnel.c b/datapath-windows/ovsext/Tunnel.c
index 304ab5986..64e279c25 100644
--- a/datapath-windows/ovsext/Tunnel.c
+++ b/datapath-windows/ovsext/Tunnel.c
@@ -284,7 +284,7 @@ OvsInjectPacketThroughActions(PNET_BUFFER_LIST pNbl,
SendFlags |= NDIS_SEND_FLAGS_DISPATCH_LEVEL;
- vport = OvsGetTunnelVport(OVS_VPORT_TYPE_VXLAN);
+ vport = gOvsSwitchContext->vxlanVport;
if (vport == NULL){
status = STATUS_UNSUCCESSFUL;
diff --git a/datapath-windows/ovsext/Vport.c b/datapath-windows/ovsext/Vport.c
index 9ffb25ec0..c26ee0fbe 100644
--- a/datapath-windows/ovsext/Vport.c
+++ b/datapath-windows/ovsext/Vport.c
@@ -219,7 +219,7 @@ HvCreateNic(POVS_SWITCH_CONTEXT switchContext,
add_nic_done:
NdisReleaseRWLock(switchContext->dispatchLock, &lockState);
- if (portNo && event) {
+ if (portNo != OVS_DPPORT_NUMBER_INVALID && event) {
OvsPostEvent(portNo, event);
}
@@ -268,6 +268,7 @@ HvConnectNic(POVS_SWITCH_CONTEXT switchContext,
NdisReleaseRWLock(switchContext->dispatchLock, &lockState);
+ /* XXX only if portNo != INVALID or always? */
OvsPostEvent(portNo, OVS_EVENT_LINK_UP);
if (nicParam->NicType == NdisSwitchNicTypeInternal) {
@@ -392,6 +393,7 @@ HvDisconnectNic(POVS_SWITCH_CONTEXT switchContext,
NdisReleaseRWLock(switchContext->dispatchLock, &lockState);
+ /* XXX if portNo != INVALID or always? */
OvsPostEvent(portNo, OVS_EVENT_LINK_DOWN);
if (isInternalPort) {
@@ -440,6 +442,7 @@ HvDeleteNic(POVS_SWITCH_CONTEXT switchContext,
vport->ovsState = OVS_STATE_PORT_CREATED;
NdisReleaseRWLock(switchContext->dispatchLock, &lockState);
+ /* XXX if portNo != INVALID or always? */
OvsPostEvent(portNo, OVS_EVENT_DISCONNECT);
done:
@@ -454,14 +457,15 @@ POVS_VPORT_ENTRY
OvsFindVportByPortNo(POVS_SWITCH_CONTEXT switchContext,
UINT32 portNo)
{
- if (OVS_VPORT_INDEX(portNo) < OVS_MAX_VPORT_ARRAY_SIZE) {
- if (OVS_IS_VPORT_ENTRY_NULL(switchContext, OVS_VPORT_INDEX(portNo))) {
- return NULL;
- } else {
- POVS_VPORT_ENTRY vport;
- vport = (POVS_VPORT_ENTRY)
- switchContext->vportArray[OVS_VPORT_INDEX(portNo)];
- return vport->portNo == portNo ? vport : NULL;
+ POVS_VPORT_ENTRY vport;
+ PLIST_ENTRY head, link;
+ UINT32 hash = OvsJhashBytes((const VOID *)&portNo, sizeof(portNo),
+ OVS_HASH_BASIS);
+ head = &(switchContext->portNoHashArray[hash & OVS_VPORT_MASK]);
+ LIST_FORALL(head, link) {
+ vport = CONTAINING_RECORD(link, OVS_VPORT_ENTRY, portNoLink);
+ if (vport->portNo == portNo) {
+ return vport;
}
}
return NULL;
@@ -493,18 +497,7 @@ OvsFindVportByPortIdAndNicIndex(POVS_SWITCH_CONTEXT switchContext,
NDIS_SWITCH_NIC_INDEX index)
{
if (portId == switchContext->externalPortId) {
- if (index == 0) {
- return (POVS_VPORT_ENTRY)switchContext->externalVport;
- } else if (index > OVS_MAX_PHYS_ADAPTERS) {
- return NULL;
- }
- if (OVS_IS_VPORT_ENTRY_NULL(switchContext,
- index + OVS_EXTERNAL_VPORT_START)) {
- return NULL;
- } else {
- return (POVS_VPORT_ENTRY)switchContext->vportArray[
- index + OVS_EXTERNAL_VPORT_START];
- }
+ return (POVS_VPORT_ENTRY)switchContext->externalVport;
} else if (switchContext->internalPortId == portId) {
return (POVS_VPORT_ENTRY)switchContext->internalVport;
} else {
@@ -523,72 +516,6 @@ OvsFindVportByPortIdAndNicIndex(POVS_SWITCH_CONTEXT switchContext,
}
}
-UINT32
-OvsComputeVportNo(POVS_SWITCH_CONTEXT switchContext,
- UINT32 nicIndex,
- OVS_VPORT_TYPE ovsType,
- BOOLEAN isExternal)
-{
- UINT32 index = 0xffffff, i = 0;
- UINT64 gen;
-
- if (isExternal) {
- if (nicIndex == 0) {
- return 0; // not a valid portNo
- } else if (nicIndex > OVS_MAX_PHYS_ADAPTERS) {
- return 0;
- } else {
- index = nicIndex + OVS_EXTERNAL_VPORT_START;
- }
- }
-
- switch (ovsType) {
- case OVS_VPORT_TYPE_INTERNAL:
- index = OVS_INTERNAL_VPORT_DEFAULT_INDEX;
- break;
- case OVS_VPORT_TYPE_NETDEV:
- index = switchContext->lastPortIndex + 1;
- if (index == OVS_MAX_VPORT_ARRAY_SIZE) {
- index = OVS_VM_VPORT_START;
- }
- while (!OVS_IS_VPORT_ENTRY_NULL(switchContext, index) &&
- i < (OVS_MAX_VPORT_ARRAY_SIZE - OVS_VM_VPORT_START)) {
- index++;
- i++;
- if (index == OVS_MAX_VPORT_ARRAY_SIZE) {
- index = OVS_VM_VPORT_START;
- }
- }
- if (i == (OVS_MAX_VPORT_ARRAY_SIZE - OVS_VM_VPORT_START)) {
- return 0; // not available
- }
- switchContext->lastPortIndex = index;
- break;
- case OVS_VPORT_TYPE_GRE:
- index = OVS_GRE_VPORT_INDEX;
- break;
- case OVS_VPORT_TYPE_GRE64:
- index = OVS_GRE64_VPORT_INDEX;
- break;
- case OVS_VPORT_TYPE_VXLAN:
- index = OVS_VXLAN_VPORT_INDEX;
- break;
- default:
- ASSERT(isExternal);
- }
- if (index > OVS_MAX_VPORT_ARRAY_SIZE) {
- return 0;
- }
- gen = (UINT64)switchContext->vportArray[index];
- if (gen > 0xff) {
- return 0;
- } else if (gen == 0) {
- gen++;
- }
- return OVS_VPORT_PORT_NO(index, (UINT32)gen);
-}
-
-
static POVS_VPORT_ENTRY
OvsAllocateVport(VOID)
{
@@ -599,6 +526,12 @@ OvsAllocateVport(VOID)
}
RtlZeroMemory(vport, sizeof (OVS_VPORT_ENTRY));
vport->ovsState = OVS_STATE_UNKNOWN;
+ vport->portNo = OVS_DPPORT_NUMBER_INVALID;
+
+ InitializeListHead(&vport->ovsNameLink);
+ InitializeListHead(&vport->portIdLink);
+ InitializeListHead(&vport->portNoLink);
+
return vport;
}
@@ -707,22 +640,11 @@ OvsInitPhysNicVport(POVS_VPORT_ENTRY vport,
}
static NDIS_STATUS
OvsInitVportCommon(POVS_SWITCH_CONTEXT switchContext,
-POVS_VPORT_ENTRY vport)
+ POVS_VPORT_ENTRY vport)
{
UINT32 hash;
- size_t len;
- if (vport->portType != NdisSwitchPortTypeExternal ||
- vport->nicIndex != 0) {
- vport->portNo = OvsComputeVportNo(switchContext, vport->nicIndex,
- vport->ovsType, vport->portType == NdisSwitchPortTypeExternal);
- if (vport->portNo == OVS_DPPORT_NUMBER_INVALID) {
- return NDIS_STATUS_RESOURCES;
- }
- ASSERT(OVS_IS_VPORT_ENTRY_NULL(switchContext,
- OVS_VPORT_INDEX(vport->portNo)));
+ ASSERT(vport->portNo == OVS_DPPORT_NUMBER_INVALID);
- switchContext->vportArray[OVS_VPORT_INDEX(vport->portNo)] = vport;
- }
switch (vport->portType) {
case NdisSwitchPortTypeExternal:
if (vport->nicIndex == 0) {
@@ -730,8 +652,7 @@ POVS_VPORT_ENTRY vport)
switchContext->externalVport = vport;
RtlStringCbPrintfA(vport->ovsName, OVS_MAX_PORT_NAME_LENGTH - 1,
"external.virtualAdapter");
- }
- else {
+ } else {
switchContext->numPhysicalNics++;
RtlStringCbPrintfA(vport->ovsName, OVS_MAX_PORT_NAME_LENGTH - 1,
"external.%lu", (UINT32)vport->nicIndex);
@@ -740,27 +661,23 @@ POVS_VPORT_ENTRY vport)
case NdisSwitchPortTypeInternal:
switchContext->internalPortId = vport->portId;
switchContext->internalVport = vport;
- RtlStringCbPrintfA(vport->ovsName, OVS_MAX_PORT_NAME_LENGTH - 1,
- "internal");
break;
case NdisSwitchPortTypeSynthetic:
- RtlStringCbPrintfA(vport->ovsName, OVS_MAX_PORT_NAME_LENGTH - 1,
- "vmNICSyn.%lx", vport->portNo);
break;
case NdisSwitchPortTypeEmulated:
- RtlStringCbPrintfA(vport->ovsName, OVS_MAX_PORT_NAME_LENGTH - 1,
- "vmNICEmu.%lx", vport->portNo);
break;
}
- StringCbLengthA(vport->ovsName, OVS_MAX_PORT_NAME_LENGTH - 1, &len);
- vport->ovsNameLen = (UINT32)len;
+
if (vport->portType == NdisSwitchPortTypeExternal &&
vport->nicIndex == 0) {
return NDIS_STATUS_SUCCESS;
}
- hash = OvsJhashBytes(vport->ovsName, vport->ovsNameLen, OVS_HASH_BASIS);
- InsertHeadList(&switchContext->ovsPortNameHashArray[hash & OVS_VPORT_MASK],
- &vport->ovsNameLink);
+
+ /*
+ * NOTE: OvsJhashWords has portId as "1" word. This should be ok, even
+ * though sizeof(NDIS_SWITCH_PORT_ID) = 4, not 2, because the
+ * hyper-v switch seems to use only 2 bytes out of 4.
+ */
hash = OvsJhashWords(&vport->portId, 1, OVS_HASH_BASIS);
InsertHeadList(&switchContext->portIdHashArray[hash & OVS_VPORT_MASK],
&vport->portIdLink);
@@ -773,8 +690,6 @@ static VOID
OvsRemoveAndDeleteVport(POVS_SWITCH_CONTEXT switchContext,
POVS_VPORT_ENTRY vport)
{
- UINT64 gen = vport->portNo >> 24;
-
if (vport->isExternal) {
if (vport->nicIndex == 0) {
ASSERT(switchContext->numPhysicalNics == 0);
@@ -807,9 +722,7 @@ OvsRemoveAndDeleteVport(POVS_SWITCH_CONTEXT switchContext,
RemoveEntryList(&vport->ovsNameLink);
RemoveEntryList(&vport->portIdLink);
- gen = (gen + 1) & 0xff;
- switchContext->vportArray[OVS_VPORT_INDEX(vport->portNo)] =
- (PVOID)(UINT64)gen;
+ RemoveEntryList(&vport->portNoLink);
switchContext->numVports--;
OvsFreeMemory(vport);
}
@@ -933,14 +846,17 @@ cleanup:
VOID
OvsClearAllSwitchVports(POVS_SWITCH_CONTEXT switchContext)
{
- UINT32 i;
+ for (UINT hash = 0; hash < OVS_MAX_VPORT_ARRAY_SIZE; hash) {
+ PLIST_ENTRY head, link;
- for (i = 0; i < OVS_MAX_VPORT_ARRAY_SIZE; i++) {
- if (!OVS_IS_VPORT_ENTRY_NULL(switchContext, i)) {
- OvsRemoveAndDeleteVport(switchContext,
- (POVS_VPORT_ENTRY)switchContext->vportArray[i]);
+ head = &(switchContext->portNoHashArray[hash & OVS_VPORT_MASK]);
+ LIST_FORALL(head, link) {
+ POVS_VPORT_ENTRY vport;
+ vport = CONTAINING_RECORD(link, OVS_VPORT_ENTRY, portNoLink);
+ OvsRemoveAndDeleteVport(switchContext, vport);
}
}
+
if (switchContext->externalVport) {
OvsRemoveAndDeleteVport(switchContext,
(POVS_VPORT_ENTRY)switchContext->externalVport);
diff --git a/datapath-windows/ovsext/Vport.h b/datapath-windows/ovsext/Vport.h
index b6d3776ed..077df7764 100644
--- a/datapath-windows/ovsext/Vport.h
+++ b/datapath-windows/ovsext/Vport.h
@@ -19,7 +19,18 @@
#include "Switch.h"
-#define OVS_DPPORT_NUMBER_INVALID 0
+#define OVS_MAX_DPPORTS MAXUINT16
+#define OVS_DPPORT_NUMBER_INVALID OVS_MAX_DPPORTS
+/*
+ * The local port (0) is a reserved port, that is not allowed to be be
+ * created by the netlink command vport add. On linux, this port is created
+ * at netlink command datapath new. However, on windows, we do not need to
+ * create it, and more, we shouldn't. The userspace attempts to create two
+ * internal vports, the LOCAL port (0) and the internal port (with any other
+ * port number). The non-LOCAL internal port is used in the userspace when it
+ * requests the internal port.
+ */
+#define OVS_DPPORT_NUMBER_LOCAL 0
/*
* A Vport, or Virtual Port, is a port on the OVS. It can be one of the
@@ -67,6 +78,7 @@ typedef struct _OVS_VPORT_FULL_STATS {
typedef struct _OVS_VPORT_ENTRY {
LIST_ENTRY ovsNameLink;
LIST_ENTRY portIdLink;
+ LIST_ENTRY portNoLink;
OVS_VPORT_STATE ovsState;
OVS_VPORT_TYPE ovsType;
@@ -99,9 +111,6 @@ typedef struct _OVS_VPORT_ENTRY {
struct _OVS_SWITCH_CONTEXT;
-#define OVS_IS_VPORT_ENTRY_NULL(_SwitchContext, _i) \
- ((UINT64)(_SwitchContext)->vportArray[_i] <= 0xff)
-
POVS_VPORT_ENTRY
OvsFindVportByPortNo(struct _OVS_SWITCH_CONTEXT *switchContext,
UINT32 portNo);
@@ -135,11 +144,6 @@ VOID HvDeleteNic(POVS_SWITCH_CONTEXT switchContext,
VOID HvDisconnectNic(POVS_SWITCH_CONTEXT switchContext,
PNDIS_SWITCH_NIC_PARAMETERS nicParam);
-UINT32 OvsComputeVportNo(POVS_SWITCH_CONTEXT switchContext,
- UINT32 nicIndex,
- OVS_VPORT_TYPE ovsType,
- BOOLEAN isExternal);
-
static __inline BOOLEAN
OvsIsTunnelVportType(OVS_VPORT_TYPE ovsType)
{
@@ -154,40 +158,6 @@ OvsIsInternalVportType(OVS_VPORT_TYPE ovsType)
return ovsType == OVS_VPORT_TYPE_INTERNAL;
}
-static __inline BOOLEAN
-OvsIsTunnelVportNo(UINT32 portNo)
-{
- UINT32 idx = OVS_VPORT_INDEX(portNo);
- return (idx >= OVS_TUNNEL_INDEX_START && idx <= OVS_TUNNEL_INDEX_END);
-}
-
-static __inline BOOLEAN
-OvsIsVifVportNo(UINT32 portNo)
-{
- UINT32 idx = OVS_VPORT_INDEX(portNo);
- return (idx >= OVS_VM_VPORT_START && idx <= OVS_VM_VPORT_MAX);
-}
-
-static __inline POVS_VPORT_ENTRY
-OvsGetTunnelVport(OVS_VPORT_TYPE type)
-{
- ASSERT(OvsIsTunnelVportType(type));
- switch(type) {
- case OVS_VPORT_TYPE_VXLAN:
- return (POVS_VPORT_ENTRY) OvsGetVportFromIndex(OVS_VXLAN_VPORT_INDEX);
- default:
- ASSERT(! "OvsGetTunnelVport not implemented for this tunnel.");
- }
-
- return NULL;
-}
-
-static __inline PVOID
-OvsGetVportPriv(OVS_VPORT_TYPE type)
-{
- return OvsGetTunnelVport(type)->priv;
-}
-
static __inline UINT32
OvsGetExternalMtu()
{