|  | @@ -70,22 +70,27 @@ static const struct in6_addr sample_multicast = {
 | 
		
	
		
			
			| 70 | 70 |   *
 | 
		
	
		
			
			| 71 | 71 |   * @v addr		IPv6 address
 | 
		
	
		
			
			| 72 | 72 |   * @v text		Expected textual representation
 | 
		
	
		
			
			|  | 73 | + * @v file		Test code file
 | 
		
	
		
			
			|  | 74 | + * @v line		Test code line
 | 
		
	
		
			
			| 73 | 75 |   */
 | 
		
	
		
			
			|  | 76 | +static void inet6_ntoa_okx ( const struct in6_addr *addr, const char *text,
 | 
		
	
		
			
			|  | 77 | +			     const char *file, unsigned int line ) {
 | 
		
	
		
			
			|  | 78 | +	char *actual;
 | 
		
	
		
			
			|  | 79 | +
 | 
		
	
		
			
			|  | 80 | +	actual = inet6_ntoa ( addr );
 | 
		
	
		
			
			|  | 81 | +	DBG ( "inet6_ntoa ( %04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x ) "
 | 
		
	
		
			
			|  | 82 | +	      "= %s\n", ntohs ( addr->s6_addr16[0] ),
 | 
		
	
		
			
			|  | 83 | +	      ntohs ( addr->s6_addr16[1] ), ntohs ( addr->s6_addr16[2] ),
 | 
		
	
		
			
			|  | 84 | +	      ntohs ( addr->s6_addr16[3] ), ntohs ( addr->s6_addr16[4] ),
 | 
		
	
		
			
			|  | 85 | +	      ntohs ( addr->s6_addr16[5] ), ntohs ( addr->s6_addr16[6] ),
 | 
		
	
		
			
			|  | 86 | +	      ntohs ( addr->s6_addr16[7] ), actual );
 | 
		
	
		
			
			|  | 87 | +	okx ( strcmp ( actual, text ) == 0, file, line );
 | 
		
	
		
			
			|  | 88 | +}
 | 
		
	
		
			
			| 74 | 89 |  #define inet6_ntoa_ok( addr, text ) do {				\
 | 
		
	
		
			
			| 75 | 90 |  	static const struct in6_addr in = {				\
 | 
		
	
		
			
			| 76 | 91 |  		.s6_addr = addr,					\
 | 
		
	
		
			
			| 77 | 92 |  	};								\
 | 
		
	
		
			
			| 78 |  | -	static const char expected[] = text;				\
 | 
		
	
		
			
			| 79 |  | -	char *actual;							\
 | 
		
	
		
			
			| 80 |  | -									\
 | 
		
	
		
			
			| 81 |  | -	actual = inet6_ntoa ( &in );					\
 | 
		
	
		
			
			| 82 |  | -	DBG ( "inet6_ntoa ( %04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x ) "	\
 | 
		
	
		
			
			| 83 |  | -	      "= %s\n", ntohs ( in.s6_addr16[0] ),			\
 | 
		
	
		
			
			| 84 |  | -	      ntohs ( in.s6_addr16[1] ), ntohs ( in.s6_addr16[2] ),	\
 | 
		
	
		
			
			| 85 |  | -	      ntohs ( in.s6_addr16[3] ), ntohs ( in.s6_addr16[4] ),	\
 | 
		
	
		
			
			| 86 |  | -	      ntohs ( in.s6_addr16[5] ), ntohs ( in.s6_addr16[6] ),	\
 | 
		
	
		
			
			| 87 |  | -	      ntohs ( in.s6_addr16[7] ), actual );			\
 | 
		
	
		
			
			| 88 |  | -	ok ( strcmp ( actual, expected ) == 0 );			\
 | 
		
	
		
			
			|  | 93 | +	inet6_ntoa_okx ( &in, text, __FILE__, __LINE__ );		\
 | 
		
	
		
			
			| 89 | 94 |  	} while ( 0 )
 | 
		
	
		
			
			| 90 | 95 |  
 | 
		
	
		
			
			| 91 | 96 |  /**
 | 
		
	
	
		
			
			|  | @@ -93,31 +98,40 @@ static const struct in6_addr sample_multicast = {
 | 
		
	
		
			
			| 93 | 98 |   *
 | 
		
	
		
			
			| 94 | 99 |   * @v text		Textual representation
 | 
		
	
		
			
			| 95 | 100 |   * @v addr		Expected IPv6 address
 | 
		
	
		
			
			|  | 101 | + * @v file		Test code file
 | 
		
	
		
			
			|  | 102 | + * @v line		Test code line
 | 
		
	
		
			
			| 96 | 103 |   */
 | 
		
	
		
			
			|  | 104 | +static void inet6_aton_okx ( const char *text, const struct in6_addr *addr,
 | 
		
	
		
			
			|  | 105 | +			     const char *file, unsigned int line ) {
 | 
		
	
		
			
			|  | 106 | +	struct in6_addr actual;
 | 
		
	
		
			
			|  | 107 | +
 | 
		
	
		
			
			|  | 108 | +	okx ( inet6_aton ( text, &actual ) == 0, file, line );
 | 
		
	
		
			
			|  | 109 | +	DBG ( "inet6_aton ( \"%s\" ) = %s\n", text, inet6_ntoa ( &actual ) );
 | 
		
	
		
			
			|  | 110 | +	okx ( memcmp ( &actual, addr, sizeof ( actual ) ) == 0,
 | 
		
	
		
			
			|  | 111 | +	      file, line );
 | 
		
	
		
			
			|  | 112 | +}
 | 
		
	
		
			
			| 97 | 113 |  #define inet6_aton_ok( text, addr ) do {				\
 | 
		
	
		
			
			| 98 |  | -	static const char string[] = text;				\
 | 
		
	
		
			
			| 99 |  | -	static const struct in6_addr expected = {			\
 | 
		
	
		
			
			|  | 114 | +	static const struct in6_addr in = {				\
 | 
		
	
		
			
			| 100 | 115 |  		.s6_addr = addr,					\
 | 
		
	
		
			
			| 101 | 116 |  	};								\
 | 
		
	
		
			
			| 102 |  | -	struct in6_addr actual;						\
 | 
		
	
		
			
			| 103 |  | -									\
 | 
		
	
		
			
			| 104 |  | -	ok ( inet6_aton ( string, &actual ) == 0 );			\
 | 
		
	
		
			
			| 105 |  | -	DBG ( "inet6_aton ( \"%s\" ) = %s\n", string,			\
 | 
		
	
		
			
			| 106 |  | -	      inet6_ntoa ( &actual ) );					\
 | 
		
	
		
			
			| 107 |  | -	ok ( memcmp ( &actual, &expected, sizeof ( actual ) ) == 0 );	\
 | 
		
	
		
			
			|  | 117 | +	inet6_aton_okx ( text, &in, __FILE__, __LINE__ );		\
 | 
		
	
		
			
			| 108 | 118 |  	} while ( 0 )
 | 
		
	
		
			
			| 109 | 119 |  
 | 
		
	
		
			
			| 110 | 120 |  /**
 | 
		
	
		
			
			| 111 | 121 |   * Report an inet6_aton() failure test result
 | 
		
	
		
			
			| 112 | 122 |   *
 | 
		
	
		
			
			| 113 | 123 |   * @v text		Textual representation
 | 
		
	
		
			
			|  | 124 | + * @v file		Test code file
 | 
		
	
		
			
			|  | 125 | + * @v line		Test code line
 | 
		
	
		
			
			| 114 | 126 |   */
 | 
		
	
		
			
			| 115 |  | -#define inet6_aton_fail_ok( text ) do {					\
 | 
		
	
		
			
			| 116 |  | -	static const char string[] = text;				\
 | 
		
	
		
			
			| 117 |  | -	struct in6_addr dummy;						\
 | 
		
	
		
			
			| 118 |  | -									\
 | 
		
	
		
			
			| 119 |  | -	ok ( inet6_aton ( string, &dummy ) != 0 );			\
 | 
		
	
		
			
			| 120 |  | -	} while ( 0 )
 | 
		
	
		
			
			|  | 127 | +static void inet6_aton_fail_okx ( const char *text, const char *file,
 | 
		
	
		
			
			|  | 128 | +				  unsigned int line ) {
 | 
		
	
		
			
			|  | 129 | +	struct in6_addr dummy;
 | 
		
	
		
			
			|  | 130 | +
 | 
		
	
		
			
			|  | 131 | +	okx ( inet6_aton ( text, &dummy ) != 0, file, line );
 | 
		
	
		
			
			|  | 132 | +}
 | 
		
	
		
			
			|  | 133 | +#define inet6_aton_fail_ok( text )					\
 | 
		
	
		
			
			|  | 134 | +	inet6_aton_fail_okx ( text, __FILE__, __LINE__ )
 | 
		
	
		
			
			| 121 | 135 |  
 | 
		
	
		
			
			| 122 | 136 |  /**
 | 
		
	
		
			
			| 123 | 137 |   * Perform IPv6 self-tests
 |