source: MondoRescue/branches/2.2.5/mindi-busybox/networking/libiproute/ip_parse_common_args.c@ 1765

Last change on this file since 1765 was 1765, checked in by Bruno Cornec, 17 years ago

Update to busybox 1.7.2

File size: 1.9 KB
Line 
1/* vi: set sw=4 ts=4: */
2/*
3 * ip.c "ip" utility frontend.
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 * Changes:
14 *
15 * Rani Assaf <rani@magic.metawire.com> 980929: resolve addresses
16 */
17
18#include "ip_common.h" /* #include "libbb.h" is inside */
19#include "utils.h"
20
21int preferred_family = AF_UNSPEC;
22smallint oneline;
23char _SL_;
24
25void ip_parse_common_args(int *argcp, char ***argvp)
26{
27 int argc = *argcp;
28 char **argv = *argvp;
29 static const char ip_common_commands[] ALIGN1 =
30 "-family\0""inet\0""inet6\0""link\0"
31 "-4\0""-6\0""-0\0""-oneline\0";
32 enum {
33 ARG_family = 1,
34 ARG_inet,
35 ARG_inet6,
36 ARG_link,
37 ARG_IPv4,
38 ARG_IPv6,
39 ARG_packet,
40 ARG_oneline
41 };
42 smalluint arg;
43
44 while (argc > 1) {
45 char *opt = argv[1];
46
47 if (strcmp(opt,"--") == 0) {
48 argc--;
49 argv++;
50 break;
51 }
52 if (opt[0] != '-')
53 break;
54 if (opt[1] == '-')
55 opt++;
56 arg = index_in_strings(ip_common_commands, opt) + 1;
57 if (arg == ARG_family) {
58 argc--;
59 argv++;
60 if (!argv[1])
61 bb_show_usage();
62 arg = index_in_strings(ip_common_commands, argv[1]) + 1;
63 if (arg == ARG_inet)
64 preferred_family = AF_INET;
65 else if (arg == ARG_inet6)
66 preferred_family = AF_INET6;
67 else if (arg == ARG_link)
68 preferred_family = AF_PACKET;
69 else
70 invarg(argv[1], "protocol family");
71 } else if (arg == ARG_IPv4) {
72 preferred_family = AF_INET;
73 } else if (arg == ARG_IPv6) {
74 preferred_family = AF_INET6;
75 } else if (arg == ARG_packet) {
76 preferred_family = AF_PACKET;
77 } else if (arg == ARG_oneline) {
78 ++oneline;
79 } else {
80 bb_show_usage();
81 }
82 argc--;
83 argv++;
84 }
85 _SL_ = oneline ? '\\' : '\n';
86 *argcp = argc;
87 *argvp = argv;
88}
Note: See TracBrowser for help on using the repository browser.