You've already forked linux-packaging-mono
Imported Upstream version 4.2.0.179
Former-commit-id: 0a113cb3a6feb7873f632839b1307cc6033cd595
This commit is contained in:
committed by
Jo Shields
parent
183bba2c9a
commit
6992685b86
@ -70,6 +70,11 @@ namespace System.Net.NetworkInformation {
|
||||
}
|
||||
}
|
||||
|
||||
public static IPAddress GetNetMask (IPAddress address)
|
||||
{
|
||||
return nif.GetNetMask (address);
|
||||
}
|
||||
|
||||
public abstract IPInterfaceProperties GetIPProperties ();
|
||||
public abstract IPv4InterfaceStatistics GetIPv4Statistics ();
|
||||
public abstract PhysicalAddress GetPhysicalAddress ();
|
||||
@ -101,12 +106,12 @@ namespace System.Net.NetworkInformation {
|
||||
|
||||
class MacOsNetworkInterfaceAPI : UnixNetworkInterfaceAPI
|
||||
{
|
||||
const int AF_INET = 2;
|
||||
const int AF_INET6 = 30;
|
||||
const int AF_LINK = 18;
|
||||
|
||||
public override NetworkInterface [] GetAllNetworkInterfaces ()
|
||||
{
|
||||
const int AF_INET = 2;
|
||||
const int AF_INET6 = 30;
|
||||
const int AF_LINK = 18;
|
||||
|
||||
var interfaces = new Dictionary <string, MacOsNetworkInterface> ();
|
||||
IntPtr ifap;
|
||||
if (getifaddrs (out ifap) != 0)
|
||||
@ -210,6 +215,37 @@ namespace System.Net.NetworkInformation {
|
||||
{
|
||||
return if_nametoindex ("lo0");
|
||||
}
|
||||
|
||||
public override IPAddress GetNetMask (IPAddress address)
|
||||
{
|
||||
IntPtr ifap;
|
||||
if (getifaddrs (out ifap) != 0)
|
||||
throw new SystemException ("getifaddrs() failed");
|
||||
|
||||
try {
|
||||
IntPtr next = ifap;
|
||||
while (next != IntPtr.Zero) {
|
||||
MacOsStructs.ifaddrs addr = (MacOsStructs.ifaddrs) Marshal.PtrToStructure (next, typeof (MacOsStructs.ifaddrs));
|
||||
|
||||
if (addr.ifa_addr != IntPtr.Zero) {
|
||||
// optain IPAddress
|
||||
MacOsStructs.sockaddr sockaddr = (MacOsStructs.sockaddr) Marshal.PtrToStructure (addr.ifa_addr, typeof (MacOsStructs.sockaddr));
|
||||
|
||||
if (sockaddr.sa_family == AF_INET) {
|
||||
MacOsStructs.sockaddr_in sockaddrin = (MacOsStructs.sockaddr_in) Marshal.PtrToStructure (addr.ifa_addr, typeof (MacOsStructs.sockaddr_in));
|
||||
var saddress = new IPAddress (sockaddrin.sin_addr);
|
||||
if (address.Equals (saddress))
|
||||
return new IPAddress(((sockaddr_in)Marshal.PtrToStructure(addr.ifa_netmask, typeof(sockaddr_in))).sin_addr);
|
||||
}
|
||||
}
|
||||
next = addr.ifa_next;
|
||||
}
|
||||
} finally {
|
||||
freeifaddrs (ifap);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
class LinuxNetworkInterfaceAPI : UnixNetworkInterfaceAPI
|
||||
@ -367,6 +403,11 @@ namespace System.Net.NetworkInformation {
|
||||
{
|
||||
return if_nametoindex ("lo");
|
||||
}
|
||||
|
||||
public override IPAddress GetNetMask (IPAddress address)
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
}
|
||||
|
||||
class Win32NetworkInterfaceAPI : NetworkInterfaceFactory
|
||||
@ -410,10 +451,16 @@ namespace System.Net.NetworkInformation {
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
|
||||
public override IPAddress GetNetMask (IPAddress address)
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
}
|
||||
|
||||
public abstract NetworkInterface [] GetAllNetworkInterfaces ();
|
||||
public abstract int GetLoopbackInterfaceIndex ();
|
||||
public abstract IPAddress GetNetMask (IPAddress address);
|
||||
|
||||
public static NetworkInterfaceFactory Create ()
|
||||
{
|
||||
|
Reference in New Issue
Block a user