[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 1/3] Add definitions and usage of VIF interface V11


  • To: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>, "win-pv-devel@xxxxxxxxxxxxxxxxxxxx" <win-pv-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Owen Smith <owen.smith@xxxxxxxxxx>
  • Date: Thu, 15 Oct 2026 14:51:18 +0000
  • Accept-language: en-GB, en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=JlZF1vrwoKYncrRV91vbTa6MDrnnGoNXLk4PANWTUMw=; b=GGbDIbgU8bYO5AGBNGP/FI2xR9SrhOwJKA1FmU2lfcbLvgW3aseacGTVRfea4x6rn/1mnyu1Xk+3ad1oIC6qYspzK+uFeQv45X4vO9qgqE8dcgYAEVqowB9hZc5Rbi2gRZW0bQ+TYUCf3w6V5INOM+rOfTDWuvL362yRYiJyQvMPTphV+9KdL1JhTAuczMY8cmiDIa3cW4Kn+oiPUYfFrArMRzabqfYLSZuvx8GxeelanXosgwui/6zWlp+9Iqq1jsc5ojyzE91ArADVvAvV1MpVTi/4Yh3jP7PKhm231VVdBNQayQ8dJh1+7K9K+KxDf7DByLoVcb+GJg8ki+AEog==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=iPgkULVpfkA82YD79eWf21SOIQyaTbRCrEDkYyrkTkg/IILhQ/5DmaWslivTGXp53BCtFZfx6xcRGgwVU8wxClRIbPy+tKVHWoxYOmuZi+EmaKcy08evtVL7BLJ776+N1tkVW1U1KR/mrrWVcdxvPSWXo6ebNoMADcyleZ4+yfj+vkCOIwXA3yKiRa9Wui9oXp4Cr9yXvrSZly92LU/jWzVJ1u5klKVu4HscJrRK0N+4WHE9Xysli3Wo4w/LVm/ZotYc5wIGJOVCOgA3Sl2dfS/XDPMLECaeXmunad9FOn+k06vLWl3bwZKySn6SpbsqAPsHIpTcvRhs9sOjBYswZg==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
  • Authentication-results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
  • Delivery-date: Thu, 15 Oct 2026 14:51:23 +0000
  • List-id: Developer list for the Windows PV Drivers subproject <win-pv-devel.lists.xenproject.org>
  • Msip_labels:
  • Thread-index: AQHdXKeFKmnsUwxUKUmcFgqhjGfDuLb+r10k
  • Thread-topic: [PATCH v2 1/3] Add definitions and usage of VIF interface V11

I encountered an unusual issue applying this patch - the xennet.inf chunk
did not apply, inspecting the patch a a spurious "3D" was inserted in several
locations, which caused the patch to fail (this could be outlook mangling the
file, as its not visible when inspecting the patch in outlook itself)
I've corrected this during the apply

Reviewed-by: Owen Smith <owen.smith@xxxxxxxxxx>

________________________________________
From: win-pv-devel <win-pv-devel-bounces@xxxxxxxxxxxxxxxxxxxx> on behalf of Tu 
Dinh <ngoc-tu.dinh@xxxxxxxxxx>
Sent: 15 October 2026 2:16 PM
To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx
Cc: Tu Dinh
Subject: [PATCH v2 1/3] Add definitions and usage of VIF interface V11

Requires a non-functional change in AdapterSetGeneralAttributes to
account for the new MaxCount parameter.

Testing shows that an old driver with FeatureScore=0xFE will still
outrank a new driver with FeatureScore=0xFF even if its device ID no
longer matches. So delete the TODO line in the INF.

Signed-off-by: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>
---
v2: Pass NULL to MaxRingCount according to V11 changes.
---
 include/vif_interface.h | 67 +++++++++++++++++++++++++++++++++++------
 src/xennet.inf          | 14 ++++-----
 src/xennet/adapter.c    |  3 +-
 3 files changed, 66 insertions(+), 18 deletions(-)

