Blame inet/test_ifindex.c

Packit 6c4009
/* Test interface name <-> index conversions.
Packit 6c4009
   Copyright (C) 1997-2018 Free Software Foundation, Inc.
Packit 6c4009
   This file is part of the GNU C Library.
Packit 6c4009
   Contributed by Philip Blundell <Philip.Blundell@pobox.com>.
Packit 6c4009
Packit 6c4009
   The GNU C Library is free software; you can redistribute it and/or
Packit 6c4009
   modify it under the terms of the GNU Lesser General Public
Packit 6c4009
   License as published by the Free Software Foundation; either
Packit 6c4009
   version 2.1 of the License, or (at your option) any later version.
Packit 6c4009
Packit 6c4009
   The GNU C Library is distributed in the hope that it will be useful,
Packit 6c4009
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 6c4009
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 6c4009
   Lesser General Public License for more details.
Packit 6c4009
Packit 6c4009
   You should have received a copy of the GNU Lesser General Public
Packit 6c4009
   License along with the GNU C Library; if not, see
Packit 6c4009
   <http://www.gnu.org/licenses/>.  */
Packit 6c4009
Packit 6c4009
#include <errno.h>
Packit 6c4009
#include <stdio.h>
Packit 6c4009
#include <stdlib.h>
Packit 6c4009
#include <string.h>
Packit 6c4009
#include <net/if.h>
Packit 6c4009
Packit 6c4009
static int
Packit 6c4009
do_test (void)
Packit 6c4009
{
Packit 6c4009
  int failures = 0;
Packit 6c4009
  struct if_nameindex *idx = if_nameindex (), *p;
Packit 6c4009
  if (idx == NULL)
Packit 6c4009
    {
Packit 6c4009
      if (errno != ENOSYS)
Packit 6c4009
	{
Packit 6c4009
	  printf ("Couldn't get any interfaces.\n");
Packit 6c4009
	  exit (1);
Packit 6c4009
	}
Packit 6c4009
      /* The function is simply not implemented.  */
Packit 6c4009
      exit (0);
Packit 6c4009
    }
Packit 6c4009
Packit 6c4009
  printf ("Idx            Name | Idx           Name\n");
Packit 6c4009
Packit 6c4009
  for (p = idx; p->if_index || p->if_name; ++p)
Packit 6c4009
    {
Packit 6c4009
      char buf[IFNAMSIZ];
Packit 6c4009
      unsigned int ni;
Packit 6c4009
      int result;
Packit 6c4009
      printf ("%3d %15s | ", p->if_index, p->if_name);
Packit 6c4009
      printf ("%3d", ni = if_nametoindex (p->if_name));
Packit 6c4009
      printf ("%15s", if_indextoname (p->if_index, buf));
Packit 6c4009
      result = (ni != p->if_index || (strcmp (buf, p->if_name)));
Packit 6c4009
      if (ni == p->if_index)
Packit 6c4009
	/* We have to make sure that this is not an alias with the
Packit 6c4009
	   same interface number.  */
Packit 6c4009
	if (p->if_index == if_nametoindex (buf))
Packit 6c4009
	  result = 0;
Packit 6c4009
      printf ("%10s", result ? "fail" : "okay");
Packit 6c4009
      printf ("\n");
Packit 6c4009
      failures += result;
Packit 6c4009
    }
Packit 6c4009
  if_freenameindex (idx);
Packit 6c4009
  return failures ? 1 : 0;
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
#define TEST_FUNCTION do_test ()
Packit 6c4009
#include "../test-skeleton.c"