Esempio n. 1
0
        public void GetIpForwardEntryTable2Test()
        {
            Assert.That(GetIpForwardTable2(ADDRESS_FAMILY.AF_UNSPEC, out var table), Is.Zero);
            Assert.That(table.NumEntries, Is.GreaterThan(0));
            Assert.That(() => table.Table, Throws.Nothing);

            var goodRow = table.Table[0];
            var row     = new MIB_IPFORWARD_ROW2 {
                DestinationPrefix = goodRow.DestinationPrefix, NextHop = goodRow.NextHop, InterfaceLuid = goodRow.InterfaceLuid
            };

            Assert.That(GetIpForwardEntry2(ref row), Is.Zero);
            Assert.That(row.InterfaceIndex, Is.Not.Zero.And.EqualTo(goodRow.InterfaceIndex));
        }
Esempio n. 2
0
        public void CreateSetDeleteIpForwardEntry2Test()
        {
            var mibrow = new MIB_IPFORWARD_ROW2(new IP_ADDRESS_PREFIX((SOCKADDR_IN6)IN6_ADDR.Unspecified, 128), GetV6Addr(), primaryAdapter.Luid)
            {
                Protocol = MIB_IPFORWARD_PROTO.MIB_IPPROTO_NETMGMT,
                Metric   = 1
            };

            DeleteIpForwardEntry2(ref mibrow);

            Assert.That(CreateIpForwardEntry2(ref mibrow), ResultIs.Successful);

            mibrow.PreferredLifetime = 500000;
            Assert.That(SetIpForwardEntry2(mibrow), ResultIs.Successful);
            Assert.That(GetIpForwardEntry2(ref mibrow), ResultIs.Successful);

            Assert.That(DeleteIpForwardEntry2(ref mibrow), ResultIs.Successful);
        }
Esempio n. 3
0
        public void CreateSetDeleteIpForwardEntry2Test()
        {
            var target = new IN6_ADDR(new byte[] { 0xfe, 0x3f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x20, 0x00 });
            var mibrow = new MIB_IPFORWARD_ROW2(new IP_ADDRESS_PREFIX((SOCKADDR_IN6)IN6_ADDR.Unspecified, 128), (SOCKADDR_IN6)target, primaryAdapter.Luid)
            {
                Protocol = MIB_IPFORWARD_PROTO.MIB_IPPROTO_NETMGMT,
                Metric   = 1
            };

            DeleteIpForwardEntry2(ref mibrow);

            Assert.That(CreateIpForwardEntry2(ref mibrow), Is.Zero);

            mibrow.PreferredLifetime = 500000;
            Assert.That(SetIpForwardEntry2(mibrow), Is.Zero);
            Assert.That(GetIpForwardEntry2(ref mibrow), Is.Zero);

            Assert.That(DeleteIpForwardEntry2(ref mibrow), Is.Zero);
        }
Esempio n. 4
0
 /// <summary>
 /// XP - IPv4 only
 /// </summary>
 /// <param name="destination"></param>
 /// <param name="prefix"></param>
 /// <param name="gateway"></param>
 /// <param name="interfaceIndex"></param>
 public static void DeleteRoute(string destination, string prefix, string gateway, string interfaceIndex)
 {
     if (Environment.OSVersion.Version.CompareTo(new Version("6.0")) < 0)
     {
         MIB_IPFORWARDROW route = new MIB_IPFORWARDROW();
         route.dwForwardDest = BitConverter.ToUInt32(IPAddress.Parse(destination).GetAddressBytes().ToArray(), 0);
         route.dwForwardMask = BitConverter.ToUInt32(IPAddress.Parse(prefix).GetAddressBytes().ToArray(), 0);
         route.dwForwardNextHop = BitConverter.ToUInt32(IPAddress.Parse(gateway).GetAddressBytes().ToArray(), 0);
         route.dwForwardIfIndex = uint.Parse(interfaceIndex);
         route.dwForwardProto = NL_ROUTE_PROTOCOL.MIB_IPPROTO_NETMGMT;
         IntPtr pRoute = Marshal.AllocHGlobal(Marshal.SizeOf(route));
         Marshal.StructureToPtr(route, pRoute, false);
         DeleteIpForwardEntry(pRoute);
         Marshal.DestroyStructure(pRoute, typeof(MIB_IPFORWARDROW));
         Marshal.FreeHGlobal(pRoute);
     }
     else
     {
         MIB_IPFORWARD_ROW2 route2 = new MIB_IPFORWARD_ROW2();
         uint prefixLength = 0;
         if (IPAddress.Parse(destination).AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
         {
             SOCKADDR_IN address = new SOCKADDR_IN();
             address.sin_family = FAMILY.AF_INET;
             address.sin_addr.S_addr = BitConverter.ToUInt32(IPAddress.Parse(destination).GetAddressBytes().ToArray(), 0);
             route2.DestinationPrefix.Prefix.Ipv4 = address;
             uint ipMask = BitConverter.ToUInt32(IPAddress.Parse(prefix).GetAddressBytes().Reverse().ToArray(), 0);
             while (ipMask > 0)
             {
                 prefixLength++;
                 ipMask <<= 1;
             }
             address.sin_addr.S_addr = BitConverter.ToUInt32(IPAddress.Parse(gateway).GetAddressBytes().ToArray(), 0);
             route2.NextHop.Ipv4 = address;
         }
         else
         {
             SOCKADDR_IN6 address = new SOCKADDR_IN6();
             address.sin6_family = FAMILY.AF_INET6;
             address.sin6_addr.Byte = IPAddress.Parse(destination).GetAddressBytes().ToArray();
             route2.DestinationPrefix.Prefix.Ipv6 = address;
             prefixLength = uint.Parse(prefix);
             address.sin6_addr.Byte = IPAddress.Parse(gateway).GetAddressBytes().ToArray();
             route2.NextHop.Ipv6 = address;
         }
         route2.DestinationPrefix.PrefixLength = prefixLength;
         route2.InterfaceIndex = uint.Parse(interfaceIndex);
         IntPtr pRoute = Marshal.AllocHGlobal(Marshal.SizeOf(route2));
         Marshal.StructureToPtr(route2, pRoute, false);
         DeleteIpForwardEntry2(pRoute);
         Marshal.DestroyStructure(pRoute, typeof(MIB_IPFORWARD_ROW2));
         Marshal.FreeHGlobal(pRoute);
     }
 }