ULONG MaxQueues;
ULONG NumQueues;
BOOLEAN Split;
+ ULONG DisableToeplitz;
PXENVIF_MAC Mac;
PXENVIF_RECEIVER Receiver;
switch (Algorithm) {
case XENVIF_PACKET_HASH_ALGORITHM_NONE:
case XENVIF_PACKET_HASH_ALGORITHM_UNSPECIFIED:
- case XENVIF_PACKET_HASH_ALGORITHM_TOEPLITZ:
status = STATUS_SUCCESS;
break;
+ case XENVIF_PACKET_HASH_ALGORITHM_TOEPLITZ:
+ status = (Frontend->DisableToeplitz != 0) ?
+ STATUS_NOT_SUPPORTED :
+ STATUS_SUCCESS;
+ break;
+
default:
status = STATUS_NOT_SUPPORTED;
break;
ULONG Length;
PCHAR Path;
PCHAR Prefix;
+ HANDLE ParametersKey;
+ ULONG FrontendDisableToeplitz;
NTSTATUS status;
Trace("====>\n");
FrontendSetMaxQueues(*Frontend);
(*Frontend)->Hash.Algorithm = XENVIF_PACKET_HASH_ALGORITHM_UNSPECIFIED;
+ (*Frontend)->DisableToeplitz = 0;
+
+ ParametersKey = DriverGetParametersKey();
+
+ status = RegistryQueryDwordValue(ParametersKey,
+ "FrontendDisableToeplitz",
+ &FrontendDisableToeplitz);
+ if (NT_SUCCESS(status))
+ (*Frontend)->DisableToeplitz = FrontendDisableToeplitz;
+
status = MacInitialize(*Frontend, &(*Frontend)->Mac);
if (!NT_SUCCESS(status))
goto fail6;
fail6:
Error("fail6\n");
+ (*Frontend)->DisableToeplitz = 0;
+
RtlZeroMemory(&(*Frontend)->Hash, sizeof (XENVIF_FRONTEND_HASH));
(*Frontend)->MaxQueues = 0;
MacTeardown(__FrontendGetMac(Frontend));
Frontend->Mac = NULL;
+ Frontend->DisableToeplitz = 0;
+
RtlZeroMemory(&Frontend->Hash, sizeof (XENVIF_FRONTEND_HASH));
Frontend->MaxQueues = 0;
Frontend = Receiver->Frontend;
+ status = FrontendSetHashAlgorithm(Frontend, Algorithm);
+ if (!NT_SUCCESS(status))
+ goto fail1;
+
KeRaiseIrql(DISPATCH_LEVEL, &Irql);
for (Index = 0;
KeLowerIrql(Irql);
- status = FrontendSetHashAlgorithm(Frontend, Algorithm);
- if (!NT_SUCCESS(status))
- goto fail1;
-
return STATUS_SUCCESS;
fail1: