From 3b0edf7dd0026c606b91b91c0f5cddc3ccafb058 Mon Sep 17 00:00:00 2001 From: Andrew Thompson Date: Sun, 3 Aug 2008 03:36:12 +0000 Subject: [PATCH] Move the grekey to its own file, ifconfig.c does not have interface specific code. Submitted by: sam --- sbin/ifconfig/Makefile | 1 + sbin/ifconfig/ifconfig.c | 20 -------- sbin/ifconfig/ifgre.c | 98 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 99 insertions(+), 20 deletions(-) create mode 100644 sbin/ifconfig/ifgre.c diff --git a/sbin/ifconfig/Makefile b/sbin/ifconfig/Makefile index 1f5cfedaa938..087b3a009a90 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 6f0dd0ecec33..4819679bdd02 100644 --- a/sbin/ifconfig/ifconfig.c +++ b/sbin/ifconfig/ifconfig.c @@ -51,7 +51,6 @@ static const char rcsid[] = #include #include -#include #include #include #include @@ -749,18 +748,6 @@ setifmtu(const char *val, int dummy __unused, int s, warn("ioctl (set mtu)"); } -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 000000000000..818340bb7249 --- /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 +#include +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#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 +}