summaryrefslogtreecommitdiffstats
path: root/usr.sbin/arp
diff options
context:
space:
mode:
authorcharnier <charnier@FreeBSD.org>1997-09-03 06:32:31 +0000
committercharnier <charnier@FreeBSD.org>1997-09-03 06:32:31 +0000
commit92653f0787150e32baac88c5108086bd8098c21b (patch)
tree520affa07d15fbff58bf1c96b27ee1c2e52f0f55 /usr.sbin/arp
parenta3da742b720ece80ed4005604fd18ff802db1bf2 (diff)
downloadFreeBSD-src-92653f0787150e32baac88c5108086bd8098c21b.zip
FreeBSD-src-92653f0787150e32baac88c5108086bd8098c21b.tar.gz
Use err(3). Document -n flag from OpenBSD.
Obtained from: OpenBSD.
Diffstat (limited to 'usr.sbin/arp')
-rw-r--r--usr.sbin/arp/arp.88
-rw-r--r--usr.sbin/arp/arp.c88
2 files changed, 43 insertions, 53 deletions
diff --git a/usr.sbin/arp/arp.8 b/usr.sbin/arp/arp.8
index 5b7b6bd..fc7df53 100644
--- a/usr.sbin/arp/arp.8
+++ b/usr.sbin/arp/arp.8
@@ -39,8 +39,10 @@
.Nd address resolution display and control
.Sh SYNOPSIS
.Nm arp
+.Op Fl n
.Ar hostname
.Nm arp
+.Op Fl n
.Fl a
.Nm arp
.Fl d Ar hostname
@@ -56,7 +58,7 @@
.Fl f Ar filename
.Sh DESCRIPTION
The
-.Nm arp
+.Nm
program displays and modifies the Internet-to-Ethernet address translation
tables used by the address resolution protocol
.Pq Xr arp 4 .
@@ -79,6 +81,10 @@ A super-user may delete an entry for the host called
with the
.Fl d
flag.
+.It Fl n
+Show network addresses as numbers (normally
+.Nm
+attempts to display addresses symbolically).
.It Fl s Ar hostname ether_addr
Create an
.Tn ARP
diff --git a/usr.sbin/arp/arp.c b/usr.sbin/arp/arp.c
index 100a85f..f27230e 100644
--- a/usr.sbin/arp/arp.c
+++ b/usr.sbin/arp/arp.c
@@ -41,8 +41,11 @@ static char const copyright[] =
#endif /* not lint */
#ifndef lint
+#if 0
static char const sccsid[] = "@(#)from: arp.c 8.2 (Berkeley) 1/2/94";
-static char const freebsdid[] = "$Id: arp.c,v 1.10 1997/03/31 05:09:46 imp Exp $";
+#endif
+static const char rcsid[] =
+ "$Id$";
#endif /* not lint */
/*
@@ -69,14 +72,15 @@ static char const freebsdid[] = "$Id: arp.c,v 1.10 1997/03/31 05:09:46 imp Exp $
#include <arpa/inet.h>
-#include <netdb.h>
+#include <err.h>
#include <errno.h>
+#include <netdb.h>
#include <nlist.h>
+#include <paths.h>
#include <stdio.h>
#include <stdlib.h>
-#include <unistd.h>
#include <strings.h>
-#include <paths.h>
+#include <unistd.h>
void dump(u_long addr);
int delete(char *host, char *info);
@@ -88,7 +92,6 @@ int file(char *name);
void getsocket(void);
int my_ether_aton(char *a, u_char *n);
int rtmsg(int cmd);
-void quit(char *msg);
int get_ether_addr(u_long ipaddr, u_char *hwaddr);
static int pid;
@@ -147,10 +150,8 @@ file(char *name)
int i, retval;
char line[100], arg[5][50], *args[5];
- if ((fp = fopen(name, "r")) == NULL) {
- fprintf(stderr, "arp: cannot open %s\n", name);
- exit(1);
- }
+ if ((fp = fopen(name, "r")) == NULL)
+ errx(1, "cannot open %s", name);
args[0] = &arg[0][0];
args[1] = &arg[1][0];
args[2] = &arg[2][0];
@@ -161,7 +162,7 @@ file(char *name)
i = sscanf(line, "%s %s %s %s %s", arg[0], arg[1], arg[2],
arg[3], arg[4]);
if (i < 2) {
- fprintf(stderr, "arp: bad line: %s\n", line);
+ warnx("bad line: %s", line);
retval = 1;
continue;
}
@@ -177,10 +178,8 @@ getsocket(void)
{
if (s < 0) {
s = socket(PF_ROUTE, SOCK_RAW, 0);
- if (s < 0) {
- perror("arp: socket");
- exit(1);
- }
+ if (s < 0)
+ err(1, "socket");
}
}
@@ -214,8 +213,7 @@ set(int argc, char **argv)
sin->sin_addr.s_addr = inet_addr(host);
if (sin->sin_addr.s_addr == -1) {
if (!(hp = gethostbyname(host))) {
- fprintf(stderr, "arp: %s: ", host);
- herror((char *)NULL);
+ warnx("%s: %s", host, hstrerror(h_errno));
return (1);
}
bcopy((char *)hp->h_addr, (char *)&sin->sin_addr,
@@ -249,7 +247,7 @@ set(int argc, char **argv)
}
tryagain:
if (rtmsg(RTM_GET) < 0) {
- perror(host);
+ warn("%s", host);
return (1);
}
sin = (struct sockaddr_inarp *)(rtm + 1);
@@ -296,11 +294,8 @@ get(char *host)
sin_m = blank_sin;
sin->sin_addr.s_addr = inet_addr(host);
if (sin->sin_addr.s_addr == -1) {
- if (!(hp = gethostbyname(host))) {
- fprintf(stderr, "arp: %s: ", host);
- herror((char *)NULL);
- exit(1);
- }
+ if (!(hp = gethostbyname(host)))
+ errx(1, "%s: %s", host, hstrerror(h_errno));
bcopy((char *)hp->h_addr, (char *)&sin->sin_addr,
sizeof sin->sin_addr);
}
@@ -330,8 +325,7 @@ delete(char *host, char *info)
sin->sin_addr.s_addr = inet_addr(host);
if (sin->sin_addr.s_addr == -1) {
if (!(hp = gethostbyname(host))) {
- fprintf(stderr, "arp: %s: ", host);
- herror((char *)NULL);
+ warnx("%s: %s", host, hstrerror(h_errno));
return (1);
}
bcopy((char *)hp->h_addr, (char *)&sin->sin_addr,
@@ -339,7 +333,7 @@ delete(char *host, char *info)
}
tryagain:
if (rtmsg(RTM_GET) < 0) {
- perror(host);
+ warn("%s", host);
return (1);
}
sin = (struct sockaddr_inarp *)(rtm + 1);
@@ -394,11 +388,11 @@ dump(u_long addr)
mib[4] = NET_RT_FLAGS;
mib[5] = RTF_LLINFO;
if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0)
- quit("route-sysctl-estimate");
+ errx(1, "route-sysctl-estimate");
if ((buf = malloc(needed)) == NULL)
- quit("malloc");
+ errx(1, "malloc");
if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0)
- quit("actual retrieval of routing table");
+ errx(1, "actual retrieval of routing table");
lim = buf + needed;
for (next = buf; next < lim; next += rtm->rtm_msglen) {
rtm = (struct rt_msghdr *)next;
@@ -456,7 +450,7 @@ my_ether_aton(char *a, u_char *n)
i = sscanf(a, "%x:%x:%x:%x:%x:%x", &o[0], &o[1], &o[2],
&o[3], &o[4], &o[5]);
if (i != 6) {
- fprintf(stderr, "arp: invalid Ethernet address '%s'\n", a);
+ warnx("invalid Ethernet address '%s'", a);
return (1);
}
for (i=0; i<6; i++)
@@ -467,12 +461,13 @@ my_ether_aton(char *a, u_char *n)
void
usage(void)
{
- printf("usage: arp hostname\n");
- printf(" arp -a [kernel] [kernel_memory]\n");
- printf(" arp -d hostname\n");
- printf(" arp -s hostname ether_addr [temp] [pub]\n");
- printf(" arp -S hostname ether_addr [temp] [pub]\n");
- printf(" arp -f filename\n");
+ fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n%s\n",
+ "usage: arp [-n] hostname",
+ " arp [-n] -a [kernel] [kernel_memory]",
+ " arp -d hostname",
+ " arp -s hostname ether_addr [temp] [pub]",
+ " arp -S hostname ether_addr [temp] [pub]",
+ " arp -f filename");
exit(1);
}
@@ -494,8 +489,7 @@ rtmsg(int cmd)
switch (cmd) {
default:
- fprintf(stderr, "arp: internal wrong cmd\n");
- exit(1);
+ errx(1, "internal wrong cmd");
case RTM_ADD:
rtm->rtm_addrs |= RTA_GATEWAY;
rtm->rtm_rmx.rmx_expire = expire_time;
@@ -529,7 +523,7 @@ doit:
rtm->rtm_type = cmd;
if ((rlen = write(s, (char *)&m_rtmsg, l)) < 0) {
if (errno != ESRCH || cmd != RTM_DELETE) {
- perror("writing to routing socket");
+ warn("writing to routing socket");
return (-1);
}
}
@@ -537,18 +531,10 @@ doit:
l = read(s, (char *)&m_rtmsg, sizeof(m_rtmsg));
} while (l > 0 && (rtm->rtm_seq != seq || rtm->rtm_pid != pid));
if (l < 0)
- (void) fprintf(stderr, "arp: read from routing socket: %s\n",
- strerror(errno));
+ warn("read from routing socket");
return (0);
}
-void
-quit(char *msg)
-{
- fprintf(stderr, "%s\n", msg);
- exit(1);
-}
-
/*
* get_ether_addr - get the hardware address of an interface on the
* the same subnet as ipaddr.
@@ -567,15 +553,13 @@ get_ether_addr(u_long ipaddr, u_char *hwaddr)
int s;
s = socket(AF_INET, SOCK_DGRAM, 0);
- if (s < 0) {
- perror("socket");
- exit(1);
- }
+ if (s < 0)
+ err(1, "socket");
ifc.ifc_len = sizeof(ifs);
ifc.ifc_req = ifs;
if (ioctl(s, SIOCGIFCONF, &ifc) < 0) {
- fprintf(stderr, "ioctl(SIOCGIFCONF): \n");
+ warnx("ioctl(SIOCGIFCONF)");
close(s);
return 0;
}
OpenPOWER on IntegriCloud