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

Re: [PATCH v2 2/3] Refactor FrontendDumpIPv4/IPv6Address


  • 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:58 +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=1H+d9ZDKDz2vOtRzrlMWEfDNwX7YxgGyGYLzt6AxU/A=; b=JWeEkKr1Tnuy5MDpuLkx0uRGkhfu6EYVk8gDck8NLbdwAm0WcEA1T2f04wyB79spzh8O710MMFkxlT2fQDnov7b0Disn2jyVuaIFXOynbEzBJ4FHadhTXJnq2mhOa71199TAsV1BB0HvHe5JEiM+7aNbInMolbRN4T9C/5p+kI3NJ6AJc2BwgEEyDP8lv7WgCEXM1S3bp9P8FQfeTm2RPWzC1jtRqLAJopfVlbU2GqHJh84ayHmoohzVZO3WX75aSKT6jH1D0RZne6AMb45bn67dpwLf/81smTtwnJmHTyTZTeNkZkYW19FUOmrP0GobFInOTuPfTIR4zl1ChAfYow==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kBi8Zm0JSV4LB6mSAx/TXx9Si99Ic1lbs3rj/oLSlqSg4epZTVuz4/GkX9PlipNMX93VrpbM0JGYlon1LtYS5/24W5VTw/oiVxMIwZJeGR6cRZg96TEGYV13qJCiniNOlR0xkXLBTUQM0fXnjdyarPr4pY9plAQ6ECEn+IOFCO07Pn4+ApvuNfg0qrxmSrVayoSHt3fQdEyMNtp604rcA6RV82THvY7k5hL8G/6HJJwfpAaOVLcrUVIYRgIeFA8tB8MhTNtTmQitRe1ING2C98QprWAit8A3tRPbG5JwIBAIANAuTurwdLuJNrsOKT55sMsgMCIysfR8aKoaaZYTsg==
  • 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:04 +0000
  • List-id: Developer list for the Windows PV Drivers subproject <win-pv-devel.lists.xenproject.org>
  • Msip_labels:
  • Thread-index: AQHdHp+oOTxj9EUSUEeHDJzSfItO67aEKWQj
  • Thread-topic: [PATCH v2 2/3] Refactor FrontendDumpIPv4/IPv6Address

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 2/3] Refactor FrontendDumpIPv4/IPv6Address

Pass the entire PXENVIF_ADDRESS and integer address index to these
functions instead of inlining it into FrontendDumpAddressTable.

This lets each dump function decide where to put the xenstore values.

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

diff --git a/src/xenvif/frontend.c b/src/xenvif/frontend.c
index 4184b14..680a338 100644
--- a/src/xenvif/frontend.c
+++ b/src/xenvif/frontend.c
@@ -681,42 +681,67 @@ static NTSTATUS
 FrontendDumpIPv4Address(
     _In_ PXENVIF_FRONTEND           Frontend,
     _In_ PXENBUS_STORE_TRANSACTION  Transaction,
-    _In_ PSTR                       Node,
-    _In_ PIPV4_ADDRESS              Address
+    _In_ ULONG                      AddressIndex,
+    _In_ PXENVIF_ADDRESS            Entry
     )
 {
+    CHAR                            Node[sizeof ("ipv4/XXXXXXXXXX")];
+    PIN_ADDR                        Address;
     NTSTATUS                        status;

+    Address = &Entry->Address.Ipv4.sin_addr;
+
+    status = RtlStringCbPrintfA(Node,
+                                sizeof (Node),
+                                "ipv4/%u",
+                                AddressIndex);
+    if (!NT_SUCCESS(status))
+        return status;
+
     status = XENBUS_STORE(Printf,
                           &Frontend->StoreInterface,
                           Transaction,
                           __FrontendGetPrefix(Frontend),
                           Node,
                           "%u.%u.%u.%u",
-                          Address->Byte[0],
-                          Address->Byte[1],
-                          Address->Byte[2],
-                          Address->Byte[3]);
-    return status;
+                          Address->S_un.S_un_b.s_b1,
+                          Address->S_un.S_un_b.s_b2,
+                          Address->S_un.S_un_b.s_b3,
+                          Address->S_un.S_un_b.s_b4);
+    if (!NT_SUCCESS(status))
+        return status;
+
+    return STATUS_SUCCESS;
 }

 static NTSTATUS
 FrontendDumpIPv6Address(
     _In_ PXENVIF_FRONTEND           Frontend,
     _In_ PXENBUS_STORE_TRANSACTION  Transaction,
-    _In_ PSTR                       Node,
-    _In_ PIPV6_ADDRESS              Address
+    _In_ ULONG                      AddressIndex,
+    _In_ PXENVIF_ADDRESS            Entry
     )
 {
+    CHAR                            Node[sizeof ("ipv6/XXXXXXXXXX")];
     ULONG                           Index;
     ULONG                           Count;
     ULONG                           ZeroIndex;
     ULONG                           ZeroCount;
+    PIN6_ADDR                       Address;
     NTSTATUS                        status;

+    Address = &Entry->Address.Ipv6.sin6_addr;
+
+    status = RtlStringCbPrintfA(Node,
+                                sizeof (Node),
+                                "ipv6/%u",
+                                AddressIndex);
+    if (!NT_SUCCESS(status))
+        return status;
+
     Count = ZeroIndex = ZeroCount = 0;
     for (Index = 0; Index < 8; Index++) {
-        if (Address->Word[Index] == 0)
+        if (Address->u.Word[Index] == 0)
             Count++;
         else
             Count = 0;
@@ -746,7 +771,7 @@ FrontendDumpIPv6Address(
                 status = RtlStringCchPrintfA(Parts[Index],
                                              sizeof(Parts[Index]),
                                              Index == 0 ? "%hx" : ":%hx",
-                                             NTOHS(Address->Word[Index]));
+                                             NTOHS(Address->u.Word[Index]));
                 if (!NT_SUCCESS(status))
                     return status;
             }
@@ -773,17 +798,19 @@ FrontendDumpIPv6Address(
                               __FrontendGetPrefix(Frontend),
                               Node,
                               "%hx:%hx:%hx:%hx:%hx:%hx:%hx:%hx",
-                              NTOHS(Address->Word[0]),
-                              NTOHS(Address->Word[1]),
-                              NTOHS(Address->Word[2]),
-                              NTOHS(Address->Word[3]),
-                              NTOHS(Address->Word[4]),
-                              NTOHS(Address->Word[5]),
-                              NTOHS(Address->Word[6]),
-                              NTOHS(Address->Word[7]));
+                              NTOHS(Address->u.Word[0]),
+                              NTOHS(Address->u.Word[1]),
+                              NTOHS(Address->u.Word[2]),
+                              NTOHS(Address->u.Word[3]),
+                              NTOHS(Address->u.Word[4]),
+                              NTOHS(Address->u.Word[5]),
+                              NTOHS(Address->u.Word[6]),
+                              NTOHS(Address->u.Word[7]));
     }
+    if (!NT_SUCCESS(status))
+        return status;

-    return status;
+    return STATUS_SUCCESS;
 }

 static NTSTATUS
@@ -831,25 +858,10 @@ FrontendDumpAddressTable(

         switch (Entry->Address.si_family) {
         case AF_INET: {
-            IPV4_ADDRESS    Address;
-            CHAR            Node[sizeof ("ipv4/XXXXXXXXXX")];
-
-            RtlCopyMemory(Address.Byte,
-                          &Entry->Address.Ipv4.sin_addr.s_addr,
-                          IPV4_ADDRESS_LENGTH);
-
-            status = RtlStringCbPrintfA(Node,
-                                        sizeof (Node),
-                                        "ipv4/%u",
-                                        IpVersion4Count);
-            ASSERT(NT_SUCCESS(status));
-            if (!NT_SUCCESS(status))
-                continue;
-
             status = FrontendDumpIPv4Address(Frontend,
                                              Transaction,
-                                             Node,
-                                             &Address);
+                                             Index,
+                                             Entry);
             if (!NT_SUCCESS(status))
                 goto fail4;

@@ -857,25 +869,10 @@ FrontendDumpAddressTable(
             break;
         }
         case AF_INET6: {
-            IPV6_ADDRESS    Address;
-            CHAR            Node[sizeof ("ipv6/XXXXXXXXXX")];
-
-            RtlCopyMemory(Address.Byte,
-                          &Entry->Address.Ipv6.sin6_addr.s6_addr,
-                          IPV6_ADDRESS_LENGTH);
-
-            status = RtlStringCbPrintfA(Node,
-                                        sizeof (Node),
-                                        "ipv6/%u",
-                                        IpVersion6Count);
-            ASSERT(NT_SUCCESS(status));
-            if (!NT_SUCCESS(status))
-                continue;
-
             status = FrontendDumpIPv6Address(Frontend,
                                              Transaction,
-                                             Node,
-                                             &Address);
+                                             Index,
+                                             Entry);
             if (!NT_SUCCESS(status))
                 goto fail4;

--
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®.