diff options
| author | 2005-03-29 21:59:59 +0000 | |
|---|---|---|
| committer | 2005-03-29 21:59:59 +0000 | |
| commit | f4619fa8bf9d45ea07ccac4f219a108224591e7d (patch) | |
| tree | ac6bf8a4c4c9782a42d9995498a4b97979c0097d /usr.sbin/arp/arp.c | |
| parent | comment fix; ok beck@ (diff) | |
| download | wireguard-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.c | 20 |
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); } |
