public void Configure(TestMode testMode, Guid localInterfaceGuid, string address, bool ipv6, UInt16 port) { this.ipv6Mode = ipv6; localPort = port; if (testMode == TestMode.Wlan) { localAddress = NetworkInterfaceDataPathTests.GetWirelessEndpoint(ipv6Mode); } else { localAddress = NetworkInterfaceDataPathTests.GetLanEndpoint(ipv6Mode, localInterfaceGuid); } this.identifier = String.Format(CultureInfo.InvariantCulture, "{0}:{1}", localAddress, localPort); testLogger.LogComment("MulticastReceiver[{0}] local address", this.identifier); testLogger.LogTrace("Creating Multicast Receive Socket"); if (ipv6Mode) { if (testMode == TestMode.Wlan) { using (Wlan wlanApi = new Wlan()) { var wlanInterfaceList = wlanApi.EnumWlanInterfaces(); if (wlanInterfaceList.Count < 1) { throw new TestConfigException("No WLAN Interfaces were discovered. Ensure that WLAN interfaces are enabled, discoverable, and operational."); } var wlanInterface = wlanInterfaceList[0]; UInt32 wlanInterfaceIndex = NetworkInterfaceDataPathTests.GetNetworkIndex(wlanInterface.Id); listenSocket = sockets.CreateMulticastSocket(localAddress, localPort, address, port, wlanInterfaceIndex); } } else { UInt32 lanInterfaceIndex = NetworkInterfaceDataPathTests.GetNetworkIndex(localInterfaceGuid); listenSocket = sockets.CreateMulticastSocket(localAddress, localPort, address, port, lanInterfaceIndex); } } else { listenSocket = sockets.CreateMulticastSocket(localAddress, localPort, address, port); } }
private void SendThread(object obj) { CancellationToken token = (CancellationToken)obj; IntPtr socket = IntPtr.Zero; try { testLogger.LogComment("Multicast Sends from {0}:{1} to {2}:{3}", localAddress, localPort, remoteAddress, remotePort); if (ipv6Mode) { if (testMode == TestMode.Wlan) { using (Wlan wlanApi = new Wlan()) { var wlanInterfaceList = wlanApi.EnumWlanInterfaces(); if (wlanInterfaceList.Count < 1) { throw new TestConfigException("No WLAN Interfaces were discovered. Ensure that WLAN interfaces are enabled, discoverable, and operational."); } var wlanInterface = wlanInterfaceList[0]; UInt32 wlanInterfaceIndex = NetworkInterfaceDataPathTests.GetNetworkIndex(wlanInterface.Id); socket = sockets.CreateMulticastSocket(localAddress, localPort, remoteAddress, remotePort, wlanInterfaceIndex); } } else { UInt32 lanInterfaceIndex = NetworkInterfaceDataPathTests.GetNetworkIndex(localInterfaceGuid); socket = sockets.CreateMulticastSocket(localAddress, localPort, remoteAddress, remotePort, lanInterfaceIndex); } } else { socket = sockets.CreateMulticastSocket(localAddress, localPort, remoteAddress, remotePort); } Byte[] sendData; while (!token.IsCancellationRequested) { sendData = NetworkInterfaceDataPathTests.GeneratePayload(100); testLogger.LogTrace("MulticastSender[{0}] Sending Packet", this.identifier); sockets.SendTo(socket, sendData, remoteAddress, remotePort, ipv6Mode); UnitsTransfered++; Wlan.Sleep(NetworkInterfaceDataPathTests.RandomWaitTime()); DateTime nextLogTime = DateTime.Now; if (DateTime.Now > nextLogTime) { testLogger.LogComment(string.Format(CultureInfo.InvariantCulture, "Sending Multicast Data to {0}:{1}. Packets Sent {2}", remoteAddress, remotePort, UnitsTransfered)); nextLogTime = DateTime.Now.Add(logInterval); } testLogger.LogTrace("MulticastSender[{0}] Packets Sent {1}", this.identifier, UnitsTransfered); } testLogger.LogComment("Multicast Send Completed from {0}:{1} to {2}:{3}. Packet Count = {4}", localAddress, localPort, remoteAddress, remotePort, UnitsTransfered); } catch (Exception error) { testLogger.LogError(error.ToString()); throw; } finally { if (socket != IntPtr.Zero) { testLogger.LogTrace("MulticastSender[{0}] Closing Send Socket", this.identifier); sockets.CloseSocket(socket); } } }