summaryrefslogtreecommitdiff
path: root/src/common/address.h
diff options
context:
space:
mode:
authorrl1987 <rl1987@sdf.lonestar.org>2014-05-24 15:03:14 +0300
committerNick Mathewson <nickm@torproject.org>2015-01-23 10:07:17 -0500
commit3966145dff817adb67e5b46020632d55f19e289f (patch)
tree2dc45c468a33e3f5c661890b074830497e9c04be /src/common/address.h
parentfef65fa64341fb70df0e7b34d91d3b08a74e7aad (diff)
downloadtor-3966145dff817adb67e5b46020632d55f19e289f.tar.gz
tor-3966145dff817adb67e5b46020632d55f19e289f.zip
Refactor code that looks up addresses from interfaces
Now the code has separate implementation and examination functions, uses smartlists sanely, and has relatively decent test coverage.
Diffstat (limited to 'src/common/address.h')
-rw-r--r--src/common/address.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/common/address.h b/src/common/address.h
index 8dc63b71c1..934c3f5005 100644
--- a/src/common/address.h
+++ b/src/common/address.h
@@ -11,10 +11,41 @@
#ifndef TOR_ADDRESS_H
#define TOR_ADDRESS_H
+//#include <sys/sockio.h>
#include "orconfig.h"
#include "torint.h"
#include "compat.h"
+#ifdef ADDRESS_PRIVATE
+
+#if defined(HAVE_SYS_IOCTL_H)
+#include <sys/ioctl.h>
+#endif
+
+#ifdef HAVE_GETIFADDRS
+#define HAVE_IFADDRS_TO_SMARTLIST
+#endif
+
+#ifdef _WIN32
+#define HAVE_IP_ADAPTER_TO_SMARTLIST
+#endif
+
+#if defined(SIOCGIFCONF) && defined(HAVE_IOCTL)
+#define HAVE_IFCONF_TO_SMARTLIST
+#endif
+
+#if defined(HAVE_NET_IF_H)
+#include <net/if.h> // for struct ifconf
+#endif
+
+#if defined(HAVE_IFADDRS_TO_SMARTLIST)
+#include <ifaddrs.h>
+#endif
+
+// TODO win32 specific includes
+#include "container.h"
+#endif // ADDRESS_PRIVATE
+
/** The number of bits from an address to consider while doing a masked
* comparison. */
typedef uint8_t maskbits_t;
@@ -229,5 +260,27 @@ int get_interface_address(int severity, uint32_t *addr);
tor_addr_port_t *tor_addr_port_new(const tor_addr_t *addr, uint16_t port);
+#ifdef ADDRESS_PRIVATE
+STATIC smartlist_t *get_interface_addresses_raw(int severity);
+
+#ifdef HAVE_IFADDRS_TO_SMARTLIST
+STATIC smartlist_t *ifaddrs_to_smartlist(const struct ifaddrs *ifa);
+STATIC smartlist_t *get_interface_addresses_ifaddrs(int severity);
+#endif
+
+#ifdef HAVE_IP_ADAPTER_TO_SMARTLIST
+STATIC smartlist_t *ip_adapter_addresses_to_smartlist(
+ const IP_ADAPTER_ADDRESSES *addresses);
+STATIC smartlist_t *get_interface_addresses_win32(int severity);
+#endif
+
+#ifdef HAVE_IFCONF_TO_SMARTLIST
+STATIC smartlist_t *ifreq_to_smartlist(const struct ifreq *ifr,
+ size_t buflen);
+STATIC smartlist_t *get_interface_addresses_ioctl(int severity);
+#endif
+
+#endif // ADDRESS_PRIVATE
+
#endif