Magellan Linux

Contents of /trunk/mkinitrd-magellan/busybox/networking/libiproute/rtm_map.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 532 - (show annotations) (download)
Sat Sep 1 22:45:15 2007 UTC (16 years, 8 months ago) by niro
File MIME type: text/plain
File size: 2295 byte(s)
-import if magellan mkinitrd; it is a fork of redhats mkinitrd-5.0.8 with all magellan patches and features; deprecates magellan-src/mkinitrd

1 /* vi: set sw=4 ts=4: */
2 /*
3 * rtm_map.c
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version
8 * 2 of the License, or (at your option) any later version.
9 *
10 * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
11 *
12 */
13
14 #include <stdlib.h>
15 #include <string.h>
16
17 #include "rt_names.h"
18 #include "utils.h"
19
20 char *rtnl_rtntype_n2a(int id, char *buf, int len)
21 {
22 switch (id) {
23 case RTN_UNSPEC:
24 return "none";
25 case RTN_UNICAST:
26 return "unicast";
27 case RTN_LOCAL:
28 return "local";
29 case RTN_BROADCAST:
30 return "broadcast";
31 case RTN_ANYCAST:
32 return "anycast";
33 case RTN_MULTICAST:
34 return "multicast";
35 case RTN_BLACKHOLE:
36 return "blackhole";
37 case RTN_UNREACHABLE:
38 return "unreachable";
39 case RTN_PROHIBIT:
40 return "prohibit";
41 case RTN_THROW:
42 return "throw";
43 case RTN_NAT:
44 return "nat";
45 case RTN_XRESOLVE:
46 return "xresolve";
47 default:
48 snprintf(buf, len, "%d", id);
49 return buf;
50 }
51 }
52
53
54 int rtnl_rtntype_a2n(int *id, char *arg)
55 {
56 char *end;
57 unsigned long res;
58
59 if (strcmp(arg, "local") == 0)
60 res = RTN_LOCAL;
61 else if (strcmp(arg, "nat") == 0)
62 res = RTN_NAT;
63 else if (matches(arg, "broadcast") == 0 ||
64 strcmp(arg, "brd") == 0)
65 res = RTN_BROADCAST;
66 else if (matches(arg, "anycast") == 0)
67 res = RTN_ANYCAST;
68 else if (matches(arg, "multicast") == 0)
69 res = RTN_MULTICAST;
70 else if (matches(arg, "prohibit") == 0)
71 res = RTN_PROHIBIT;
72 else if (matches(arg, "unreachable") == 0)
73 res = RTN_UNREACHABLE;
74 else if (matches(arg, "blackhole") == 0)
75 res = RTN_BLACKHOLE;
76 else if (matches(arg, "xresolve") == 0)
77 res = RTN_XRESOLVE;
78 else if (matches(arg, "unicast") == 0)
79 res = RTN_UNICAST;
80 else if (strcmp(arg, "throw") == 0)
81 res = RTN_THROW;
82 else {
83 res = strtoul(arg, &end, 0);
84 if (!end || end == arg || *end || res > 255)
85 return -1;
86 }
87 *id = res;
88 return 0;
89 }
90
91 int get_rt_realms(uint32_t *realms, char *arg)
92 {
93 uint32_t realm = 0;
94 char *p = strchr(arg, '/');
95
96 *realms = 0;
97 if (p) {
98 *p = 0;
99 if (rtnl_rtrealm_a2n(realms, arg)) {
100 *p = '/';
101 return -1;
102 }
103 *realms <<= 16;
104 *p = '/';
105 arg = p+1;
106 }
107 if (*arg && rtnl_rtrealm_a2n(&realm, arg))
108 return -1;
109 *realms |= realm;
110 return 0;
111 }