mirror of
https://git.savannah.gnu.org/git/inetutils.git
synced 2026-01-12 00:19:39 +08:00
ifconfig: Parse command line for BSD.
This commit is contained in:
10
ChangeLog
10
ChangeLog
@@ -1,3 +1,13 @@
|
||||
2012-12-04 Mats Erik Andersson <gnu@gisladisker.se>
|
||||
|
||||
* ifconfig/system/bsd.c (system_help): Update.
|
||||
(system_parse_opt_rest): Populate function with
|
||||
parser and actions for command line arguments.
|
||||
|
||||
* ifconfig/system/solaris.c (system_help): Update.
|
||||
(system_parse_opt_rest): Implement actions for the
|
||||
arguments "up" and "down" of an interface.
|
||||
|
||||
2012-12-03 Mats Erik Andersson <gnu@gisladisker.se>
|
||||
|
||||
ifconfig: Audit displaying of metrics.
|
||||
|
||||
@@ -27,6 +27,7 @@ hpux10.20
|
||||
|
||||
|
||||
sparc-sun-solaris-2.7
|
||||
OpenSolaris
|
||||
|
||||
Uses the output format `unix'.
|
||||
|
||||
@@ -34,3 +35,9 @@ sparc-sun-solaris-2.7
|
||||
alphaev56-dec-osf4.0g
|
||||
|
||||
Uses the output format `osf'.
|
||||
|
||||
|
||||
*BSD
|
||||
|
||||
Uses output format `unix'. Basic functionality for
|
||||
DragonflyBSD, FreeBSD, NetBSD, and OpenBSD.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* generic.c -- generic system code for ifconfig
|
||||
/* bsd.c -- BSD specific code for ifconfig
|
||||
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
|
||||
2010, 2011, 2012 Free Software Foundation, Inc.
|
||||
|
||||
@@ -38,7 +38,8 @@ const char *system_default_format = "unix";
|
||||
/* Argument parsing stuff. */
|
||||
|
||||
const char *system_help = "\
|
||||
NAME [ADDR [DSTADDR]] [broadcast BRDADDR] [netmask MASK] [metric N] [mtu N]";
|
||||
NAME [ADDR [DSTADDR]] [broadcast BRDADDR] [netmask MASK] "
|
||||
"[metric N] [mtu N] [up|down]";
|
||||
|
||||
struct argp_child system_argp_child;
|
||||
|
||||
@@ -51,7 +52,90 @@ system_parse_opt (struct ifconfig **ifp, char option, char *optarg)
|
||||
int
|
||||
system_parse_opt_rest (struct ifconfig **ifp, int argc, char *argv[])
|
||||
{
|
||||
return 0;
|
||||
int i = 0;
|
||||
enum
|
||||
{
|
||||
EXPECT_NOTHING,
|
||||
EXPECT_BROADCAST,
|
||||
EXPECT_NETMASK,
|
||||
EXPECT_METRIC,
|
||||
EXPECT_MTU
|
||||
} expect = EXPECT_NOTHING;
|
||||
|
||||
*ifp = parse_opt_new_ifs (argv[0]);
|
||||
|
||||
while (++i < argc)
|
||||
{
|
||||
switch (expect)
|
||||
{
|
||||
case EXPECT_BROADCAST:
|
||||
parse_opt_set_brdaddr (*ifp, argv[i]);
|
||||
break;
|
||||
|
||||
case EXPECT_NETMASK:
|
||||
parse_opt_set_netmask (*ifp, argv[i]);
|
||||
break;
|
||||
|
||||
case EXPECT_MTU:
|
||||
parse_opt_set_mtu (*ifp, argv[i]);
|
||||
break;
|
||||
|
||||
case EXPECT_METRIC:
|
||||
parse_opt_set_metric (*ifp, argv[i]);
|
||||
break;
|
||||
|
||||
case EXPECT_NOTHING:
|
||||
break;
|
||||
}
|
||||
|
||||
if (expect != EXPECT_NOTHING)
|
||||
expect = EXPECT_NOTHING;
|
||||
else if (!strcmp (argv[i], "broadcast"))
|
||||
expect = EXPECT_BROADCAST;
|
||||
else if (!strcmp (argv[i], "netmask"))
|
||||
expect = EXPECT_NETMASK;
|
||||
else if (!strcmp (argv[i], "metric"))
|
||||
expect = EXPECT_METRIC;
|
||||
else if (!strcmp (argv[i], "mtu"))
|
||||
expect = EXPECT_MTU;
|
||||
else if (!strcmp (argv[i], "up"))
|
||||
parse_opt_set_flag (*ifp, IFF_UP | IFF_RUNNING, 0);
|
||||
else if (!strcmp (argv[i], "down"))
|
||||
parse_opt_set_flag (*ifp, IFF_UP, 1);
|
||||
else
|
||||
{
|
||||
/* Recognize AF here. */
|
||||
/* Also alias, -alias, promisc, -promisc,
|
||||
create, destroy, monitor, -monitor. */
|
||||
if (!((*ifp)->valid & IF_VALID_ADDR))
|
||||
parse_opt_set_address (*ifp, argv[i]);
|
||||
else if (!((*ifp)->valid & IF_VALID_DSTADDR))
|
||||
parse_opt_set_dstaddr (*ifp, argv[i]);
|
||||
}
|
||||
}
|
||||
|
||||
switch (expect)
|
||||
{
|
||||
case EXPECT_BROADCAST:
|
||||
error (0, 0, "option `broadcast' requires an argument");
|
||||
break;
|
||||
|
||||
case EXPECT_NETMASK:
|
||||
error (0, 0, "option `netmask' requires an argument");
|
||||
break;
|
||||
|
||||
case EXPECT_METRIC:
|
||||
error (0, 0, "option `metric' requires an argument");
|
||||
break;
|
||||
|
||||
case EXPECT_MTU:
|
||||
error (0, 0, "option `mtu' requires an argument");
|
||||
break;
|
||||
|
||||
case EXPECT_NOTHING:
|
||||
break;
|
||||
}
|
||||
return expect == EXPECT_NOTHING;
|
||||
}
|
||||
|
||||
int
|
||||
|
||||
@@ -56,7 +56,8 @@ const char *system_default_format = "unix";
|
||||
/* Argument parsing stuff. */
|
||||
|
||||
const char *system_help = "\
|
||||
NAME [ADDR [DSTADDR]] [broadcast BRDADDR] [netmask MASK] [metric N] [mtu N]";
|
||||
NAME [ADDR [DSTADDR]] [broadcast BRDADDR] [netmask MASK] "
|
||||
"[metric N] [mtu N] [up|down]";
|
||||
|
||||
struct argp_child system_argp_child;
|
||||
|
||||
@@ -115,10 +116,13 @@ system_parse_opt_rest (struct ifconfig **ifp, int argc, char *argv[])
|
||||
expect = EXPECT_METRIC;
|
||||
else if (!strcmp (argv[i], "mtu"))
|
||||
expect = EXPECT_MTU;
|
||||
else if (!strcmp (argv[i], "up"))
|
||||
parse_opt_set_flag (*ifp, IFF_UP | IFF_RUNNING, 0);
|
||||
else if (!strcmp (argv[i], "down"))
|
||||
parse_opt_set_flag (*ifp, IFF_UP, 1);
|
||||
else
|
||||
{
|
||||
/* Recognize AF here. */
|
||||
/* Recognize up/down. */
|
||||
/* Also auto-revarp, trailers, -trailers,
|
||||
private, -private, arp, -arp, plumb, unplumb. */
|
||||
if (!((*ifp)->valid & IF_VALID_ADDR))
|
||||
|
||||
Reference in New Issue
Block a user