From: Paul Durrant Date: Wed, 20 Jan 2016 17:36:01 +0000 (+0000) Subject: Make transmitter code the canonical place where multicast control... X-Git-Tag: 8.2.0-rc1~65 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=a4fe70fb7ab61f3b8056165033db924467d2d850;p=pvdrivers%2Fwin%2Fxenvif.git Make transmitter code the canonical place where multicast control... ...feature is handled Signed-off-by: Paul Durrant --- 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