77 lines
2 KiB
D
77 lines
2 KiB
D
/*******************************************************************************
|
|
|
|
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*);
|