maint: update copyright
[gnulib.git] / tests / test-net_if.c
1 /* Test of <net/if.h> functions.
2    Copyright (C) 2010-2014 Free Software Foundation, Inc.
3
4    This program is free software: you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation; either version 3 of the License, or
7    (at your option) any later version.
8
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13
14    You should have received a copy of the GNU General Public License
15    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
16
17 /* Written by Simon Josefsson <simon@josefsson.org>, 2010.  */
18
19 #include <config.h>
20
21 #include <net/if.h>
22
23 /* We do not yet have replacements for if_* functions on systems that
24    lack a native <net/if.h>.  */
25 #if HAVE_NET_IF_H && HAVE_IF_NAMEINDEX
26 # include "signature.h"
27 SIGNATURE_CHECK (if_freenameindex, void, (struct if_nameindex *));
28 SIGNATURE_CHECK (if_indextoname, char *, (unsigned int, char *));
29 SIGNATURE_CHECK (if_nameindex, struct if_nameindex *, (void));
30 SIGNATURE_CHECK (if_nametoindex, unsigned int, (const char *));
31 #endif
32
33 #include <stddef.h> /* NULL */
34 #include <stdio.h> /* fprintf */
35
36 int
37 main (int argc, char *argv[])
38 {
39 #if HAVE_NET_IF_H && HAVE_IF_NAMEINDEX
40   struct if_nameindex *ifnp, *p;
41
42   p = ifnp = if_nameindex ();
43   if (ifnp == NULL)
44     {
45       fputs ("if_nameindex returned NULL\n", stderr);
46       return 1;
47     }
48
49   while (p->if_index)
50     {
51       unsigned int idx;
52       char buf[IF_NAMESIZE];
53       char *q;
54
55       if (argc > 1)
56         printf ("index %d name %s\n", p->if_index, p->if_name);
57
58       idx = if_nametoindex (p->if_name);
59       if (idx != p->if_index)
60         {
61           fprintf (stderr, "if_nametoindex (%s) = %d != %d\n",
62                    p->if_name, idx, p->if_index);
63           return 1;
64         }
65
66       q = if_indextoname (p->if_index, buf);
67       if (q == NULL)
68         {
69           fprintf (stderr, "if_indextoname (%d) returned NULL\n", p->if_index);
70           return 1;
71         }
72       if (q != buf)
73         {
74           fprintf (stderr, "if_indextoname (%d) buffer mismatch?\n",
75                    p->if_index);
76           return 1;
77         }
78       if (strcmp (p->if_name, q) != 0)
79         {
80           fprintf (stderr, "if_indextoname (%s) = %s ?!\n", p->if_name, q);
81           return 1;
82         }
83
84       p++;
85     }
86
87   if_freenameindex (ifnp);
88 #endif /* HAVE_NET_IF_H */
89
90 #if !HAVE_NET_IF_H || HAVE_IF_NAMEINDEX
91   {
92     static struct if_nameindex ni;
93     return !IF_NAMESIZE + ni.if_index + !!ni.if_name;
94   }
95 #else
96   return 0;
97 #endif
98 }