diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2015-10-08 15:10:10 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2015-10-08 15:10:10 +0200 |
commit | 413feca279c21ef23a3b3d6f4ebc6c3d989bbdc6 (patch) | |
tree | 4359864e34176a143629be3b906ea74a7272fce4 | |
parent | 3d8d5e8ad4d2df71e0307c385b3784586b545cbc (diff) | |
download | busybox-w32-413feca279c21ef23a3b3d6f4ebc6c3d989bbdc6.tar.gz busybox-w32-413feca279c21ef23a3b3d6f4ebc6c3d989bbdc6.tar.bz2 busybox-w32-413feca279c21ef23a3b3d6f4ebc6c3d989bbdc6.zip |
ip: increased max ID for /etc/iproute2/rt_tables to 1023
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | networking/libiproute/rt_names.c | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/networking/libiproute/rt_names.c b/networking/libiproute/rt_names.c index 375f14528..8dea5ac52 100644 --- a/networking/libiproute/rt_names.c +++ b/networking/libiproute/rt_names.c | |||
@@ -13,7 +13,14 @@ | |||
13 | typedef struct rtnl_tab_t { | 13 | typedef struct rtnl_tab_t { |
14 | const char *cached_str; | 14 | const char *cached_str; |
15 | unsigned cached_result; | 15 | unsigned cached_result; |
16 | const char *tab[256]; | 16 | /* upstream version switched to a hash table and removed |
17 | * id < 256 limit. For now bbox bumps this array size from 256 | ||
18 | * to 1024. If you plan to change this to a hash table, | ||
19 | * consider merging several hash tables we have (for example, | ||
20 | * awk has resizable one! | ||
21 | */ | ||
22 | #define RT_TABLE_MAX 1023 | ||
23 | const char *tab[RT_TABLE_MAX+1]; | ||
17 | } rtnl_tab_t; | 24 | } rtnl_tab_t; |
18 | 25 | ||
19 | static void rtnl_tab_initialize(const char *file, const char **tab) | 26 | static void rtnl_tab_initialize(const char *file, const char **tab) |
@@ -23,7 +30,7 @@ static void rtnl_tab_initialize(const char *file, const char **tab) | |||
23 | 30 | ||
24 | while (config_read(parser, token, 2, 2, "# \t", PARSE_NORMAL)) { | 31 | while (config_read(parser, token, 2, 2, "# \t", PARSE_NORMAL)) { |
25 | unsigned id = bb_strtou(token[0], NULL, 0); | 32 | unsigned id = bb_strtou(token[0], NULL, 0); |
26 | if (id > 256) { | 33 | if (id > RT_TABLE_MAX) { |
27 | bb_error_msg("database %s is corrupted at line %d", | 34 | bb_error_msg("database %s is corrupted at line %d", |
28 | file, parser->lineno); | 35 | file, parser->lineno); |
29 | break; | 36 | break; |
@@ -42,7 +49,7 @@ static int rtnl_a2n(rtnl_tab_t *tab, uint32_t *id, const char *arg, int base) | |||
42 | return 0; | 49 | return 0; |
43 | } | 50 | } |
44 | 51 | ||
45 | for (i = 0; i < 256; i++) { | 52 | for (i = 0; i <= RT_TABLE_MAX; i++) { |
46 | if (tab->tab[i] | 53 | if (tab->tab[i] |
47 | && strcmp(tab->tab[i], arg) == 0 | 54 | && strcmp(tab->tab[i], arg) == 0 |
48 | ) { | 55 | ) { |
@@ -54,7 +61,7 @@ static int rtnl_a2n(rtnl_tab_t *tab, uint32_t *id, const char *arg, int base) | |||
54 | } | 61 | } |
55 | 62 | ||
56 | i = bb_strtou(arg, NULL, base); | 63 | i = bb_strtou(arg, NULL, base); |
57 | if (i > 255) | 64 | if (i > RT_TABLE_MAX) |
58 | return -1; | 65 | return -1; |
59 | *id = i; | 66 | *id = i; |
60 | return 0; | 67 | return 0; |
@@ -91,7 +98,7 @@ static void rtnl_rtprot_initialize(void) | |||
91 | #if 0 /* UNUSED */ | 98 | #if 0 /* UNUSED */ |
92 | const char* FAST_FUNC rtnl_rtprot_n2a(int id) | 99 | const char* FAST_FUNC rtnl_rtprot_n2a(int id) |
93 | { | 100 | { |
94 | if (id < 0 || id >= 256) { | 101 | if (id < 0 || id > RT_TABLE_MAX) { |
95 | return itoa(id); | 102 | return itoa(id); |
96 | } | 103 | } |
97 | 104 | ||
@@ -127,7 +134,7 @@ static void rtnl_rtscope_initialize(void) | |||
127 | 134 | ||
128 | const char* FAST_FUNC rtnl_rtscope_n2a(int id) | 135 | const char* FAST_FUNC rtnl_rtscope_n2a(int id) |
129 | { | 136 | { |
130 | if (id < 0 || id >= 256) { | 137 | if (id < 0 || id > RT_TABLE_MAX) { |
131 | return itoa(id); | 138 | return itoa(id); |
132 | } | 139 | } |
133 | 140 | ||
@@ -164,7 +171,7 @@ int FAST_FUNC rtnl_rtrealm_a2n(uint32_t *id, char *arg) | |||
164 | #if ENABLE_FEATURE_IP_RULE | 171 | #if ENABLE_FEATURE_IP_RULE |
165 | const char* FAST_FUNC rtnl_rtrealm_n2a(int id) | 172 | const char* FAST_FUNC rtnl_rtrealm_n2a(int id) |
166 | { | 173 | { |
167 | if (id < 0 || id >= 256) { | 174 | if (id < 0 || id > RT_TABLE_MAX) { |
168 | return itoa(id); | 175 | return itoa(id); |
169 | } | 176 | } |
170 | 177 | ||
@@ -189,7 +196,7 @@ static void rtnl_rtdsfield_initialize(void) | |||
189 | 196 | ||
190 | const char* FAST_FUNC rtnl_dsfield_n2a(int id) | 197 | const char* FAST_FUNC rtnl_dsfield_n2a(int id) |
191 | { | 198 | { |
192 | if (id < 0 || id >= 256) { | 199 | if (id < 0 || id > RT_TABLE_MAX) { |
193 | return itoa(id); | 200 | return itoa(id); |
194 | } | 201 | } |
195 | 202 | ||
@@ -212,7 +219,9 @@ static rtnl_tab_t *rtnl_rttable_tab; | |||
212 | 219 | ||
213 | static void rtnl_rttable_initialize(void) | 220 | static void rtnl_rttable_initialize(void) |
214 | { | 221 | { |
215 | if (rtnl_rtdsfield_tab) return; | 222 | if (rtnl_rttable_tab) |
223 | return; | ||
224 | |||
216 | rtnl_rttable_tab = xzalloc(sizeof(*rtnl_rttable_tab)); | 225 | rtnl_rttable_tab = xzalloc(sizeof(*rtnl_rttable_tab)); |
217 | rtnl_rttable_tab->tab[0] = "unspec"; | 226 | rtnl_rttable_tab->tab[0] = "unspec"; |
218 | rtnl_rttable_tab->tab[255] = "local"; | 227 | rtnl_rttable_tab->tab[255] = "local"; |
@@ -223,7 +232,7 @@ static void rtnl_rttable_initialize(void) | |||
223 | 232 | ||
224 | const char* FAST_FUNC rtnl_rttable_n2a(int id) | 233 | const char* FAST_FUNC rtnl_rttable_n2a(int id) |
225 | { | 234 | { |
226 | if (id < 0 || id >= 256) { | 235 | if (id < 0 || id > RT_TABLE_MAX) { |
227 | return itoa(id); | 236 | return itoa(id); |
228 | } | 237 | } |
229 | 238 | ||