|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 1/2] Make transmitter code the canonical place where multicast control...
...feature is handled
Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
---
src/xenvif/mac.c | 28 +++++++---------------------
src/xenvif/transmitter.c | 18 +++++++++++++++++-
src/xenvif/transmitter.h | 5 +++++
3 files changed, 29 insertions(+), 22 deletions(-)
diff --git a/src/xenvif/mac.c b/src/xenvif/mac.c
index 3d04670..3110dde 100644
--- a/src/xenvif/mac.c
+++ b/src/xenvif/mac.c
@@ -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;
}
diff --git a/src/xenvif/transmitter.c b/src/xenvif/transmitter.c
index 5a70bea..7165ecc 100644
--- a/src/xenvif/transmitter.c
+++ b/src/xenvif/transmitter.c
@@ -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;
diff --git a/src/xenvif/transmitter.h b/src/xenvif/transmitter.h
index 31198fb..3e72b74 100644
--- a/src/xenvif/transmitter.h
+++ b/src/xenvif/transmitter.h
@@ -141,4 +141,9 @@ TransmitterQueryLargePacketSize(
OUT PULONG Size
);
+BOOLEAN
+TransmitterHasMulticastControl(
+ IN PXENVIF_TRANSMITTER Transmitter
+ );
+
#endif // _XENVIF_TRANSMITTER_H
--
2.1.1
_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |