Exemple #1
0
        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));
        }
Exemple #2
0
        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));
        }
Exemple #3
0
 public SOCKADDR_IN(IN_ADDR addr, ushort port = 0)
 {
     sin_family = ADDRESS_FAMILY.AF_INET;
     sin_port   = port;
     sin_addr   = addr;
     sin_zero   = 0;
 }
Exemple #4
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));
        }
Exemple #5
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);
        }
Exemple #6
0
        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);
Exemple #7
0
        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);
        }