diff --git a/include/vif_interface.h b/include/vif_interface.h
index 05d472e..3139b13 100644
--- a/include/vif_interface.h
+++ b/include/vif_interface.h
@@ -499,9 +499,9 @@ typedef union _XENVIF_VIF_CALLBACK_PARAMETERS_V10 
XENVIF_VIF_CALLBACK_PARAMETERS
 */
 typedef VOID
 (*XENVIF_VIF_CALLBACK)(
-    _In_opt_ PVOID                          Argument,
-    _In_ XENVIF_VIF_CALLBACK_TYPE           Type,
-    _In_ PXENVIF_VIF_CALLBACK_PARAMETERS    Parameters
+    _In_opt_ PVOID                              Argument,
+    _In_ XENVIF_VIF_CALLBACK_TYPE               Type,
+    _In_opt_ PXENVIF_VIF_CALLBACK_PARAMETERS    Parameters
     );

 typedef NTSTATUS
@@ -567,7 +567,7 @@ typedef NTSTATUS
     _Out_ PULONGLONG            Value
     );

-/*! \typedef XENVIF_VIF_QUERY_RING_COUNT
+/*! \typedef XENVIF_VIF_QUERY_RING_COUNT_V8
     \brief Query the number of shared rings between frontend
     and backend

@@ -575,11 +575,26 @@ typedef NTSTATUS
     \param Count Buffer to receive the count
 */
 typedef VOID
-(*XENVIF_VIF_QUERY_RING_COUNT)(
+(*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_opt_ PULONG    Count,
+    _Out_opt_ PULONG    MaxCount
+    );
+
 /*! \typedef XENVIF_VIF_UPDATE_HASH_MAPPING
     \brief Update the mapping of hash to transmitter/receiver ring

@@ -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/xennet.inf b/src/xennet.inf
index 79730e8..49a1733 100644
--- a/src/xennet.inf
+++ b/src/xennet.inf
@@ -56,15 +56,15 @@ xennet.sys

 [Inst.NT@INF_ARCH@]
 %XenNetName%=XenNet_Inst,\
-XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_09000005,\
-XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_09000005,\
-XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_09000005
+XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_09000006,\
+XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_09000006,\
+XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_09000006

 [Inst.NT@INF_ARCH@.10.0...25398]
 %XenNetName%=XenNet_Inst_25H2,\
-XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_09000005,\
-XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_09000005,\
-XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_09000005
+XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_09000006,\
+XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_09000006,\
+XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_09000006

 [XenNet_Inst]
 Characteristics=0x84
@@ -74,7 +74,6 @@ BusType=1
 *PhysicalMediaType=14  ; NdisPhysicalMedium802_3
 CopyFiles=XenNet_Copyfiles
 AddReg=Xennet_Inst_AddReg
-; TODO: Remove during next PDO version bump
 FeatureScore=0xFE

 [XenNet_Inst_25H2]
@@ -85,7 +84,6 @@ BusType=1
 *PhysicalMediaType=14  ; NdisPhysicalMedium802_3
 CopyFiles=XenNet_Copyfiles
 AddReg=Xennet_Inst_AddReg
-; TODO: Remove during next PDO version bump
 FeatureScore=0xFE

 [XenNet_Inst_AddReg]
diff --git a/src/xennet/adapter.c b/src/xennet/adapter.c
index 965315d..7cb910c 100644
--- a/src/xennet/adapter.c
+++ b/src/xennet/adapter.c
@@ -3110,7 +3110,8 @@ AdapterSetGeneralAttributes(

     XENVIF_VIF(QueryRingCount,
                &Adapter->VifInterface,
-               &Rss.NumberOfReceiveQueues);
+               &Rss.NumberOfReceiveQueues,
+               NULL);
     Rss.NumberOfInterruptMessages = Rss.NumberOfReceiveQueues;

     if ((ULONG)Adapter->Properties.numrssqueues < Rss.NumberOfReceiveQueues)
--
2.55.0.windows.3


--
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.