]> xenbits.xensource.com Git - pvdrivers/win/xenvif.git/commitdiff
Make transmitter code the canonical place where multicast control...
authorPaul Durrant <paul.durrant@citrix.com>
Wed, 20 Jan 2016 17:36:01 +0000 (17:36 +0000)
committerPaul Durrant <paul.durrant@citrix.com>
Thu, 28 Jan 2016 14:53:29 +0000 (14:53 +0000)
...feature is handled

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
src/xenvif/mac.c
src/xenvif/transmitter.c
src/xenvif/transmitter.h

index 3d04670034dfc967e079e76e444943f412edd5ba..3110dde76b44417c49ee39d05a54ae07a934eef4 100644 (file)
@@ -58,7 +58,6 @@ struct _XENVIF_MAC {
     ETHERNET_ADDRESS        BroadcastAddress;
     LIST_ENTRY              MulticastList;
     ULONG                   MulticastCount;
-    BOOLEAN                 MulticastControl;
     XENVIF_MAC_FILTER_LEVEL FilterLevel[ETHERNET_ADDRESS_TYPE_COUNT];
     XENBUS_DEBUG_INTERFACE  DebugInterface;
     PXENBUS_DEBUG_CALLBACK  DebugCallback;
@@ -391,22 +390,6 @@ MacConnect(
 
     Mac->MaximumFrameSize = (ULONG)Mtu + sizeof (ETHERNET_TAGGED_HEADER);
 
-    status = XENBUS_STORE(Read,
-                          &Mac->StoreInterface,
-                          NULL,
-                          FrontendGetBackendPath(Frontend),
-                          "feature-multicast-control",
-                          &Buffer);
-    if (!NT_SUCCESS(status)) {
-        Mac->MulticastControl = FALSE;
-    } else {
-        Mac->MulticastControl = (BOOLEAN)strtol(Buffer, NULL, 2);
-
-        XENBUS_STORE(Free,
-                     &Mac->StoreInterface,
-                     Buffer);
-    }
-
     status = XENBUS_DEBUG(Register,
                           &Mac->DebugInterface,
                           __MODULE__ "|MAC",
@@ -548,8 +531,6 @@ MacDisconnect(
                  Mac->DebugCallback);
     Mac->DebugCallback = NULL;
 
-    Mac->MulticastControl = FALSE;
-
     Mac->MaximumFrameSize = 0;
 
     RtlZeroMemory(&Mac->BroadcastAddress, sizeof (ETHERNET_ADDRESS));
@@ -971,9 +952,14 @@ MacApplyFilters(
             break;
 
         case XENVIF_MAC_FILTER_MATCHING: {
-            PLIST_ENTRY ListEntry;
+            PXENVIF_FRONTEND    Frontend;
+            PXENVIF_TRANSMITTER Transmitter;
+            PLIST_ENTRY         ListEntry;
+
+            Frontend = Mac->Frontend;
+            Transmitter = FrontendGetTransmitter(Frontend);
 
-            if (Mac->MulticastControl) {
+            if (TransmitterHasMulticastControl(Transmitter)) {
                 Allow = TRUE;
                 break;
             }
index 5a70beaaae7b0fd91d1f0e5509cf259d3fd4f17f..7165ecc1c639f526da7e8f3dd338e232241c99b9 100644 (file)
@@ -4019,6 +4019,22 @@ fail1:
     return status;
 }
 
+static FORCEINLINE BOOLEAN
+__TransmitterHasMulticastControl(
+    IN  PXENVIF_TRANSMITTER Transmitter
+    )
+{
+    return Transmitter->MulticastControl;
+}
+
+BOOLEAN
+TransmitterHasMulticastControl(
+    IN  PXENVIF_TRANSMITTER Transmitter
+    )
+{
+    return __TransmitterHasMulticastControl(Transmitter);
+}
+
 static FORCEINLINE NTSTATUS
 __TransmitterRingQueueMulticastControl(
     IN  PXENVIF_TRANSMITTER_RING    Ring,
@@ -4034,7 +4050,7 @@ __TransmitterRingQueueMulticastControl(
     Transmitter = Ring->Transmitter;
 
     status = STATUS_NOT_SUPPORTED;
-    if (!Transmitter->MulticastControl)
+    if (!__TransmitterHasMulticastControl(Transmitter))
         goto fail1;
 
     Frontend = Transmitter->Frontend;
index 31198fb902bef3d62df013018e02f486caeb2975..3e72b740ab636a9738d97c6d3014abfd3313dd66 100644 (file)
@@ -141,4 +141,9 @@ TransmitterQueryLargePacketSize(
     OUT PULONG                  Size
     );
 
+BOOLEAN
+TransmitterHasMulticastControl(
+    IN  PXENVIF_TRANSMITTER Transmitter
+    );
+
 #endif  // _XENVIF_TRANSMITTER_H