summaryrefslogtreecommitdiffstats
path: root/usr.sbin/arp/arp.c
diff options
context:
space:
mode:
authorhenning <henning@openbsd.org>2005-03-29 21:59:59 +0000
committerhenning <henning@openbsd.org>2005-03-29 21:59:59 +0000
commitf4619fa8bf9d45ea07ccac4f219a108224591e7d (patch)
treeac6bf8a4c4c9782a42d9995498a4b97979c0097d /usr.sbin/arp/arp.c
parentcomment fix; ok beck@ (diff)
downloadwireguard-openbsd-f4619fa8bf9d45ea07ccac4f219a108224591e7d.tar.xz
wireguard-openbsd-f4619fa8bf9d45ea07ccac4f219a108224591e7d.zip
add -F to force replacement of entries with -s and -f
inspired by a diff from Mike Belopuhov <mkb@cvs.hnet.spb.ru>, these semantics with theo, manpage jaredy jmc and bob, ok bob
Diffstat (limited to 'usr.sbin/arp/arp.c')
-rw-r--r--usr.sbin/arp/arp.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/usr.sbin/arp/arp.c b/usr.sbin/arp/arp.c
index b9218195a85..6686268395e 100644
--- a/usr.sbin/arp/arp.c
+++ b/usr.sbin/arp/arp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: arp.c,v 1.31 2005/01/04 10:57:23 pascoe Exp $ */
+/* $OpenBSD: arp.c,v 1.32 2005/03/29 21:59:59 henning Exp $ */
/* $NetBSD: arp.c,v 1.12 1995/04/24 13:25:18 cgd Exp $ */
/*
@@ -41,7 +41,7 @@ static char copyright[] =
#ifndef lint
/*static char sccsid[] = "from: @(#)arp.c 8.2 (Berkeley) 1/2/94";*/
-static char *rcsid = "$OpenBSD: arp.c,v 1.31 2005/01/04 10:57:23 pascoe Exp $";
+static char *rcsid = "$OpenBSD: arp.c,v 1.32 2005/03/29 21:59:59 henning Exp $";
#endif /* not lint */
/*
@@ -88,6 +88,7 @@ int set(int, char **);
void usage(void);
static pid_t pid;
+static int replace; /* replace entries when adding */
static int nflag; /* no reverse dns lookups */
static int aflag; /* do it for all entries */
static int s = -1;
@@ -113,7 +114,7 @@ main(int argc, char *argv[])
opterr = 0;
func = 0;
- while ((ch = getopt(argc, argv, "andsf")) != -1) {
+ while ((ch = getopt(argc, argv, "andSsFf")) != -1) {
switch ((char)ch) {
case 'a':
aflag = 1;
@@ -131,6 +132,9 @@ main(int argc, char *argv[])
usage();
func = F_SET;
break;
+ case 'F':
+ replace = 1;
+ break;
case 'f':
if (func)
usage();
@@ -160,6 +164,8 @@ main(int argc, char *argv[])
case F_SET:
if (argc < 2 || argc > 5)
usage();
+ if (replace)
+ (void)delete(argv[0], NULL);
rtn = set(argc, argv) ? 1 : 0;
break;
case F_DELETE:
@@ -205,6 +211,8 @@ file(char *name)
retval = 1;
continue;
}
+ if (replace)
+ (void)delete(arg[0], NULL);
if (set(i, args))
retval = 1;
}
@@ -459,7 +467,7 @@ print_entry(struct sockaddr_dl *sdl, struct sockaddr_inarp *sin,
{
char *host;
struct hostent *hp;
- char ifname[IF_NAMESIZE];
+ char ifname[IFNAMSIZ];
if (nflag == 0)
hp = gethostbyaddr((caddr_t)&(sin->sin_addr),
@@ -527,8 +535,8 @@ usage(void)
(void)fprintf(stderr, "usage: arp -d hostname\n");
(void)fprintf(stderr, "usage: arp -d -a\n");
(void)fprintf(stderr,
- "usage: arp -s hostname ether_addr [temp | permanent] [pub]\n");
- (void)fprintf(stderr, "usage: arp -f filename\n");
+ "usage: arp [-F] -s hostname ether_addr [temp | permanent] [pub]\n");
+ (void)fprintf(stderr, "usage: arp [-F] -f filename\n");
exit(1);
}