blob: a2540361d0f5918c57ee2070fa79c95c7179c35f [file] [log] [blame]
/*******************************************************************************
Binding for Mac OSX's <ifaddr.h>, expose network interface addresses
The following functions are present as of Mac OSX 10.15:
- getifaddrs(3): get interface addresses
- freeifaddrs(3): deallocates the return value of `getifaddrs`
- getifmaddrs(3): get multicast group membership
- freeifmaddrs(3): deallocates the return value of `getifmaddrs`
Copyright: Copyright © 2020, The D Language Foundation
License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
Authors: Daniel Graczer
*******************************************************************************/
module core.sys.darwin.ifaddrs;
version (OSX)
version = Darwin;
else version (iOS)
version = Darwin;
else version (TVOS)
version = Darwin;
else version (WatchOS)
version = Darwin;
version (Darwin):
extern (C):
nothrow:
@nogc:
@system:
import core.sys.posix.sys.socket;
///
struct ifaddrs
{
/// Next item in the list
ifaddrs* ifa_next;
/// Name of the interface
char* ifa_name;
/// Flags from SIOCGIFFLAGS
uint ifa_flags;
/// Address of interface
sockaddr* ifa_addr;
/// Netmask of interface
sockaddr* ifa_netmask;
/// Point-to-point destination addresss
sockaddr* if_dstaddr;
/// Address specific data
void* ifa_data;
}
/// Returns: linked list of ifaddrs structures describing interfaces
int getifaddrs(ifaddrs**);
/// Frees the linked list returned by getifaddrs
void freeifaddrs(ifaddrs*);
///
struct ifmaddrs
{
/// Pointer to next struct
ifmaddrs* ifma_next;
/// Interface name (AF_LINK)
sockaddr* ifma_name;
/// Multicast address
sockaddr* ifma_addr;
/// Link-layer translation, if any
sockaddr* ifma_lladdr;
}
/// Stores a reference to a linked list of the multicast memberships
/// on the local machine in the memory referenced by ifmaddrs
int getifmaddrs(ifmaddrs**);
/// Frees the list allocated by getifmaddrs
void freeifmaddrs(ifmaddrs*);