|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH] Add VIF interface V11
This version adds a MaxCount output to QueryRingCount that represents
the maximum number of rings supported by the current XenVif/XenNet.
Signed-off-by: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>
---
include/revision.h | 3 +-
include/vif_interface.h | 59 +++++++++++++++++++++++++++++++---
src/xenvif/vif.c | 70 +++++++++++++++++++++++++++++++++++++++--
3 files changed, 123 insertions(+), 9 deletions(-)
diff --git a/include/revision.h b/include/revision.h
index d23639f..4e6a454 100644
--- a/include/revision.h
+++ b/include/revision.h
@@ -46,6 +46,7 @@
DEFINE_REVISION(0x09000002, 2, 9, 2, 1, 1), \
DEFINE_REVISION(0x09000003, 2, 10, 2, 1, 1), \
DEFINE_REVISION(0x09000004, 2, 10, 2, 1, 2), \
- DEFINE_REVISION(0x09000005, 2, 10, 2, 1, 3)
+ DEFINE_REVISION(0x09000005, 2, 10, 2, 1, 3), \
+ DEFINE_REVISION(0x09000006, 2, 11, 2, 1, 3)
#endif // _REVISION_H
diff --git a/include/vif_interface.h b/include/vif_interface.h
index cc2f626..66053a1 100644
--- a/include/vif_interface.h
+++ b/include/vif_interface.h
@@ -567,17 +567,32 @@ typedef NTSTATUS
_Out_ PULONGLONG Value
);
+/*! \typedef XENVIF_VIF_QUERY_RING_COUNT_V8
+ \brief Query the number of shared rings between frontend
+ and backend
+
+ \param Interface The interface header
+ \param Count Buffer to receive the count
+*/
+typedef VOID
+(*XENVIF_VIF_QUERY_RING_COUNT_V8)(
+ _In_ PINTERFACE Interface,
+ _Out_ PULONG Count
+ );
+
/*! \typedef XENVIF_VIF_QUERY_RING_COUNT
\brief Query the number of shared rings between frontend
and backend
\param Interface The interface header
\param Count Buffer to receive the count
+ \param MaxCount Buffer to receive the maximum possible ring count
*/
typedef VOID
(*XENVIF_VIF_QUERY_RING_COUNT)(
_In_ PINTERFACE Interface,
- _Out_ PULONG Count
+ _Out_ PULONG Count,
+ _Out_ PULONG MaxCount
);
/*! \typedef XENVIF_VIF_UPDATE_HASH_MAPPING
@@ -900,7 +915,7 @@ struct _XENVIF_VIF_INTERFACE_V8 {
XENVIF_VIF_ENABLE_V8 EnableVersion8;
XENVIF_VIF_DISABLE Disable;
XENVIF_VIF_QUERY_STATISTIC QueryStatistic;
- XENVIF_VIF_QUERY_RING_COUNT QueryRingCount;
+ XENVIF_VIF_QUERY_RING_COUNT_V8 QueryRingCountVersion8;
XENVIF_VIF_UPDATE_HASH_MAPPING UpdateHashMapping;
XENVIF_VIF_RECEIVER_RETURN_PACKET ReceiverReturnPacket;
XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS ReceiverSetOffloadOptions;
@@ -934,7 +949,7 @@ struct _XENVIF_VIF_INTERFACE_V9 {
XENVIF_VIF_ENABLE_V9 EnableVersion9;
XENVIF_VIF_DISABLE Disable;
XENVIF_VIF_QUERY_STATISTIC QueryStatistic;
- XENVIF_VIF_QUERY_RING_COUNT QueryRingCount;
+ XENVIF_VIF_QUERY_RING_COUNT_V8 QueryRingCountVersion8;
XENVIF_VIF_UPDATE_HASH_MAPPING UpdateHashMapping;
XENVIF_VIF_RECEIVER_RETURN_PACKET ReceiverReturnPacket;
XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS ReceiverSetOffloadOptions;
@@ -962,6 +977,40 @@ struct _XENVIF_VIF_INTERFACE_V9 {
\ingroup interfaces
*/
struct _XENVIF_VIF_INTERFACE_V10 {
+ INTERFACE Interface;
+ XENVIF_VIF_ACQUIRE Acquire;
+ XENVIF_VIF_RELEASE Release;
+ XENVIF_VIF_ENABLE Enable;
+ XENVIF_VIF_DISABLE Disable;
+ XENVIF_VIF_QUERY_STATISTIC QueryStatistic;
+ XENVIF_VIF_QUERY_RING_COUNT_V8 QueryRingCountVersion8;
+ XENVIF_VIF_UPDATE_HASH_MAPPING UpdateHashMapping;
+ XENVIF_VIF_RECEIVER_RETURN_PACKET ReceiverReturnPacket;
+ XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS ReceiverSetOffloadOptions;
+ XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE ReceiverSetBackfillSize;
+ XENVIF_VIF_RECEIVER_QUERY_RING_SIZE ReceiverQueryRingSize;
+ XENVIF_VIF_RECEIVER_SET_HASH_ALGORITHM ReceiverSetHashAlgorithm;
+ XENVIF_VIF_RECEIVER_QUERY_HASH_CAPABILITIES
ReceiverQueryHashCapabilities;
+ XENVIF_VIF_RECEIVER_UPDATE_HASH_PARAMETERS
ReceiverUpdateHashParameters;
+ XENVIF_VIF_TRANSMITTER_QUEUE_PACKET TransmitterQueuePacket;
+ XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS
TransmitterQueryOffloadOptions;
+ XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE
TransmitterQueryLargePacketSize;
+ XENVIF_VIF_TRANSMITTER_QUERY_RING_SIZE TransmitterQueryRingSize;
+ XENVIF_VIF_MAC_QUERY_STATE MacQueryState;
+ XENVIF_VIF_MAC_QUERY_MAXIMUM_FRAME_SIZE MacQueryMaximumFrameSize;
+ XENVIF_VIF_MAC_QUERY_PERMANENT_ADDRESS MacQueryPermanentAddress;
+ XENVIF_VIF_MAC_QUERY_CURRENT_ADDRESS MacQueryCurrentAddress;
+ XENVIF_VIF_MAC_QUERY_MULTICAST_ADDRESSES MacQueryMulticastAddresses;
+ XENVIF_VIF_MAC_SET_MULTICAST_ADDRESSES MacSetMulticastAddresses;
+ XENVIF_VIF_MAC_SET_FILTER_LEVEL MacSetFilterLevel;
+ XENVIF_VIF_MAC_QUERY_FILTER_LEVEL MacQueryFilterLevel;
+};
+
+/*! \struct _XENVIF_VIF_INTERFACE_V11
+ \brief VIF interface version 11
+ \ingroup interfaces
+*/
+struct _XENVIF_VIF_INTERFACE_V11 {
INTERFACE Interface;
XENVIF_VIF_ACQUIRE Acquire;
XENVIF_VIF_RELEASE Release;
@@ -991,7 +1040,7 @@ struct _XENVIF_VIF_INTERFACE_V10 {
XENVIF_VIF_MAC_QUERY_FILTER_LEVEL MacQueryFilterLevel;
};
-typedef struct _XENVIF_VIF_INTERFACE_V10 XENVIF_VIF_INTERFACE,
*PXENVIF_VIF_INTERFACE;
+typedef struct _XENVIF_VIF_INTERFACE_V11 XENVIF_VIF_INTERFACE,
*PXENVIF_VIF_INTERFACE;
/*! \def XENVIF_VIF
\brief Macro at assist in method invocation
@@ -1002,6 +1051,6 @@ typedef struct _XENVIF_VIF_INTERFACE_V10
XENVIF_VIF_INTERFACE, *PXENVIF_VIF_INTE
#endif // _WINDLL
#define XENVIF_VIF_INTERFACE_VERSION_MIN 8
-#define XENVIF_VIF_INTERFACE_VERSION_MAX 10
+#define XENVIF_VIF_INTERFACE_VERSION_MAX 11
#endif // _XENVIF_INTERFACE_H
diff --git a/src/xenvif/vif.c b/src/xenvif/vif.c
index 4937bb6..4396fcc 100644
--- a/src/xenvif/vif.c
+++ b/src/xenvif/vif.c
@@ -536,7 +536,7 @@ done:
}
static VOID
-VifQueryRingCount(
+VifQueryRingCountVersion8(
_In_ PINTERFACE Interface,
_Out_ PULONG Count
)
@@ -550,6 +550,23 @@ VifQueryRingCount(
ReleaseMrswLockShared(&Context->Lock);
}
+static VOID
+VifQueryRingCount(
+ _In_ PINTERFACE Interface,
+ _Out_ PULONG Count,
+ _Out_ PULONG MaxCount
+ )
+{
+ PXENVIF_VIF_CONTEXT Context = Interface->Context;
+
+ AcquireMrswLockShared(&Context->Lock);
+
+ *Count = FrontendGetNumQueues(Context->Frontend);
+ *MaxCount = FrontendGetMaxQueues(Context->Frontend);
+
+ ReleaseMrswLockShared(&Context->Lock);
+}
+
static NTSTATUS
VifUpdateHashMapping(
_In_ PINTERFACE Interface,
@@ -1008,7 +1025,7 @@ static struct _XENVIF_VIF_INTERFACE_V8
VifInterfaceVersion8 = {
VifEnableVersion8,
VifDisable,
VifQueryStatistic,
- VifQueryRingCount,
+ VifQueryRingCountVersion8,
VifUpdateHashMapping,
VifReceiverReturnPacket,
VifReceiverSetOffloadOptions,
@@ -1038,7 +1055,7 @@ static struct _XENVIF_VIF_INTERFACE_V9
VifInterfaceVersion9 = {
VifEnableVersion9,
VifDisable,
VifQueryStatistic,
- VifQueryRingCount,
+ VifQueryRingCountVersion8,
VifUpdateHashMapping,
VifReceiverReturnPacket,
VifReceiverSetOffloadOptions,
@@ -1068,6 +1085,36 @@ static struct _XENVIF_VIF_INTERFACE_V10
VifInterfaceVersion10 = {
VifEnable,
VifDisable,
VifQueryStatistic,
+ VifQueryRingCountVersion8,
+ VifUpdateHashMapping,
+ VifReceiverReturnPacket,
+ VifReceiverSetOffloadOptions,
+ VifReceiverSetBackfillSize,
+ VifReceiverQueryRingSize,
+ VifReceiverSetHashAlgorithm,
+ VifReceiverQueryHashCapabilities,
+ VifReceiverUpdateHashParameters,
+ VifTransmitterQueuePacket,
+ VifTransmitterQueryOffloadOptions,
+ VifTransmitterQueryLargePacketSize,
+ VifTransmitterQueryRingSize,
+ VifMacQueryState,
+ VifMacQueryMaximumFrameSize,
+ VifMacQueryPermanentAddress,
+ VifMacQueryCurrentAddress,
+ VifMacQueryMulticastAddresses,
+ VifMacSetMulticastAddresses,
+ VifMacSetFilterLevel,
+ VifMacQueryFilterLevel
+};
+
+static struct _XENVIF_VIF_INTERFACE_V11 VifInterfaceVersion11 = {
+ { sizeof (struct _XENVIF_VIF_INTERFACE_V11), 11, NULL, NULL, NULL },
+ VifAcquire,
+ VifRelease,
+ VifEnable,
+ VifDisable,
+ VifQueryStatistic,
VifQueryRingCount,
VifUpdateHashMapping,
VifReceiverReturnPacket,
@@ -1211,6 +1258,23 @@ VifGetInterface(
status = STATUS_SUCCESS;
break;
}
+ case 11: {
+ struct _XENVIF_VIF_INTERFACE_V11 *VifInterface;
+
+ VifInterface = (struct _XENVIF_VIF_INTERFACE_V11 *)Interface;
+
+ status = STATUS_BUFFER_OVERFLOW;
+ if (Size < sizeof (struct _XENVIF_VIF_INTERFACE_V11))
+ break;
+
+ *VifInterface = VifInterfaceVersion11;
+
+ ASSERT3U(Interface->Version, ==, Version);
+ Interface->Context = Context;
+
+ status = STATUS_SUCCESS;
+ break;
+ }
default:
status = STATUS_NOT_SUPPORTED;
break;
--
2.55.0.windows.3
--
Ngoc Tu Dinh | Vates XCP-ng Developer
XCP-ng & Xen Orchestra - Vates solutions
web: https://vates.tech
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |