enable -fno-strict-aliasing until the code base gets a hefty clean up to fix all...
[platform/upstream/net-tools.git] / lib / getroute.c
1 /*
2  * lib/getroute.c     This file contains a small interface function to
3  *                      use the AF specific print routine for the routing
4  *                      table.
5  *
6  * NET-LIB      A collection of functions used from the base set of the
7  *              NET-3 Networking Distribution for the LINUX operating
8  *              system. (net-tools, net-drivers)
9  *
10  * Version:     $Id: getroute.c,v 1.6 2000/05/20 13:38:10 pb Exp $
11  *
12  * Author:      Bernd 'eckes' Eckenfels <net-tools@lina.inka.de>
13  *              Copyright 1999 Bernd Eckenfels, Germany
14  *
15  * Modifications:
16  *
17  *951020 {0.10} Bernd Eckenfels:        creation
18  *960202 {0.90} Bernd Eckenfels:        rewrite to use getaftype.
19  *960204 {0.91} Bernd Eckenfels:        takes constant list of AFs
20  *960206 {1.01} Bernd Eckenfels:        route_init will enable routing
21  *                                      support in the AF handlers
22  *960221 {1.02} Bernd Eckenfels:        renamed from route_info to getroute.c
23  *960413 {1.03} Bernd Eckenfels:        new RTACTION support
24  *980701 {1.04} Arnaldo C. Melo:        GNU gettext instead of catgets
25  *
26  *              This program is free software; you can redistribute it
27  *              and/or  modify it under  the terms of  the GNU General
28  *              Public  License as  published  by  the  Free  Software
29  *              Foundation;  either  version 2 of the License, or  (at
30  *              your option) any later version.
31  */
32 #include <stdio.h>
33 #include <string.h>
34 #include "net-support.h"
35 #include "pathnames.h"
36 #include "version.h"
37 #include "config.h"
38 #include "intl.h"
39 #include "util.h"
40
41 extern struct aftype unspec_aftype;
42 extern struct aftype unix_aftype;
43 extern struct aftype inet_aftype;
44 extern struct aftype inet6_aftype;
45 extern struct aftype ax25_aftype;
46 extern struct aftype netrom_aftype;
47 extern struct aftype ipx_aftype;
48 extern struct aftype ddp_aftype;
49 extern struct aftype x25_aftype;
50
51 void getroute_init(void)
52 {
53 #if HAVE_AFINET
54     inet_aftype.rprint = INET_rprint;
55 #endif
56 #if HAVE_AFINET6
57     inet6_aftype.rprint = INET6_rprint;
58 #endif
59 #if HAVE_AFNETROM
60     netrom_aftype.rprint = NETROM_rprint;
61 #endif
62 #if HAVE_AFAX25
63     ax25_aftype.rprint = AX25_rprint;
64 #endif
65 #if HAVE_AFIPX
66     ipx_aftype.rprint = IPX_rprint;
67 #endif
68 #if HAVE_AFATALK
69     ddp_aftype.rprint = DDP_rprint;
70 #endif
71 #if HAVE_AFX25
72     x25_aftype.rprint = X25_rprint;
73 #endif
74 }
75
76 int route_info(const char *afname, int options)
77 {
78     struct aftype *ap;
79     char *tmp1, *tmp2;
80     int found = E_NOTFOUND, rc;
81     char buf[256];
82
83     safe_strncpy(buf, afname, sizeof(buf));
84
85     tmp1 = buf;
86
87     while (tmp1) {
88
89         ap = NULL;
90
91         if ((tmp2 = index(tmp1, ',')))
92             *tmp2++ = '\0';
93
94         if (!tmp1[0]) {
95             tmp1 = tmp2;
96             continue;
97         }
98         ap = get_aftype(tmp1);
99
100         if (!ap) {
101             fprintf(stderr, _("Address family `%s' not supported.\n"), tmp1);
102             return (E_OPTERR);
103         }
104         tmp1 = tmp2;
105
106         if (!ap->rprint) {
107             fprintf(stderr, _("No routing for address family `%s'.\n"), ap->name);
108             return (E_OPTERR);
109         }
110         found = 0;
111
112         if ((rc = ap->rprint(options)))
113             return (rc);
114
115     }
116     return (found);
117 }