summaryrefslogtreecommitdiffstats
path: root/contrib/tcpdump/print-arp.c
diff options
context:
space:
mode:
authorpst <pst@FreeBSD.org>1996-08-19 20:34:12 +0000
committerpst <pst@FreeBSD.org>1996-08-19 20:34:12 +0000
commit97a804ef88319863cfa8146c068ec895f4ad8316 (patch)
treea0e1430e0d74185364854779b70e6d96aba9cf47 /contrib/tcpdump/print-arp.c
downloadFreeBSD-src-97a804ef88319863cfa8146c068ec895f4ad8316.zip
FreeBSD-src-97a804ef88319863cfa8146c068ec895f4ad8316.tar.gz
Virgin import of unmodified tcpdump v3.2.1 distribution from LBL.
Obtained from: ftp://ftp.ee.lbl.gov/tcpdump.tar.Z on 19-Aug-1996.
Diffstat (limited to 'contrib/tcpdump/print-arp.c')
-rw-r--r--contrib/tcpdump/print-arp.c130
1 files changed, 130 insertions, 0 deletions
diff --git a/contrib/tcpdump/print-arp.c b/contrib/tcpdump/print-arp.c
new file mode 100644
index 0000000..14f6d8e
--- /dev/null
+++ b/contrib/tcpdump/print-arp.c
@@ -0,0 +1,130 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef lint
+static char rcsid[] =
+ "@(#) $Header: print-arp.c,v 1.39 96/07/17 14:56:17 leres Exp $ (LBL)";
+#endif
+
+#include <sys/param.h>
+#include <sys/time.h>
+#include <sys/socket.h>
+
+#if __STDC__
+struct mbuf;
+struct rtentry;
+#endif
+#include <net/if.h>
+
+#include <netinet/in.h>
+#include <netinet/if_ether.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#include "interface.h"
+#include "addrtoname.h"
+#include "ethertype.h"
+#include "extract.h" /* must come after interface.h */
+
+/* Compatibility */
+#ifndef REVARP_REQUEST
+#define REVARP_REQUEST 3
+#endif
+#ifndef REVARP_REPLY
+#define REVARP_REPLY 4
+#endif
+
+static u_char ezero[6];
+
+void
+arp_print(register const u_char *bp, u_int length, u_int caplen)
+{
+ register const struct ether_arp *ap;
+ register const struct ether_header *eh;
+ register u_short pro, hrd, op;
+
+ ap = (struct ether_arp *)bp;
+ if ((u_char *)(ap + 1) > snapend) {
+ printf("[|arp]");
+ return;
+ }
+ if (length < sizeof(struct ether_arp)) {
+ (void)printf("truncated-arp");
+ default_print((u_char *)ap, length);
+ return;
+ }
+
+ pro = EXTRACT_16BITS(&ap->arp_pro);
+ hrd = EXTRACT_16BITS(&ap->arp_hrd);
+ op = EXTRACT_16BITS(&ap->arp_op);
+
+ if ((pro != ETHERTYPE_IP && pro != ETHERTYPE_TRAIL)
+ || ap->arp_hln != sizeof(SHA(ap))
+ || ap->arp_pln != sizeof(SPA(ap))) {
+ (void)printf("arp-#%d for proto #%d (%d) hardware #%d (%d)",
+ op, pro, ap->arp_pln,
+ hrd, ap->arp_hln);
+ return;
+ }
+ if (pro == ETHERTYPE_TRAIL)
+ (void)printf("trailer-");
+ eh = (struct ether_header *)packetp;
+ switch (op) {
+
+ case ARPOP_REQUEST:
+ (void)printf("arp who-has %s", ipaddr_string(TPA(ap)));
+ if (memcmp((char *)ezero, (char *)THA(ap), 6) != 0)
+ (void)printf(" (%s)", etheraddr_string(THA(ap)));
+ (void)printf(" tell %s", ipaddr_string(SPA(ap)));
+ if (memcmp((char *)ESRC(eh), (char *)SHA(ap), 6) != 0)
+ (void)printf(" (%s)", etheraddr_string(SHA(ap)));
+ break;
+
+ case ARPOP_REPLY:
+ (void)printf("arp reply %s", ipaddr_string(SPA(ap)));
+ if (memcmp((char *)ESRC(eh), (char *)SHA(ap), 6) != 0)
+ (void)printf(" (%s)", etheraddr_string(SHA(ap)));
+ (void)printf(" is-at %s", etheraddr_string(SHA(ap)));
+ if (memcmp((char *)EDST(eh), (char *)THA(ap), 6) != 0)
+ (void)printf(" (%s)", etheraddr_string(THA(ap)));
+ break;
+
+ case REVARP_REQUEST:
+ (void)printf("rarp who-is %s tell %s",
+ etheraddr_string(THA(ap)),
+ etheraddr_string(SHA(ap)));
+ break;
+
+ case REVARP_REPLY:
+ (void)printf("rarp reply %s at %s",
+ etheraddr_string(THA(ap)),
+ ipaddr_string(TPA(ap)));
+ break;
+
+ default:
+ (void)printf("arp-#%d", op);
+ default_print((u_char *)ap, caplen);
+ return;
+ }
+ if (hrd != ARPHRD_ETHER)
+ printf(" hardware #%d", ap->arp_hrd);
+}
OpenPOWER on IntegriCloud