diff options
author | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2010-05-25 16:16:28 +0200 |
---|---|---|
committer | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2010-05-25 18:48:33 +0200 |
commit | d148e484db143c801f806c4e055a5c8b80d0c5ee (patch) | |
tree | db65797852144d9d899ce6ac63feecfdf7607084 | |
parent | 6faebfa663fd008fa28f0d69d0663fe80675ebec (diff) | |
download | busybox-w32-d148e484db143c801f806c4e055a5c8b80d0c5ee.tar.gz busybox-w32-d148e484db143c801f806c4e055a5c8b80d0c5ee.tar.bz2 busybox-w32-d148e484db143c801f806c4e055a5c8b80d0c5ee.zip |
iplink: shrink
function old new delta
do_change 490 487 -3
ipaddr_list_link 18 - -18
do_iplink 1169 1113 -56
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 0/2 up/down: 0/-77) Total: -77 bytes
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
-rw-r--r-- | networking/libiproute/iplink.c | 93 |
1 files changed, 39 insertions, 54 deletions
diff --git a/networking/libiproute/iplink.c b/networking/libiproute/iplink.c index a28df6e79..583a2801c 100644 --- a/networking/libiproute/iplink.c +++ b/networking/libiproute/iplink.c | |||
@@ -186,56 +186,48 @@ static int do_set(char **argv) | |||
186 | if (key == ARG_up) { | 186 | if (key == ARG_up) { |
187 | mask |= IFF_UP; | 187 | mask |= IFF_UP; |
188 | flags |= IFF_UP; | 188 | flags |= IFF_UP; |
189 | } | 189 | } else if (key == ARG_down) { |
190 | if (key == ARG_down) { | ||
191 | mask |= IFF_UP; | 190 | mask |= IFF_UP; |
192 | flags &= ~IFF_UP; | 191 | flags &= ~IFF_UP; |
193 | } | 192 | } else if (key == ARG_name) { |
194 | if (key == ARG_name) { | ||
195 | NEXT_ARG(); | 193 | NEXT_ARG(); |
196 | newname = *argv; | 194 | newname = *argv; |
197 | } | 195 | } else if (key == ARG_mtu) { |
198 | if (key == ARG_mtu) { | ||
199 | NEXT_ARG(); | 196 | NEXT_ARG(); |
200 | if (mtu != -1) | 197 | if (mtu != -1) |
201 | duparg("mtu", *argv); | 198 | duparg("mtu", *argv); |
202 | mtu = get_unsigned(*argv, "mtu"); | 199 | mtu = get_unsigned(*argv, "mtu"); |
203 | } | 200 | } else if (key == ARG_addr) { |
204 | if (key == ARG_multicast) { | ||
205 | int param; | ||
206 | NEXT_ARG(); | ||
207 | mask |= IFF_MULTICAST; | ||
208 | param = index_in_strings(str_on_off, *argv); | ||
209 | if (param < 0) | ||
210 | die_must_be_on_off("multicast"); | ||
211 | if (param == PARM_on) | ||
212 | flags |= IFF_MULTICAST; | ||
213 | else | ||
214 | flags &= ~IFF_MULTICAST; | ||
215 | } | ||
216 | if (key == ARG_arp) { | ||
217 | int param; | ||
218 | NEXT_ARG(); | ||
219 | mask |= IFF_NOARP; | ||
220 | param = index_in_strings(str_on_off, *argv); | ||
221 | if (param < 0) | ||
222 | die_must_be_on_off("arp"); | ||
223 | if (param == PARM_on) | ||
224 | flags &= ~IFF_NOARP; | ||
225 | else | ||
226 | flags |= IFF_NOARP; | ||
227 | } | ||
228 | if (key == ARG_addr) { | ||
229 | NEXT_ARG(); | 201 | NEXT_ARG(); |
230 | newaddr = *argv; | 202 | newaddr = *argv; |
231 | } | 203 | } else if (key >= ARG_dev) { |
232 | if (key >= ARG_dev) { | ||
233 | if (key == ARG_dev) { | 204 | if (key == ARG_dev) { |
234 | NEXT_ARG(); | 205 | NEXT_ARG(); |
235 | } | 206 | } |
236 | if (dev) | 207 | if (dev) |
237 | duparg2("dev", *argv); | 208 | duparg2("dev", *argv); |
238 | dev = *argv; | 209 | dev = *argv; |
210 | } else { | ||
211 | int param; | ||
212 | NEXT_ARG(); | ||
213 | param = index_in_strings(str_on_off, *argv); | ||
214 | if (key == ARG_multicast) { | ||
215 | if (param < 0) | ||
216 | die_must_be_on_off("multicast"); | ||
217 | mask |= IFF_MULTICAST; | ||
218 | if (param == PARM_on) | ||
219 | flags |= IFF_MULTICAST; | ||
220 | else | ||
221 | flags &= ~IFF_MULTICAST; | ||
222 | } else if (key == ARG_arp) { | ||
223 | if (param < 0) | ||
224 | die_must_be_on_off("arp"); | ||
225 | mask |= IFF_NOARP; | ||
226 | if (param == PARM_on) | ||
227 | flags &= ~IFF_NOARP; | ||
228 | else | ||
229 | flags |= IFF_NOARP; | ||
230 | } | ||
239 | } | 231 | } |
240 | argv++; | 232 | argv++; |
241 | } | 233 | } |
@@ -248,9 +240,11 @@ static int do_set(char **argv) | |||
248 | halen = get_address(dev, &htype); | 240 | halen = get_address(dev, &htype); |
249 | if (newaddr) { | 241 | if (newaddr) { |
250 | parse_address(dev, htype, halen, newaddr, &ifr0); | 242 | parse_address(dev, htype, halen, newaddr, &ifr0); |
243 | set_address(&ifr0, 0); | ||
251 | } | 244 | } |
252 | if (newbrd) { | 245 | if (newbrd) { |
253 | parse_address(dev, htype, halen, newbrd, &ifr1); | 246 | parse_address(dev, htype, halen, newbrd, &ifr1); |
247 | set_address(&ifr1, 1); | ||
254 | } | 248 | } |
255 | } | 249 | } |
256 | 250 | ||
@@ -264,14 +258,6 @@ static int do_set(char **argv) | |||
264 | if (mtu != -1) { | 258 | if (mtu != -1) { |
265 | set_mtu(dev, mtu); | 259 | set_mtu(dev, mtu); |
266 | } | 260 | } |
267 | if (newaddr || newbrd) { | ||
268 | if (newbrd) { | ||
269 | set_address(&ifr1, 1); | ||
270 | } | ||
271 | if (newaddr) { | ||
272 | set_address(&ifr0, 0); | ||
273 | } | ||
274 | } | ||
275 | if (mask) | 261 | if (mask) |
276 | do_chflags(dev, flags, mask); | 262 | do_chflags(dev, flags, mask); |
277 | return 0; | 263 | return 0; |
@@ -304,7 +290,7 @@ static int do_change(char **argv, const unsigned rtm) | |||
304 | struct ifinfomsg i; | 290 | struct ifinfomsg i; |
305 | char buf[1024]; | 291 | char buf[1024]; |
306 | } req; | 292 | } req; |
307 | int arg; | 293 | smalluint arg; |
308 | char *name_str = NULL, *link_str = NULL, *type_str = NULL, *dev_str = NULL; | 294 | char *name_str = NULL, *link_str = NULL, *type_str = NULL, *dev_str = NULL; |
309 | 295 | ||
310 | memset(&req, 0, sizeof(req)); | 296 | memset(&req, 0, sizeof(req)); |
@@ -375,17 +361,16 @@ int do_iplink(char **argv) | |||
375 | { | 361 | { |
376 | static const char keywords[] ALIGN1 = | 362 | static const char keywords[] ALIGN1 = |
377 | "add\0""delete\0""set\0""show\0""lst\0""list\0"; | 363 | "add\0""delete\0""set\0""show\0""lst\0""list\0"; |
378 | int key; | 364 | if (*argv) { |
379 | if (!*argv) | 365 | smalluint key = index_in_substrings(keywords, *argv); |
380 | return ipaddr_list_link(argv); | 366 | if (key > 5) /* invalid argument */ |
381 | key = index_in_substrings(keywords, *argv); | 367 | bb_error_msg_and_die(bb_msg_invalid_arg, *argv, applet_name); |
382 | if (key < 0) | 368 | argv++; |
383 | bb_error_msg_and_die(bb_msg_invalid_arg, *argv, applet_name); | 369 | if (key <= 1) /* add/delete */ |
384 | argv++; | 370 | return do_change(argv, key ? RTM_DELLINK : RTM_NEWLINK); |
385 | if (key <= 1) /* add/delete */ | 371 | else if (key == 2) /* set */ |
386 | return do_change(argv, key ? RTM_DELLINK : RTM_NEWLINK); | 372 | return do_set(argv); |
387 | else if (key == 2) /* set */ | 373 | } |
388 | return do_set(argv); | ||
389 | /* show, lst, list */ | 374 | /* show, lst, list */ |
390 | return ipaddr_list_link(argv); | 375 | return ipaddr_list_link(argv); |
391 | } | 376 | } |