2 using System.Runtime.InteropServices;
4 namespace System.Net.NetworkInformation {
5 namespace MacOsStructs {
6 internal struct ifaddrs
8 public IntPtr ifa_next;
9 public string ifa_name;
10 public uint ifa_flags;
11 public IntPtr ifa_addr;
12 public IntPtr ifa_netmask;
13 public IntPtr ifa_dstaddr;
14 public IntPtr ifa_data;
17 internal struct sockaddr
20 public byte sa_family;
23 internal struct sockaddr_in
26 public byte sin_family;
27 public ushort sin_port;
31 internal struct in6_addr
33 [MarshalAs (UnmanagedType.ByValArray, SizeConst=16)]
34 public byte[] u6_addr8;
37 internal struct sockaddr_in6
40 public byte sin6_family;
41 public ushort sin6_port;
42 public uint sin6_flowinfo;
43 public in6_addr sin6_addr;
44 public uint sin6_scope_id;
47 internal struct sockaddr_dl
50 public byte sdl_family;
51 public ushort sdl_index;
56 public byte[] sdl_data;
58 internal void Read (IntPtr ptr)
60 sdl_len = Marshal.ReadByte (ptr, 0);
61 sdl_family = Marshal.ReadByte (ptr, 1);
62 sdl_index = (ushort) Marshal.ReadInt16 (ptr, 2);
63 sdl_type = Marshal.ReadByte (ptr, 4);
64 sdl_nlen = Marshal.ReadByte (ptr, 5);
65 sdl_alen = Marshal.ReadByte (ptr, 6);
66 sdl_slen = Marshal.ReadByte (ptr, 7);
67 sdl_data = new byte [Math.Max (12, sdl_len - 8)];
68 Marshal.Copy (new IntPtr (ptr.ToInt64 () + 8), sdl_data, 0, sdl_data.Length);
74 internal enum MacOsArpHardware {
83 internal enum MacOsInterfaceFlags {
84 IFF_UP = 0x1, /* interface is up */
85 IFF_BROADCAST = 0x2, /* broadcast address valid */
86 IFF_DEBUG = 0x4, /* turn on debugging */
87 IFF_LOOPBACK = 0x8, /* is a loopback net */
88 IFF_POINTOPOINT = 0x10, /* interface is point-to-point link */
89 IFF_NOTRAILERS = 0x20, /* avoid use of trailers */
90 IFF_RUNNING = 0x40, /* resources allocated */
91 IFF_NOARP = 0x80, /* no address resolution protocol */
92 IFF_PROMISC = 0x100, /* receive all packets */
93 IFF_ALLMULTI = 0x200, /* receive all multicast packets */
94 IFF_OACTIVE = 0x400, /* transmission in progress */
95 IFF_SIMPLEX = 0x800, /* can't hear own transmissions */
96 IFF_LINK0 = 0x1000, /* per link layer defined bit */
97 IFF_LINK1 = 0x2000, /* per link layer defined bit */
98 IFF_LINK2 = 0x4000, /* per link layer defined bit */
99 IFF_MULTICAST = 0x8000 /* supports multicast */