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

[win-pv-devel] [PATCH] Add registry override to disable multicast control



The patch adds a registry parameter 'TransmitterDisableMulticastControl'.
This is a REG_DWORD which, if set to a non-zero value, will prevent
XENVIF from using the dynamic-multicast-control feature of the backend.

Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
---
 src/xenvif/transmitter.c | 37 ++++++++++++++++++++++++-------------
 1 file changed, 24 insertions(+), 13 deletions(-)

diff --git a/src/xenvif/transmitter.c b/src/xenvif/transmitter.c
index ddc8efa..9a6fbd1 100644
--- a/src/xenvif/transmitter.c
+++ b/src/xenvif/transmitter.c
@@ -222,6 +222,7 @@ struct _XENVIF_TRANSMITTER {
     ULONG                       DisableIpVersion6Gso;
     ULONG                       AlwaysCopy;
     ULONG                       ValidateChecksums;
+    ULONG                       DisableMulticastControl;
     KSPIN_LOCK                  Lock;
     PXENBUS_CACHE               PacketCache;
     XENBUS_STORE_INTERFACE      StoreInterface;
@@ -4472,12 +4473,14 @@ TransmitterInitialize(
     (*Transmitter)->DisableIpVersion6Gso = 0;
     (*Transmitter)->AlwaysCopy = 0;
     (*Transmitter)->ValidateChecksums = 0;
+    (*Transmitter)->DisableMulticastControl = 0;
 
     if (ParametersKey != NULL) {
         ULONG   TransmitterDisableIpVersion4Gso;
         ULONG   TransmitterDisableIpVersion6Gso;
         ULONG   TransmitterAlwaysCopy;
         ULONG   TransmitterValidateChecksums;
+        ULONG   TransmitterDisableMulticastControl;
 
         status = RegistryQueryDwordValue(ParametersKey,
                                          "TransmitterDisableIpVersion4Gso",
@@ -4502,6 +4505,12 @@ TransmitterInitialize(
                                          &TransmitterValidateChecksums);
         if (NT_SUCCESS(status))
             (*Transmitter)->ValidateChecksums = TransmitterValidateChecksums;
+
+        status = RegistryQueryDwordValue(ParametersKey,
+                                         "TransmitterDisableMulticastControl",
+                                         &TransmitterDisableMulticastControl);
+        if (NT_SUCCESS(status))
+            (*Transmitter)->DisableMulticastControl = 
TransmitterDisableMulticastControl;
     }
 
     FdoGetDebugInterface(PdoGetFdo(FrontendGetPdo(Frontend)),
@@ -4641,6 +4650,7 @@ fail2:
     (*Transmitter)->DisableIpVersion6Gso = 0;
     (*Transmitter)->AlwaysCopy = 0;
     (*Transmitter)->ValidateChecksums = 0;
+    (*Transmitter)->DisableMulticastControl = 0;
     
     ASSERT(IsZeroMemory(*Transmitter, sizeof (XENVIF_TRANSMITTER)));
     __TransmitterFree(*Transmitter);
@@ -4681,20 +4691,20 @@ TransmitterConnect(
     if (!NT_SUCCESS(status))
         goto fail4;
 
-    status = XENBUS_STORE(Read,
-                          &Transmitter->StoreInterface,
-                          NULL,
-                          FrontendGetBackendPath(Frontend),
-                          "feature-dynamic-multicast-control",
-                          &Buffer);
-    if (!NT_SUCCESS(status)) {
-        Transmitter->MulticastControl = FALSE;
-    } else {
-        Transmitter->MulticastControl = (BOOLEAN)strtol(Buffer, NULL, 2);
+    if (Transmitter->DisableMulticastControl == 0) {
+        status = XENBUS_STORE(Read,
+                              &Transmitter->StoreInterface,
+                              NULL,
+                              FrontendGetBackendPath(Frontend),
+                              "feature-dynamic-multicast-control",
+                              &Buffer);
+        if (NT_SUCCESS(status)) {
+            Transmitter->MulticastControl = (BOOLEAN)strtol(Buffer, NULL, 2);
 
-        XENBUS_STORE(Free,
-                     &Transmitter->StoreInterface,
-                     Buffer);
+            XENBUS_STORE(Free,
+                         &Transmitter->StoreInterface,
+                         Buffer);
+        }
     }
 
     Index = 0;
@@ -5000,6 +5010,7 @@ TransmitterTeardown(
     Transmitter->DisableIpVersion6Gso = 0;
     Transmitter->AlwaysCopy = 0;
     Transmitter->ValidateChecksums = 0;
+    Transmitter->DisableMulticastControl = 0;
 
     ASSERT(IsZeroMemory(Transmitter, sizeof (XENVIF_TRANSMITTER)));
     __TransmitterFree(Transmitter);
-- 
2.5.3


_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

 


Rackspace

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