(root)/
glibc-2.38/
inet/
tst-checks.c
       1  #include <stdio.h>
       2  #include <string.h>
       3  #include <netinet/in.h>
       4  
       5  
       6  static int
       7  do_test (void)
       8  {
       9    int result = 0;
      10    char buf[16];
      11    memset (buf, '\0', 16);
      12  
      13    if (! IN6_IS_ADDR_UNSPECIFIED (buf))
      14      {
      15        puts ("positive IN6_IS_ADDR_UNSPECIFIED failed");
      16        result = 1;
      17      }
      18    for (size_t i = 0; i < 16; ++i)
      19      {
      20        buf[i] = 1;
      21        if (IN6_IS_ADDR_UNSPECIFIED (buf))
      22  	{
      23  	  printf ("negative IN6_IS_ADDR_UNSPECIFIED with byte %zu failed\n",
      24  		  i);
      25  	  result = 1;
      26  	}
      27        buf[i] = 0;
      28      }
      29  
      30    if (IN6_IS_ADDR_LOOPBACK (buf))
      31      {
      32        puts ("negative IN6_IS_ADDR_UNSPECIFIED failed");
      33        result = 1;
      34      }
      35    buf[15] = 1;
      36    if (! IN6_IS_ADDR_LOOPBACK (buf))
      37      {
      38        puts ("positive IN6_IS_ADDR_UNSPECIFIED failed");
      39        result = 1;
      40      }
      41    buf[15] = 0;
      42  
      43    buf[0] = 0xfe;
      44    buf[1] = 0x80;
      45    if (! IN6_IS_ADDR_LINKLOCAL (buf))
      46      {
      47        puts ("positive IN6_IS_ADDR_LINKLOCAL failed");
      48        result = 1;
      49      }
      50    for (size_t i = 1; i < 16; ++i)
      51      {
      52        buf[i] ^= 1;
      53        if (! IN6_IS_ADDR_LINKLOCAL (buf))
      54  	{
      55  	  printf ("positive IN6_IS_ADDR_LINKLOCAL byte %zu failed\n", i);
      56  	  result = 1;
      57  	}
      58        buf[i] ^= 1;
      59      }
      60    buf[0] = 0xff;
      61    buf[1] = 0x80;
      62    if (IN6_IS_ADDR_LINKLOCAL (buf))
      63      {
      64        puts ("negative IN6_IS_ADDR_LINKLOCAL failed");
      65        result = 1;
      66      }
      67    buf[0] = 0xfe;
      68    buf[1] = 0xc0;
      69    if (IN6_IS_ADDR_LINKLOCAL (buf))
      70      {
      71        puts ("negative IN6_IS_ADDR_LINKLOCAL #2 failed");
      72        result = 1;
      73      }
      74  
      75    buf[0] = 0xfe;
      76    buf[1] = 0xc0;
      77    if (! IN6_IS_ADDR_SITELOCAL (buf))
      78      {
      79        puts ("positive IN6_IS_ADDR_SITELOCAL failed");
      80        result = 1;
      81      }
      82    for (size_t i = 1; i < 16; ++i)
      83      {
      84        buf[i] ^= 1;
      85        if (! IN6_IS_ADDR_SITELOCAL (buf))
      86  	{
      87  	  printf ("positive IN6_IS_ADDR_SITELOCAL byte %zu failed\n", i);
      88  	  result = 1;
      89  	}
      90        buf[i] ^= 1;
      91      }
      92    buf[0] = 0xff;
      93    buf[1] = 0x80;
      94    if (IN6_IS_ADDR_SITELOCAL (buf))
      95      {
      96        puts ("negative IN6_IS_ADDR_SITELOCAL failed");
      97        result = 1;
      98      }
      99    buf[0] = 0xf8;
     100    buf[1] = 0xc0;
     101    if (IN6_IS_ADDR_SITELOCAL (buf))
     102      {
     103        puts ("negative IN6_IS_ADDR_SITELOCAL #2 failed");
     104        result = 1;
     105      }
     106  
     107    memset (buf, '\0', 16);
     108    buf[10] = 0xff;
     109    buf[11] = 0xff;
     110    if (! IN6_IS_ADDR_V4MAPPED (buf))
     111      {
     112        puts ("positive IN6_IS_ADDR_V4MAPPED failed");
     113        result = 1;
     114      }
     115    for (size_t i = 12; i < 16; ++i)
     116      {
     117        buf[i] ^= 1;
     118        if (! IN6_IS_ADDR_V4MAPPED (buf))
     119  	{
     120  	  printf ("positive IN6_IS_ADDR_V4MAPPED byte %zu failed\n", i);
     121  	  result = 1;
     122  	}
     123        buf[i] ^= 1;
     124      }
     125    for (size_t i = 0; i < 12; ++i)
     126      {
     127        buf[i] ^= 1;
     128        if (IN6_IS_ADDR_V4MAPPED (buf))
     129  	{
     130  	  printf ("negative IN6_IS_ADDR_V4MAPPED byte %zu failed\n", i);
     131  	  result = 1;
     132  	}
     133        buf[i] ^= 1;
     134      }
     135  
     136    memset (buf, '\0', 16);
     137    for (size_t i = 12; i < 16; ++i)
     138      {
     139        buf[i] ^= 2;
     140        if (! IN6_IS_ADDR_V4COMPAT (buf))
     141  	{
     142  	  printf ("positive IN6_IS_ADDR_V4COMPAT byte %zu failed\n", i);
     143  	  result = 1;
     144  	}
     145        buf[i] ^= 2;
     146      }
     147    for (size_t i = 0; i < 12; ++i)
     148      {
     149        buf[i] ^= 1;
     150        if (IN6_IS_ADDR_V4COMPAT (buf))
     151  	{
     152  	  printf ("negative IN6_IS_ADDR_V4COMPAT byte %zu failed\n", i);
     153  	  result = 1;
     154  	}
     155        buf[i] ^= 1;
     156      }
     157    if (IN6_IS_ADDR_V4COMPAT (buf))
     158      {
     159        puts ("negative IN6_IS_ADDR_V4COMPAT #2 failed");
     160        result = 1;
     161      }
     162    buf[15] = 1;
     163    if (IN6_IS_ADDR_V4COMPAT (buf))
     164      {
     165        puts ("negative IN6_IS_ADDR_V4COMPAT #3 failed");
     166        result = 1;
     167      }
     168  
     169    return result;
     170  }
     171  
     172  #include <support/test-driver.c>