1 /******************************************************************************* 2 3 Binding for Mac OSX's <ifaddr.h>, expose network interface addresses 4 5 The following functions are present as of Mac OSX 10.15: 6 - getifaddrs(3): get interface addresses 7 - freeifaddrs(3): deallocates the return value of `getifaddrs` 8 - getifmaddrs(3): get multicast group membership 9 - freeifmaddrs(3): deallocates the return value of `getifmaddrs` 10 11 Copyright: Copyright © 2020, The D Language Foundation 12 License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0). 13 Authors: Daniel Graczer 14 15 *******************************************************************************/ 16 17 module core.sys.darwin.ifaddrs; 18 19 version (OSX) 20 version = Darwin; 21 else version (iOS) 22 version = Darwin; 23 else version (TVOS) 24 version = Darwin; 25 else version (WatchOS) 26 version = Darwin; 27 28 version (Darwin): 29 extern (C): 30 nothrow: 31 @nogc: 32 33 import core.sys.posix.sys.socket; 34 35 /// 36 struct ifaddrs 37 { 38 /// Next item in the list 39 ifaddrs* ifa_next; 40 /// Name of the interface 41 char* ifa_name; 42 /// Flags from SIOCGIFFLAGS 43 uint ifa_flags; 44 /// Address of interface 45 sockaddr* ifa_addr; 46 /// Netmask of interface 47 sockaddr* ifa_netmask; 48 /// Point-to-point destination addresss 49 sockaddr* if_dstaddr; 50 /// Address specific data 51 void* ifa_data; 52 } 53 54 /// Returns: linked list of ifaddrs structures describing interfaces 55 int getifaddrs(ifaddrs**); 56 /// Frees the linked list returned by getifaddrs 57 void freeifaddrs(ifaddrs*); 58 59 /// 60 struct ifmaddrs 61 { 62 /// Pointer to next struct 63 ifmaddrs* ifma_next; 64 /// Interface name (AF_LINK) 65 sockaddr* ifma_name; 66 /// Multicast address 67 sockaddr* ifma_addr; 68 /// Link-layer translation, if any 69 sockaddr* ifma_lladdr; 70 } 71 72 /// Stores a reference to a linked list of the multicast memberships 73 /// on the local machine in the memory referenced by ifmaddrs 74 int getifmaddrs(ifmaddrs**); 75 /// Frees the list allocated by getifmaddrs 76 void freeifmaddrs(ifmaddrs*);