/****************************************************************************** Copyright (C) 2016 B. Lee <bl4@postpile.net> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. ******************************************************************************/ #pragma once #include <util/darray.h> #ifdef _WIN32 #include <ws2tcpip.h> #include <winsock2.h> #include <ws2ipdef.h> #include <iphlpapi.h> #else #ifdef __linux__ #include <linux/if_link.h> #elif __FreeBSD__ #include <netinet/in.h> #ifndef _GNU_SOURCE #define _GNU_SOURCE #define __NET_IF_GNU_SOURCE__ #endif //_GNU_SOURCE #endif //__FreeBSD__ #include <ifaddrs.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> #ifdef __FreeBSD__ #ifdef ___NET_IF_GNU_SOURCE__ #undef ___NET_IF_GNU_SOURCE__ #undef _GNU_SOURCE #endif #endif #endif struct netif_saddr_item { char *name; char *addr; }; struct netif_saddr_data { DARRAY(struct netif_saddr_item) addrs; }; static inline void netif_saddr_data_free(struct netif_saddr_data *data) { for (size_t i = 0; i < data->addrs.num; i++) { bfree(data->addrs.array[i].name); bfree(data->addrs.array[i].addr); } da_free(data->addrs); } extern bool netif_str_to_addr(struct sockaddr_storage *out, int *addr_len, const char *addr); extern void netif_get_addrs(struct netif_saddr_data *ifaddrs); extern void netif_log_saddrs(struct netif_saddr_data *sd);