174 lines
3.4 KiB
C
174 lines
3.4 KiB
C
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <netinet/in.h>
|
|
|
|
|
|
static int
|
|
do_test (void)
|
|
{
|
|
int result = 0;
|
|
char buf[16];
|
|
memset (buf, '\0', 16);
|
|
|
|
if (! IN6_IS_ADDR_UNSPECIFIED (buf))
|
|
{
|
|
puts ("positive IN6_IS_ADDR_UNSPECIFIED failed");
|
|
result = 1;
|
|
}
|
|
for (size_t i = 0; i < 16; ++i)
|
|
{
|
|
buf[i] = 1;
|
|
if (IN6_IS_ADDR_UNSPECIFIED (buf))
|
|
{
|
|
printf ("negative IN6_IS_ADDR_UNSPECIFIED with byte %zu failed\n",
|
|
i);
|
|
result = 1;
|
|
}
|
|
buf[i] = 0;
|
|
}
|
|
|
|
if (IN6_IS_ADDR_LOOPBACK (buf))
|
|
{
|
|
puts ("negative IN6_IS_ADDR_UNSPECIFIED failed");
|
|
result = 1;
|
|
}
|
|
buf[15] = 1;
|
|
if (! IN6_IS_ADDR_LOOPBACK (buf))
|
|
{
|
|
puts ("positive IN6_IS_ADDR_UNSPECIFIED failed");
|
|
result = 1;
|
|
}
|
|
buf[15] = 0;
|
|
|
|
buf[0] = 0xfe;
|
|
buf[1] = 0x80;
|
|
if (! IN6_IS_ADDR_LINKLOCAL (buf))
|
|
{
|
|
puts ("positive IN6_IS_ADDR_LINKLOCAL failed");
|
|
result = 1;
|
|
}
|
|
for (size_t i = 1; i < 16; ++i)
|
|
{
|
|
buf[i] ^= 1;
|
|
if (! IN6_IS_ADDR_LINKLOCAL (buf))
|
|
{
|
|
printf ("positive IN6_IS_ADDR_LINKLOCAL byte %zu failed\n", i);
|
|
result = 1;
|
|
}
|
|
buf[i] ^= 1;
|
|
}
|
|
buf[0] = 0xff;
|
|
buf[1] = 0x80;
|
|
if (IN6_IS_ADDR_LINKLOCAL (buf))
|
|
{
|
|
puts ("negative IN6_IS_ADDR_LINKLOCAL failed");
|
|
result = 1;
|
|
}
|
|
buf[0] = 0xfe;
|
|
buf[1] = 0xc0;
|
|
if (IN6_IS_ADDR_LINKLOCAL (buf))
|
|
{
|
|
puts ("negative IN6_IS_ADDR_LINKLOCAL #2 failed");
|
|
result = 1;
|
|
}
|
|
|
|
buf[0] = 0xfe;
|
|
buf[1] = 0xc0;
|
|
if (! IN6_IS_ADDR_SITELOCAL (buf))
|
|
{
|
|
puts ("positive IN6_IS_ADDR_SITELOCAL failed");
|
|
result = 1;
|
|
}
|
|
for (size_t i = 1; i < 16; ++i)
|
|
{
|
|
buf[i] ^= 1;
|
|
if (! IN6_IS_ADDR_SITELOCAL (buf))
|
|
{
|
|
printf ("positive IN6_IS_ADDR_SITELOCAL byte %zu failed\n", i);
|
|
result = 1;
|
|
}
|
|
buf[i] ^= 1;
|
|
}
|
|
buf[0] = 0xff;
|
|
buf[1] = 0x80;
|
|
if (IN6_IS_ADDR_SITELOCAL (buf))
|
|
{
|
|
puts ("negative IN6_IS_ADDR_SITELOCAL failed");
|
|
result = 1;
|
|
}
|
|
buf[0] = 0xf8;
|
|
buf[1] = 0xc0;
|
|
if (IN6_IS_ADDR_SITELOCAL (buf))
|
|
{
|
|
puts ("negative IN6_IS_ADDR_SITELOCAL #2 failed");
|
|
result = 1;
|
|
}
|
|
|
|
memset (buf, '\0', 16);
|
|
buf[10] = 0xff;
|
|
buf[11] = 0xff;
|
|
if (! IN6_IS_ADDR_V4MAPPED (buf))
|
|
{
|
|
puts ("positive IN6_IS_ADDR_V4MAPPED failed");
|
|
result = 1;
|
|
}
|
|
for (size_t i = 12; i < 16; ++i)
|
|
{
|
|
buf[i] ^= 1;
|
|
if (! IN6_IS_ADDR_V4MAPPED (buf))
|
|
{
|
|
printf ("positive IN6_IS_ADDR_V4MAPPED byte %zu failed\n", i);
|
|
result = 1;
|
|
}
|
|
buf[i] ^= 1;
|
|
}
|
|
for (size_t i = 0; i < 12; ++i)
|
|
{
|
|
buf[i] ^= 1;
|
|
if (IN6_IS_ADDR_V4MAPPED (buf))
|
|
{
|
|
printf ("negative IN6_IS_ADDR_V4MAPPED byte %zu failed\n", i);
|
|
result = 1;
|
|
}
|
|
buf[i] ^= 1;
|
|
}
|
|
|
|
memset (buf, '\0', 16);
|
|
for (size_t i = 12; i < 16; ++i)
|
|
{
|
|
buf[i] ^= 2;
|
|
if (! IN6_IS_ADDR_V4COMPAT (buf))
|
|
{
|
|
printf ("positive IN6_IS_ADDR_V4COMPAT byte %zu failed\n", i);
|
|
result = 1;
|
|
}
|
|
buf[i] ^= 2;
|
|
}
|
|
for (size_t i = 0; i < 12; ++i)
|
|
{
|
|
buf[i] ^= 1;
|
|
if (IN6_IS_ADDR_V4COMPAT (buf))
|
|
{
|
|
printf ("negative IN6_IS_ADDR_V4COMPAT byte %zu failed\n", i);
|
|
result = 1;
|
|
}
|
|
buf[i] ^= 1;
|
|
}
|
|
if (IN6_IS_ADDR_V4COMPAT (buf))
|
|
{
|
|
puts ("negative IN6_IS_ADDR_V4COMPAT #2 failed");
|
|
result = 1;
|
|
}
|
|
buf[15] = 1;
|
|
if (IN6_IS_ADDR_V4COMPAT (buf))
|
|
{
|
|
puts ("negative IN6_IS_ADDR_V4COMPAT #3 failed");
|
|
result = 1;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
#define TEST_FUNCTION do_test ()
|
|
#include "../test-skeleton.c"
|