Large diffs are not rendered by default.

@@ -0,0 +1,18 @@
/* Copyright (c) 2015, The Tor Project, Inc. */
/* See LICENSE for licensing information */

/**
* \file netlink.h
* \brief Headers for netlink.h
**/

#ifndef TOR_NETLINK_H
#define TOR_NETLINK_H

#include "orconfig.h"
#include "address.h"

int get_interface_address_netlink(int severity, sa_family_t family,
tor_addr_t *addr);

#endif
@@ -25,6 +25,7 @@

#include "or.h"
#include "address.h"
#include "netlink.h"
#include "test.h"

/** Return 1 iff <b>sockaddr1</b> and <b>sockaddr2</b> represent
@@ -585,38 +586,31 @@ test_address_udp_socket_trick_blackbox(void *arg)

(void)arg;

retval_reference = get_interface_address6(LOG_DEBUG,AF_INET,&addr4);
retval = get_interface_address6_via_udp_socket_hack(LOG_DEBUG,
AF_INET,
&addr4_to_check);

tt_int_op(retval,==,retval_reference);
tt_assert( (retval == -1 && retval_reference == -1) ||
(tor_addr_compare(&addr4,&addr4_to_check,CMP_EXACT) == 0) );

//[XXX: Skipping the AF_INET6 case because bug #12377 makes it fail.]
(void)addr6_to_check;
(void)addr6;
#if 0
retval_reference = get_interface_address6(LOG_DEBUG,AF_INET6,&addr6);
retval = get_interface_address6_via_udp_socket_hack(LOG_DEBUG,
/* The only time get_interface_address6() is guaranteed to return
* correct results is if it has a routing table aware backend.
*
* Currently this is limited to Linux. See #12377.
*/
retval_reference = get_interface_address_netlink(LOG_DEBUG, AF_INET, &addr4);
if (!retval_reference) {
retval = get_interface_address6_via_udp_socket_hack(LOG_DEBUG,
AF_INET,
&addr4_to_check);
tt_int_op(retval,==,retval_reference);
tt_assert( (retval == -1 && retval_reference == -1) ||
(tor_addr_compare(&addr4,&addr4_to_check,CMP_EXACT) == 0) );

retval_reference = get_interface_address_netlink(LOG_DEBUG,
AF_INET6,
&addr6);
retval = get_interface_address6_via_udp_socket_hack(LOG_DEBUG,
AF_INET6,
&addr6_to_check);

tt_int_op(retval,==,retval_reference);
tt_assert( (retval == -1 && retval_reference == -1) ||
(tor_addr_compare(&addr6,&addr6_to_check,CMP_EXACT) == 0) );

#endif

/* When family is neither AF_INET nor AF_INET6, we want _hack to
* fail and return -1.
*/

retval = get_interface_address6_via_udp_socket_hack(LOG_DEBUG,
AF_INET+AF_INET6,&addr4);

tt_assert(retval == -1);
tt_int_op(retval,==,retval_reference);
tt_assert( (retval == -1 && retval_reference == -1) ||
(tor_addr_compare(&addr6,&addr6_to_check,CMP_EXACT) == 0) );
}

done:
return;