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

Re: [PATCH v2 1/3] Generalize AddressTable as address structs


  • To: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>, "win-pv-devel@xxxxxxxxxxxxxxxxxxxx" <win-pv-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Owen Smith <owen.smith@xxxxxxxxxx>
  • Date: Wed, 29 Jul 2026 08:21:54 +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=GSUSSHKjhO539allwd8O6vq2rs1KcVYoMcyC65LUFvo=; b=s/rmd9RZWNi+9J2GBGTgG44fDflEgXc20SiBCsnTWSSZaunbEzt8fQD4FrewLEz2tjsOQnW/Ct1UdVQrQC22XPMF+1Kzyp8AIzhv4Mp5NQl9N7JjZ3BnY+FiUmgQjufDRkVmLYBNbFBMGkbvQ6xDFhfCAJQb204xag/hz6frfusvFfkcV3m8ZtKo0ra66Or5t8moPR9aVSvaD+ti60ChlCeXru0BfOEwYECy4YDizdOG2BxXfOpMxjWOvVgTjnxiOeYtwOxrIqjW72ew3S8d9pqTyJo2EMoPRBzRFKpSeB4xUPSTIlq7ZPDbFKbN8E2VJQ2UEe6rVXbQe/7j9G3cIA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tD1yU63lfCYNzH10N7uRNEBLcKogJCHyVYzt1Tbv2p3CaqKgXjG4F1//mALws7Ue0vrvE9SgRI9K+ZwRysnMTCaOdkdMwnNROuACxWS2U83vKORar7PTsYE4GlGPhrVQ/r0oWkqiVF67oCApgBe83PgoF9Y3RWs0etCTsvqsyRTjYPibkQl7wDS9Vl9OMDy0nMlTkCz+Fs0Z3DM77gR5XgjKyAO67zjNzNgNtxhQ2ZGu5vZRY3Jdd89wvS1jv0S1vZDnRlfytdz0xo9m/rpWD/Jxo0d7JaXP3Vq7+SDJ5jyBU7UBPXlEvG4Dfke3wHwGuf/VkW3D5+p/Wo2GubmV6Q==
  • 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: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
  • Delivery-date: Wed, 29 Jul 2026 08:22:02 +0000
  • List-id: Developer list for the Windows PV Drivers subproject <win-pv-devel.lists.xenproject.org>
  • Msip_labels:
  • Thread-index: AQHdHp+nDSkof9vb106cd/v66dPp5LaEKVGr
  • Thread-topic: [PATCH v2 1/3] Generalize AddressTable as address structs

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: 28 July 2026 3:44 PM
To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx
Cc: Tu Dinh
Subject: [PATCH v2 1/3] Generalize AddressTable as address structs

A frontend address may include additional information beyond what a
SOCKADDR_INET contains (e.g. address prefixes).

Bring the address table under a struct to allow including extra info for
each address.

Signed-off-by: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>
---
 src/xenvif/frontend.c | 40 ++++++++++++++++++++++++++--------------
 1 file changed, 26 insertions(+), 14 deletions(-)

diff --git a/src/xenvif/frontend.c b/src/xenvif/frontend.c
index 256b35b..4184b14 100644
--- a/src/xenvif/frontend.c
+++ b/src/xenvif/frontend.c
@@ -67,6 +67,10 @@ typedef struct _XENVIF_FRONTEND_HASH {
     ULONG                           Size;
 } XENVIF_FRONTEND_HASH, *PXENVIF_FRONTEND_HASH;

