public void CreateSetDeleteIpNetEntryTest() { var target = new IN_ADDR(192, 168, 0, 202); Assert.That(GetBestRoute(target, 0, out var fwdRow), Is.Zero); var mibrow = new MIB_IPNETROW(target, fwdRow.dwForwardIfIndex, SendARP(target), MIB_IPNET_TYPE.MIB_IPNET_TYPE_DYNAMIC); MIB_IPNETTABLE t1 = null; Assert.That(() => t1 = GetIpNetTable(true), Throws.Nothing); if (t1 != null && HasVal(t1, mibrow)) { Assert.That(DeleteIpNetEntry(mibrow), Is.Zero); } Assert.That(CreateIpNetEntry(mibrow), Is.Zero); var t = GetIpNetTable(true); Assert.That(HasVal(t, mibrow), Is.True); Assert.That(SetIpNetEntry(mibrow), Is.Zero); Assert.That(DeleteIpNetEntry(mibrow), Is.Zero); var t3 = GetIpNetTable(true); Assert.That(HasVal(t3, mibrow), Is.False); bool HasVal(IEnumerable <MIB_IPNETROW> tb, MIB_IPNETROW r) => tb.Any(tr => tr.dwAddr.S_addr == r.dwAddr.S_addr && tr.dwIndex == r.dwIndex && tr.bPhysAddr.SequenceEqual(r.bPhysAddr)); }
public void CreateSetDeleteIpNetEntryTest() { var target = new IN_ADDR(192, 168, 0, 202); Assert.That(GetBestRoute(target, 0, out var fwdRow), Is.Zero); var mibrow = new MIB_IPNET_ROW2(new SOCKADDR_IN(target), fwdRow.dwForwardIfIndex, SendARP(target)); Assert.That(GetIpNetTable2(ADDRESS_FAMILY.AF_INET, out MIB_IPNET_TABLE2 t1), Is.Zero); foreach (var r in t1) { Debug.WriteLine(r); } if (HasVal(t1, mibrow)) { Assert.That(DeleteIpNetEntry2(ref mibrow), Is.Zero); } Assert.That(CreateIpNetEntry2(ref mibrow), Is.Zero); GetIpNetTable2(ADDRESS_FAMILY.AF_INET, out var t2); Assert.That(HasVal(t2, mibrow), Is.True); Assert.That(DeleteIpNetEntry2(ref mibrow), Is.Zero); GetIpNetTable2(ADDRESS_FAMILY.AF_INET, out var t3); Assert.That(HasVal(t3, mibrow), Is.False); bool HasVal(IEnumerable <MIB_IPNET_ROW2> t, MIB_IPNET_ROW2 r) => t.Any(tr => tr.Address.Ipv4.sin_addr == r.Address.Ipv4.sin_addr && tr.InterfaceIndex == r.InterfaceIndex && tr.PhysicalAddress.SequenceEqual(r.PhysicalAddress)); }
public SOCKADDR_IN(IN_ADDR addr, ushort port = 0) { sin_family = ADDRESS_FAMILY.AF_INET; sin_port = port; sin_addr = addr; sin_zero = 0; }
public void GetRTTAndHopCountTest() { var target = new IN_ADDR(192, 168, 0, 202); Assert.That(GetRTTAndHopCount(target, out var hops, uint.MaxValue, out var rtt), Is.True); TestContext.WriteLine($"{target}: hops={hops} rtt={rtt}"); Assert.That(hops, Is.GreaterThan(0)); Assert.That(rtt, Is.GreaterThanOrEqualTo(0)); }
public void AddDeleteIPAddressTest() { var newIp = new IN_ADDR(192, 168, 0, 252); var mask = new IN_ADDR(255, 255, 255, 0); #pragma warning disable CS0618 // Type or member is obsolete Assert.That(AddIPAddress(newIp, mask, primaryAdapter.IfIndex, out var ctx, out var inst), Is.Zero); #pragma warning restore CS0618 // Type or member is obsolete Assert.That(DeleteIPAddress(ctx), Is.Zero); }
public unsafe void CreateSetDeleteIpNetEntry2UnmanagedPointerTest() { var target = new IN_ADDR(192, 168, 0, 202); Assert.That(GetBestRoute(target, 0, out var fwdRow), ResultIs.Successful); var mibrow = new MIB_IPNET_ROW2(new SOCKADDR_IN(target), fwdRow.dwForwardIfIndex, SendARP(target)); Assert.That(GetIpNetTable2_Unmanaged(ADDRESS_FAMILY.AF_INET, out var t1), ResultIs.Successful); if (HasVal(t1.AsUnmanagedArrayPointer(), mibrow, t1.NumEntries)) { Assert.That(DeleteIpNetEntry2(ref mibrow), ResultIs.Successful); } Assert.That(CreateIpNetEntry2(ref mibrow), ResultIs.Successful); GetIpNetTable2_Unmanaged(ADDRESS_FAMILY.AF_INET, out var t2); Assert.That(HasVal(t2.AsUnmanagedArrayPointer(), mibrow, t1.NumEntries), Is.True); Assert.That(DeleteIpNetEntry2(ref mibrow), ResultIs.Successful); GetIpNetTable2_Unmanaged(ADDRESS_FAMILY.AF_INET, out var t3); Assert.That(HasVal(t3.AsUnmanagedArrayPointer(), mibrow, t1.NumEntries), Is.False);
private static Boolean TryConfigureBindAndStartListen(SOCKET serverSocket, TcpServerSettings settings) { // try disable use of the Nagle algorithm if requested if (settings.UseNagleAlgorithm == false) { var optionValue = -1; unsafe { var tryDisableNagle = WinsockInterop.setsockopt(serverSocket, WinsockInterop.IPPROTO_TCP, WinsockInterop.TCP_NODELAY, (Byte *)&optionValue, sizeof(Int32)); // check if attempt has succeed if (tryDisableNagle == WinsockInterop.SOCKET_ERROR) { return(false); } } } // try enable faster operations on the loopback if requested if (settings.UseFastLoopback) { unsafe { UInt32 optionValue = 1; UInt32 dwBytes; var tryEnableFastLoopbackResult = WinsockInterop.WSAIoctl(serverSocket, WinsockInterop.SIO_LOOPBACK_FAST_PATH, &optionValue, sizeof(UInt32), null, 0, out dwBytes, IntPtr.Zero, IntPtr.Zero); // check if attempt has succeed if (tryEnableFastLoopbackResult == WinsockInterop.SOCKET_ERROR) { return(false); } } } // try bind { // compose address var address = new IN_ADDR { s_addr = 0 }; // compose socket address var socketAddress = new SOCKADDR_IN { sin_family = WinsockInterop.AF_INET, sin_port = WinsockInterop.htons(settings.Port), sin_addr = address }; // try associate address with socket var tryBindResult = WinsockInterop.bind(serverSocket, ref socketAddress, SOCKADDR_IN.Size); if (tryBindResult == WinsockInterop.SOCKET_ERROR) { return(false); } } // try start listen { var tryStartListen = WinsockInterop.listen(serverSocket, settings.AcceptBacklogLength); if (tryStartListen == WinsockInterop.SOCKET_ERROR) { return(false); } } return(true); }