On 11/28/2017 09:53 AM, jor...@apache.org wrote:
> Author: jorton
> Date: Tue Nov 28 08:53:13 2017
> New Revision: 1816527
> 
> URL: http://svn.apache.org/viewvc?rev=1816527&view=rev
> Log:
> Support IPv6 link-local address scope/zone mapping.
> 
> * network_io/unix/sockaddr.c (apr_sockaddr_zone_set,
>   apr_sockaddr_zone_get): New functions.
>   (apr_sockaddr_ip_getbuf): Append %scope for link-local address.
>   (apr_sockaddr_equal): Compare link-local address with different
>   scopes as not equal.
> 
> * include/apr_network_io.h: Add function declarations.
> 
> * configure.in: Test for if_indextoname and if_nametoindex.
> 
> * test/testsock.c (test_zone): New test case.
> 
> * include/arch/win32/apr_private.h: Assume Windows supports
>   if_nametoindex and if_indextoname.
> 
> Modified:
>     apr/apr/trunk/CHANGES
>     apr/apr/trunk/configure.in
>     apr/apr/trunk/include/apr_network_io.h
>     apr/apr/trunk/include/arch/win32/apr_private.h
>     apr/apr/trunk/network_io/unix/sockaddr.c
>     apr/apr/trunk/test/testsock.c
> 

> Modified: apr/apr/trunk/test/testsock.c
> URL: 
> http://svn.apache.org/viewvc/apr/apr/trunk/test/testsock.c?rev=1816527&r1=1816526&r2=1816527&view=diff
> ==============================================================================
> --- apr/apr/trunk/test/testsock.c (original)
> +++ apr/apr/trunk/test/testsock.c Tue Nov 28 08:53:13 2017
> @@ -640,6 +640,98 @@ static void test_freebind(abts_case *tc,
>  #endif
>  }
>  
> +#define TEST_ZONE_ADDR "fe80::1"
> +
> +#ifdef __linux__
> +/* Reasonable bet that "lo" will exist. */
> +#define TEST_ZONE_NAME "lo"
> +/* ... fill in other platforms here */
> +#endif
> +
> +#ifdef TEST_ZONE_NAME 
> +#define TEST_ZONE_FULLADDR TEST_ZONE_ADDR "%" TEST_ZONE_NAME
> +#endif
> +
> +static void test_zone(abts_case *tc, void *data)
> +{
> +#if APR_HAVE_IPV6
> +    apr_sockaddr_t *sa;
> +    apr_status_t rv;
> +    const char *name = NULL;
> +    apr_uint32_t id = 0;
> +    
> +    /* RFC 5737 address */
> +    rv = apr_sockaddr_info_get(&sa, "127.0.0.1", APR_INET, 8080, 0, p);
> +    APR_ASSERT_SUCCESS(tc, "Problem generating sockaddr", rv);
> +
> +    /* Fail for an IPv4 address! */
> +    ABTS_INT_EQUAL(tc, APR_EBADIP,
> +                   apr_sockaddr_zone_set(sa, "1"));
> +    ABTS_INT_EQUAL(tc, APR_EBADIP,
> +                   apr_sockaddr_zone_get(sa, &name, &id, p));
> +
> +    rv = apr_sockaddr_info_get(&sa, TEST_ZONE_ADDR, APR_INET6, 8080, 0, p);
> +    APR_ASSERT_SUCCESS(tc, "Problem generating sockaddr", rv);
> +
> +    rv = apr_sockaddr_info_get(&sa, TEST_ZONE_ADDR, APR_INET6, 8080, 0, p);
> +    APR_ASSERT_SUCCESS(tc, "Problem generating sockaddr", rv);

Why do we do the above test twice?

> +
> +    ABTS_INT_EQUAL(tc, APR_EBADIP, apr_sockaddr_zone_get(sa, &name, &id, p));
> +

Regards

RĂ¼diger

Reply via email to