summaryrefslogtreecommitdiffstats
path: root/sbin/ifconfig
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>1997-05-10 14:47:35 +0000
committerpeter <peter@FreeBSD.org>1997-05-10 14:47:35 +0000
commit6f36e2eccf49524bd4de897bfe7947bf6020aec1 (patch)
treebbc42b3be15501600c2890d86b5b76ad568ef982 /sbin/ifconfig
parent4ca868f8b868864e07548f2b67d96af31b2591b0 (diff)
downloadFreeBSD-src-6f36e2eccf49524bd4de897bfe7947bf6020aec1.zip
FreeBSD-src-6f36e2eccf49524bd4de897bfe7947bf6020aec1.tar.gz
Grumble.. My last patchup here didn't quite work either. I hate this
program and it's use of global variables. Somehow, I managed to miss the most obvious case.. "ifconfig ed0 10.0.0.1" failed (no "inet") Submitted by: dfr
Diffstat (limited to 'sbin/ifconfig')
-rw-r--r--sbin/ifconfig/ifconfig.c56
-rw-r--r--sbin/ifconfig/ifconfig.h9
-rw-r--r--sbin/ifconfig/ifmedia.c11
3 files changed, 46 insertions, 30 deletions
diff --git a/sbin/ifconfig/ifconfig.c b/sbin/ifconfig/ifconfig.c
index 4c165a9..4d0a7d8 100644
--- a/sbin/ifconfig/ifconfig.c
+++ b/sbin/ifconfig/ifconfig.c
@@ -42,7 +42,7 @@ static const char copyright[] =
static char sccsid[] = "@(#)ifconfig.c 8.2 (Berkeley) 2/16/94";
*/
static const char rcsid[] =
- "$Id: ifconfig.c,v 1.27 1997/05/04 06:27:45 peter Exp $";
+ "$Id: ifconfig.c,v 1.28 1997/05/07 04:28:26 peter Exp $";
#endif /* not lint */
#include <sys/param.h>
@@ -130,13 +130,13 @@ struct afswtch;
void Perror __P((const char *cmd));
void checkatrange __P((struct sockaddr_at *));
int ifconfig __P((int argc, char *const *argv, const struct afswtch *rafp));
-void notealias __P((const char *, int, int));
+void notealias __P((const char *, int, int, const struct afswtch *rafp));
void printb __P((const char *s, unsigned value, const char *bits));
void rt_xaddrs __P((caddr_t, caddr_t, struct rt_addrinfo *));
-void status __P((void));
+void status __P((const struct afswtch *afp));
void usage __P((void));
-typedef void c_func __P((const char *cmd, int arg, int s));
+typedef void c_func __P((const char *cmd, int arg, int s, const struct afswtch *rafp));
c_func setatphase, setatrange;
c_func setifaddr, setifbroadaddr, setifdstaddr, setifnetmask;
c_func setifipdst;
@@ -152,7 +152,7 @@ const
struct cmd {
const char *c_name;
int c_parameter; /* NEXTARG means next argv */
- void (*c_func) __P((const char *, int, int));
+ void (*c_func) __P((const char *, int, int, const struct afswtch *rafp));
} cmds[] = {
{ "up", IFF_UP, setifflags } ,
{ "down", -IFF_UP, setifflags },
@@ -247,8 +247,6 @@ struct afswtch {
{ 0, 0, 0, 0 }
};
-const struct afswtch *afp; /*the address family being set or asked about*/
-
/*
* Expand the compacted form of addresses as returned via the
* configuration read via sysctl().
@@ -305,6 +303,8 @@ main(argc, argv)
int c;
int all, namesonly, downonly, uponly;
int foundit = 0, need_nl = 0;
+ const struct afswtch *afp = 0; /*the address family being set or asked about*/
+
size_t needed;
int mib[6];
@@ -491,7 +491,7 @@ ifconfig(argc, argv, rafp)
mtu = ifr.ifr_mtu;
if (argc == 0) {
- status(); /* uses global afp */
+ status(rafp);
#ifdef USE_IF_MEDIA
media_status(s);
#endif
@@ -512,10 +512,10 @@ ifconfig(argc, argv, rafp)
if (argv[1] == NULL)
errx(1, "'%s' requires argument",
p->c_name);
- (*p->c_func)(argv[1], 0, s);
+ (*p->c_func)(argv[1], 0, s, rafp);
argc--, argv++;
} else
- (*p->c_func)(*argv, p->c_parameter, s);
+ (*p->c_func)(*argv, p->c_parameter, s, rafp);
}
argc--, argv++;
}
@@ -586,10 +586,11 @@ ifconfig(argc, argv, rafp)
/*ARGSUSED*/
void
-setifaddr(addr, param, s)
+setifaddr(addr, param, s, afp)
const char *addr;
int param;
int s;
+ const struct afswtch *afp;
{
/*
* Delay the ioctl to set the interface addr until flags are all set.
@@ -603,28 +604,31 @@ setifaddr(addr, param, s)
}
void
-setifnetmask(addr, dummy, s)
+setifnetmask(addr, dummy, s, afp)
const char *addr;
int dummy __unused;
int s;
+ const struct afswtch *afp;
{
(*afp->af_getaddr)(addr, MASK);
}
void
-setifbroadaddr(addr, dummy, s)
+setifbroadaddr(addr, dummy, s, afp)
const char *addr;
int dummy __unused;
int s;
+ const struct afswtch *afp;
{
(*afp->af_getaddr)(addr, DSTADDR);
}
void
-setifipdst(addr, dummy, s)
+setifipdst(addr, dummy, s, afp)
const char *addr;
int dummy __unused;
int s;
+ const struct afswtch *afp;
{
in_getaddr(addr, DSTADDR);
setipdst++;
@@ -634,10 +638,11 @@ setifipdst(addr, dummy, s)
#define rqtosa(x) (&(((struct ifreq *)(afp->x))->ifr_addr))
void
-notealias(addr, param, s)
+notealias(addr, param, s, afp)
const char *addr;
int param;
int s;
+ const struct afswtch *afp;
{
if (setaddr && doalias == 0 && param < 0)
bcopy((caddr_t)rqtosa(af_addreq),
@@ -653,19 +658,21 @@ notealias(addr, param, s)
/*ARGSUSED*/
void
-setifdstaddr(addr, param, s)
+setifdstaddr(addr, param, s, afp)
const char *addr;
int param __unused;
int s;
+ const struct afswtch *afp;
{
(*afp->af_getaddr)(addr, DSTADDR);
}
void
-setifflags(vname, value, s)
+setifflags(vname, value, s, afp)
const char *vname;
int value;
int s;
+ const struct afswtch *afp;
{
if (ioctl(s, SIOCGIFFLAGS, (caddr_t)&ifr) < 0) {
Perror("ioctl (SIOCGIFFLAGS)");
@@ -685,10 +692,11 @@ setifflags(vname, value, s)
}
void
-setifmetric(val, dummy, s)
+setifmetric(val, dummy, s, afp)
const char *val;
int dummy __unused;
int s;
+ const struct afswtch *afp;
{
strncpy(ifr.ifr_name, name, sizeof (ifr.ifr_name));
ifr.ifr_metric = atoi(val);
@@ -697,10 +705,11 @@ setifmetric(val, dummy, s)
}
void
-setifmtu(val, dummy, s)
+setifmtu(val, dummy, s, afp)
const char *val;
int dummy __unused;
int s;
+ const struct afswtch *afp;
{
strncpy(ifr.ifr_name, name, sizeof (ifr.ifr_name));
ifr.ifr_mtu = atoi(val);
@@ -728,7 +737,8 @@ setsnpaoffset(val, dummy)
* specified, show it and it only; otherwise, show them all.
*/
void
-status()
+status(afp)
+ const struct afswtch *afp;
{
const struct afswtch *p = NULL;
char *mynext;
@@ -1137,10 +1147,11 @@ at_getaddr(addr, which)
/* XXX FIXME -- should use strtoul for better parsing. */
void
-setatrange(range, dummy, s)
+setatrange(range, dummy, s, afp)
const char *range;
int dummy __unused;
int s;
+ const struct afswtch *afp;
{
u_short first = 123, last = 123;
@@ -1153,10 +1164,11 @@ setatrange(range, dummy, s)
}
void
-setatphase(phase, dummy, s)
+setatphase(phase, dummy, s, afp)
const char *phase;
int dummy __unused;
int s;
+ const struct afswtch *afp;
{
if (!strcmp(phase, "1"))
at_nr.nr_phase = 1;
diff --git a/sbin/ifconfig/ifconfig.h b/sbin/ifconfig/ifconfig.h
index d840d05..7589a48 100644
--- a/sbin/ifconfig/ifconfig.h
+++ b/sbin/ifconfig/ifconfig.h
@@ -31,15 +31,16 @@
*
* so there!
*
- * $Id$
+ * $Id: ifconfig.h,v 1.1 1997/05/04 06:27:45 peter Exp $
*/
extern struct ifreq ifr;
extern char name[32]; /* name of interface */
extern int allmedia;
+struct afswtch;
-extern void setmedia(const char *, int, int);
-extern void setmediaopt(const char *, int, int);
-extern void unsetmediaopt(const char *, int, int);
+extern void setmedia(const char *, int, int, const struct afswtch *rafp);
+extern void setmediaopt(const char *, int, int, const struct afswtch *rafp);
+extern void unsetmediaopt(const char *, int, int, const struct afswtch *rafp);
extern void media_status(int s);
diff --git a/sbin/ifconfig/ifmedia.c b/sbin/ifconfig/ifmedia.c
index d867ba4..7d7f0f1 100644
--- a/sbin/ifconfig/ifmedia.c
+++ b/sbin/ifconfig/ifmedia.c
@@ -1,5 +1,5 @@
/* $NetBSD: ifconfig.c,v 1.34 1997/04/21 01:17:58 lukem Exp $ */
-/* $Id$ */
+/* $Id: ifmedia.c,v 1.1 1997/05/04 06:22:27 peter Exp $ */
/*
* Copyright (c) 1997 Jason R. Thorpe.
@@ -170,10 +170,11 @@ media_status(s)
}
void
-setmedia(val, d, s)
+setmedia(val, d, s, afp)
const char *val;
int d;
int s;
+ const struct afswtch *afp;
{
struct ifmediareq ifmr;
int first_type, subtype;
@@ -215,20 +216,22 @@ setmedia(val, d, s)
}
void
-setmediaopt(val, d, s)
+setmediaopt(val, d, s, afp)
const char *val;
int d;
int s;
+ const struct afswtch *afp;
{
domediaopt(val, 0, s);
}
void
-unsetmediaopt(val, d, s)
+unsetmediaopt(val, d, s, afp)
const char *val;
int d;
int s;
+ const struct afswtch *afp;
{
domediaopt(val, 1, s);
OpenPOWER on IntegriCloud