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)); }
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); }
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); }
/// <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); } }