*/
#ifndef lint
-static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/tcpdump/print-arp.c,v 1.57 2002-09-04 11:22:13 guy Exp $ (LBL)";
+static const char rcsid[] _U_ =
+ "@(#) $Header: /tcpdump/master/tcpdump/print-arp.c,v 1.63 2003-11-16 09:36:12 guy Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
#define ARP_HDRLEN 8
-#define HRD(ap) ((ap)->ar_hrd)
+#define HRD(ap) EXTRACT_16BITS(&(ap)->ar_hrd)
#define HLN(ap) ((ap)->ar_hln)
#define PLN(ap) ((ap)->ar_pln)
-#define OP(ap) ((ap)->ar_op)
-#define PRO(ap) ((ap)->ar_pro)
+#define OP(ap) EXTRACT_16BITS(&(ap)->ar_op)
+#define PRO(ap) EXTRACT_16BITS(&(ap)->ar_pro)
#define SHA(ap) (ar_sha(ap))
#define SPA(ap) (ar_spa(ap))
#define THA(ap) (ar_tha(ap))
u_char aar_tpa[]; /* target protocol address */
#endif
-#define ATMHRD(ap) ((ap)->aar_hrd)
+#define ATMHRD(ap) EXTRACT_16BITS(&(ap)->aar_hrd)
#define ATMSHLN(ap) ((ap)->aar_shtl & ATMARP_LEN_MASK)
#define ATMSSLN(ap) ((ap)->aar_sstl & ATMARP_LEN_MASK)
#define ATMSPLN(ap) ((ap)->aar_spln)
-#define ATMOP(ap) ((ap)->aar_op)
-#define ATMPRO(ap) ((ap)->aar_pro)
+#define ATMOP(ap) EXTRACT_16BITS(&(ap)->aar_op)
+#define ATMPRO(ap) EXTRACT_16BITS(&(ap)->aar_pro)
#define ATMTHLN(ap) ((ap)->aar_thtl & ATMARP_LEN_MASK)
#define ATMTSLN(ap) ((ap)->aar_tstl & ATMARP_LEN_MASK)
#define ATMTPLN(ap) ((ap)->aar_tpln)
static u_char ezero[6];
static void
-atmarp_addr_print(const u_char *ha, u_int ha_len, const u_char *sa,
- u_int sa_len)
+atmarp_addr_print(const u_char *ha, u_int ha_len, const u_char *srca,
+ u_int srca_len)
{
- (void)printf("%s", linkaddr_string(ha, ha_len));
- if (sa_len != 0)
- (void)printf(",%s", linkaddr_string(sa, sa_len));
+ if (ha_len == 0)
+ (void)printf("<No address>");
+ else {
+ (void)printf("%s", linkaddr_string(ha, ha_len));
+ if (srca_len != 0)
+ (void)printf(",%s", linkaddr_string(srca, srca_len));
+ }
}
static void
ap = (const struct atmarp_pkthdr *)bp;
TCHECK(*ap);
- hrd = EXTRACT_16BITS(&ATMHRD(ap));
- pro = EXTRACT_16BITS(&ATMPRO(ap));
- op = EXTRACT_16BITS(&ATMOP(ap));
+ hrd = ATMHRD(ap);
+ pro = ATMPRO(ap);
+ op = ATMOP(ap);
if (!TTEST2(*aar_tpa(ap), ATMTPLN(ap))) {
(void)printf("truncated-atmarp");
case ARPOP_REPLY:
(void)printf("arp reply %s", ipaddr_string(ATMSPA(ap)));
(void)printf(" is-at ");
- if (ATMSHLN(ap) != 0)
- atmarp_addr_print(ATMSHA(ap), ATMSHLN(ap),
- ATMSSA(ap), ATMSSLN(ap));
- else
- (void)printf("<No address>");
+ atmarp_addr_print(ATMSHA(ap), ATMSHLN(ap), ATMSSA(ap),
+ ATMSSLN(ap));
break;
case ARPOP_INVREQUEST:
(void)printf("invarp who-is ");
- if (ATMTHLN(ap) != 0)
- atmarp_addr_print(ATMTHA(ap), ATMTHLN(ap),
- ATMTSA(ap), ATMTSLN(ap));
- else
- (void)printf("<No address>");
+ atmarp_addr_print(ATMTHA(ap), ATMTHLN(ap), ATMTSA(ap),
+ ATMTSLN(ap));
(void)printf(" tell ");
- if (ATMSHLN(ap) != 0)
- atmarp_addr_print(ATMSHA(ap), ATMSHLN(ap),
- ATMSSA(ap), ATMSSLN(ap));
- else
- (void)printf("<No address>");
+ atmarp_addr_print(ATMSHA(ap), ATMSHLN(ap), ATMSSA(ap),
+ ATMSSLN(ap));
break;
case ARPOP_INVREPLY:
(void)printf("invarp reply ");
- if (ATMSHLN(ap) != 0)
- atmarp_addr_print(ATMSHA(ap), ATMSHLN(ap),
- ATMSSA(ap), ATMSSLN(ap));
- else
- (void)printf("<No address>");
+ atmarp_addr_print(ATMSHA(ap), ATMSHLN(ap), ATMSSA(ap),
+ ATMSSLN(ap));
(void)printf(" at %s", ipaddr_string(ATMSPA(ap)));
break;
ap = (const struct arp_pkthdr *)bp;
TCHECK(*ap);
- hrd = EXTRACT_16BITS(&HRD(ap));
+ hrd = HRD(ap);
if (hrd == ARPHRD_ATM2225) {
atmarp_print(bp, length, caplen);
return;
}
- pro = EXTRACT_16BITS(&PRO(ap));
- op = EXTRACT_16BITS(&OP(ap));
+ pro = PRO(ap);
+ op = OP(ap);
if (!TTEST2(*ar_tpa(ap), PLN(ap))) {
(void)printf("truncated-arp");