/* \summary: Address Resolution Protocol (ARP) printer */
-#ifdef HAVE_CONFIG_H
#include <config.h>
-#endif
#include "netdissect-stdinc.h"
-#include <string.h>
-
#define ND_LONGJMP_FROM_TCHECK
#include "netdissect.h"
#include "addrtoname.h"
#define ARPOP_REVREPLY 4 /* response giving protocol address */
#define ARPOP_INVREQUEST 8 /* request to identify peer */
#define ARPOP_INVREPLY 9 /* response identifying peer */
-#define ARPOP_NAK 10 /* NAK - only valif for ATM ARP */
+#define ARPOP_NAK 10 /* NAK - only valid for ATM ARP */
/*
* The remaining fields are variable in size,
static int
isnonzero(netdissect_options *ndo, const u_char *a, size_t len)
{
- while (len > 0) {
+ while (len != 0) {
if (GET_U_1(a) != 0)
return (1);
a++;
linkaddr = LINKADDR_FRELAY;
break;
default:
- linkaddr = LINKADDR_ETHER;
+ linkaddr = LINKADDR_MAC48;
break;
}
break;
case ARPOP_REVREQUEST:
- ND_PRINT("who-is %s tell %s",
- GET_LINKADDR_STRING(THA(ap), linkaddr, HRD_LEN(ap)),
+ /*
+ * XXX - GET_LINKADDR_STRING() may return a pointer to
+ * a static buffer, so we only have one call to it per
+ * ND_PRINT() call.
+ *
+ * This should be done in a cleaner fashion.
+ */
+ ND_PRINT("who-is %s",
+ GET_LINKADDR_STRING(THA(ap), linkaddr, HRD_LEN(ap)));
+ ND_PRINT(" tell %s",
GET_LINKADDR_STRING(SHA(ap), linkaddr, HRD_LEN(ap)));
break;
break;
case ARPOP_INVREQUEST:
- ND_PRINT("who-is %s tell %s",
- GET_LINKADDR_STRING(THA(ap), linkaddr, HRD_LEN(ap)),
+ /*
+ * XXX - GET_LINKADDR_STRING() may return a pointer to
+ * a static buffer, so we only have one call to it per
+ * ND_PRINT() call.
+ *
+ * This should be done in a cleaner fashion.
+ */
+ ND_PRINT("who-is %s",
+ GET_LINKADDR_STRING(THA(ap), linkaddr, HRD_LEN(ap)));
+ ND_PRINT(" tell %s",
GET_LINKADDR_STRING(SHA(ap), linkaddr, HRD_LEN(ap)));
break;