diff options
author | thompsa <thompsa@FreeBSD.org> | 2008-08-03 03:36:12 +0000 |
---|---|---|
committer | thompsa <thompsa@FreeBSD.org> | 2008-08-03 03:36:12 +0000 |
commit | dd68eea321c5f282e0c1121626f2981565a72c4d (patch) | |
tree | 7f957558f2e5c9c3c109183f2e89c865364ed8b6 | |
parent | 9468ed046dd7dfc62d5fe28db1b7770e2415faed (diff) | |
download | FreeBSD-src-dd68eea321c5f282e0c1121626f2981565a72c4d.zip FreeBSD-src-dd68eea321c5f282e0c1121626f2981565a72c4d.tar.gz |
Move the grekey to its own file, ifconfig.c does not have interface specific
code.
Submitted by: sam
-rw-r--r-- | sbin/ifconfig/Makefile | 1 | ||||
-rw-r--r-- | sbin/ifconfig/ifconfig.c | 20 | ||||
-rw-r--r-- | sbin/ifconfig/ifgre.c | 98 |
3 files changed, 99 insertions, 20 deletions
diff --git a/sbin/ifconfig/Makefile b/sbin/ifconfig/Makefile index 1f5cfed..087b3a0 100644 --- a/sbin/ifconfig/Makefile +++ b/sbin/ifconfig/Makefile @@ -23,6 +23,7 @@ SRCS+= ifclone.c # clone device support SRCS+= ifmac.c # MAC support SRCS+= ifmedia.c # SIOC[GS]IFMEDIA support SRCS+= ifvlan.c # SIOC[GS]ETVLAN support +SRCS+= ifgre.c # GRE keys etc SRCS+= ifieee80211.c regdomain.c # SIOC[GS]IEEE80211 support DPADD+= ${LIBBSDXML} ${LIBSBUF} diff --git a/sbin/ifconfig/ifconfig.c b/sbin/ifconfig/ifconfig.c index 6f0dd0e..4819679 100644 --- a/sbin/ifconfig/ifconfig.c +++ b/sbin/ifconfig/ifconfig.c @@ -51,7 +51,6 @@ static const char rcsid[] = #include <net/ethernet.h> #include <net/if.h> -#include <net/if_gre.h> #include <net/if_var.h> #include <net/if_dl.h> #include <net/if_types.h> @@ -750,18 +749,6 @@ setifmtu(const char *val, int dummy __unused, int s, } static void -setifgrekey(const char *val, int dummy __unused, int s, - const struct afswtch *afp) -{ - uint32_t grekey = atol(val); - - strncpy(ifr.ifr_name, name, sizeof (ifr.ifr_name)); - ifr.ifr_data = (caddr_t)&grekey; - if (ioctl(s, GRESKEY, (caddr_t)&ifr) < 0) - warn("ioctl (set grekey)"); -} - -static void setifname(const char *val, int dummy __unused, int s, const struct afswtch *afp) { @@ -876,12 +863,6 @@ status(const struct afswtch *afp, const struct sockaddr_dl *sdl, if (ioctl(s, SIOCGIFSTATUS, &ifs) == 0) printf("%s", ifs.ascii); - int grekey = 0; - ifr.ifr_data = (caddr_t)&grekey; - if (ioctl(s, GREGKEY, &ifr) == 0) - if (grekey != 0) - printf("\tgrekey: %d\n", grekey); - close(s); return; } @@ -1053,7 +1034,6 @@ static struct cmd basic_cmds[] = { DEF_CMD("noicmp", IFF_LINK1, setifflags), DEF_CMD_ARG("mtu", setifmtu), DEF_CMD_ARG("name", setifname), - DEF_CMD_ARG("grekey", setifgrekey), }; static __constructor void diff --git a/sbin/ifconfig/ifgre.c b/sbin/ifconfig/ifgre.c new file mode 100644 index 0000000..818340b --- /dev/null +++ b/sbin/ifconfig/ifgre.c @@ -0,0 +1,98 @@ +/*- + * Copyright (c) 2008 Andrew Thompson. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef lint +static const char rcsid[] = + "$FreeBSD$"; +#endif + +#include <sys/param.h> +#include <sys/ioctl.h> +#include <sys/socket.h> +#include <sys/sockio.h> + +#include <stdlib.h> +#include <unistd.h> + +#include <net/ethernet.h> +#include <net/if.h> +#include <net/if_gre.h> +#include <net/route.h> + +#include <ctype.h> +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <unistd.h> +#include <err.h> +#include <errno.h> + +#include "ifconfig.h" + +static void gre_status(int s); + +static void +gre_status(int s) +{ + int grekey = 0; + + ifr.ifr_data = (caddr_t)&grekey; + if (ioctl(s, GREGKEY, &ifr) == 0) + if (grekey != 0) + printf("\tgrekey: %d\n", grekey); +} + +static void +setifgrekey(const char *val, int dummy __unused, int s, + const struct afswtch *afp) +{ + uint32_t grekey = atol(val); + + strncpy(ifr.ifr_name, name, sizeof (ifr.ifr_name)); + ifr.ifr_data = (caddr_t)&grekey; + if (ioctl(s, GRESKEY, (caddr_t)&ifr) < 0) + warn("ioctl (set grekey)"); +} + +static struct cmd gre_cmds[] = { + DEF_CMD_ARG("grekey", setifgrekey), +}; +static struct afswtch af_gre = { + .af_name = "af_gre", + .af_af = AF_UNSPEC, + .af_other_status = gre_status, +}; + +static __constructor void +gre_ctor(void) +{ +#define N(a) (sizeof(a) / sizeof(a[0])) + int i; + + for (i = 0; i < N(gre_cmds); i++) + cmd_register(&gre_cmds[i]); + af_register(&af_gre); +#undef N +} |