+typedef struct _XENVIF_ADDRESS {
+    SOCKADDR_INET               Address;
+} XENVIF_ADDRESS, *PXENVIF_ADDRESS;
+
 struct _XENVIF_FRONTEND {
     PXENVIF_PDO                 Pdo;
     PCHAR                       Path;
@@ -104,7 +108,7 @@ struct _XENVIF_FRONTEND {
     PXENVIF_THREAD              MibThread;
     CHAR                        Alias[IF_MAX_STRING_SIZE + 1];
     NET_IFINDEX                 InterfaceIndex;
-    PSOCKADDR_INET              AddressTable;
+    PXENVIF_ADDRESS             AddressTable;
     ULONG                       AddressCount;

     XENVIF_FRONTEND_HASH        Hash;
@@ -541,43 +545,47 @@ FrontendInsertAddress(
     )
 {
     ULONG                   Index;
-    PSOCKADDR_INET          Table;
+    PXENVIF_ADDRESS         Table;
     NTSTATUS                status;

     Trace("====>\n");

     for (Index = 0; Index < Frontend->AddressCount; Index++) {
-        if (Frontend->AddressTable[Index].si_family != Address->si_family)
+        PXENVIF_ADDRESS     Entry = &Frontend->AddressTable[Index];
+
+        if (Entry->Address.si_family != Address->si_family)
             continue;

         if (Address->si_family == AF_INET) {
             if (RtlEqualMemory(&Address->Ipv4.sin_addr.s_addr,
-                               
&Frontend->AddressTable[Index].Ipv4.sin_addr.s_addr,
+                               &Entry->Address.Ipv4.sin_addr.s_addr,
                                  IPV4_ADDRESS_LENGTH))
                 goto done;
         } else {
             ASSERT3U(Address->si_family, ==, AF_INET6);

             if (RtlEqualMemory(&Address->Ipv6.sin6_addr.s6_addr,
-                               
&Frontend->AddressTable[Index].Ipv6.sin6_addr.s6_addr,
+                               &Entry->Address.Ipv6.sin6_addr.s6_addr,
                                IPV6_ADDRESS_LENGTH))
                 goto done;
         }
     }

     // We have an address we've not seen before so grow the table
-    Table = __FrontendAllocate(sizeof (SOCKADDR_INET) * 
(Frontend->AddressCount + 1));
+    Table = __FrontendAllocate(sizeof (XENVIF_ADDRESS) * 
(Frontend->AddressCount + 1));

     status = STATUS_NO_MEMORY;
     if (Table == NULL)
         goto fail1;

-    RtlCopyMemory(Table, Frontend->AddressTable, sizeof (SOCKADDR_INET) * 
Frontend->AddressCount);
+    RtlCopyMemory(Table,
+                  Frontend->AddressTable,
+                  sizeof (XENVIF_ADDRESS) * Frontend->AddressCount);

     if (Frontend->AddressCount != 0)
         __FrontendFree(Frontend->AddressTable);

-    Table[Frontend->AddressCount++] = *Address;
+    Table[Frontend->AddressCount++] = (XENVIF_ADDRESS){ *Address };
     Frontend->AddressTable = Table;

 done:
@@ -819,13 +827,15 @@ FrontendDumpAddressTable(
     IpVersion6Count = 0;

     for (Index = 0; Index < Frontend->AddressCount; Index++) {
-        switch (Frontend->AddressTable[Index].si_family) {
+        PXENVIF_ADDRESS     Entry = &Frontend->AddressTable[Index];
+
+        switch (Entry->Address.si_family) {
         case AF_INET: {
             IPV4_ADDRESS    Address;
             CHAR            Node[sizeof ("ipv4/XXXXXXXXXX")];

             RtlCopyMemory(Address.Byte,
-                          &Frontend->AddressTable[Index].Ipv4.sin_addr.s_addr,
+                          &Entry->Address.Ipv4.sin_addr.s_addr,
                           IPV4_ADDRESS_LENGTH);

             status = RtlStringCbPrintfA(Node,
@@ -851,7 +861,7 @@ FrontendDumpAddressTable(
             CHAR            Node[sizeof ("ipv6/XXXXXXXXXX")];

             RtlCopyMemory(Address.Byte,
-                          
&Frontend->AddressTable[Index].Ipv6.sin6_addr.s6_addr,
+                          &Entry->Address.Ipv6.sin6_addr.s6_addr,
                           IPV6_ADDRESS_LENGTH);

             status = RtlStringCbPrintfA(Node,
@@ -1307,12 +1317,14 @@ FrontendAdvertiseIpAddresses(
     KeAcquireSpinLock(&Frontend->Lock, &Irql);

     for (Index = 0; Index < Frontend->AddressCount; Index++) {
-        switch (Frontend->AddressTable[Index].si_family) {
+        PXENVIF_ADDRESS     Entry = &Frontend->AddressTable[Index];
+
+        switch (Entry->Address.si_family) {
         case AF_INET: {
             IPV4_ADDRESS    Address;

             RtlCopyMemory(Address.Byte,
-                          &Frontend->AddressTable[Index].Ipv4.sin_addr.s_addr,
+                          &Entry->Address.Ipv4.sin_addr.s_addr,
                           IPV4_ADDRESS_LENGTH);

             TransmitterQueueArp(Transmitter, &Address);
@@ -1322,7 +1334,7 @@ FrontendAdvertiseIpAddresses(
             IPV6_ADDRESS    Address;

             RtlCopyMemory(Address.Byte,
-                          
&Frontend->AddressTable[Index].Ipv6.sin6_addr.s6_addr,
+                          &Entry->Address.Ipv6.sin6_addr.s6_addr,
                           IPV6_ADDRESS_LENGTH);

             TransmitterQueueNeighbourAdvertisement(Transmitter, &Address);
--
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®.