From: guy Date: Fri, 12 Sep 2003 22:05:56 +0000 (+0000) Subject: Updates from Bruce Simpson: X-Git-Tag: tcpdump-3.8-bp~50 X-Git-Url: https://git.tcpdump.org/tcpdump/commitdiff_plain/cd8e2f4ca0c5efca12721442613b4f70492b7226 Updates from Bruce Simpson: Fix numerous bugs in my AODV submission, red faces all round, mainly due to misunderstanding of EXTRACT_STRING() macro arguments (because these are macros, type checking didn't happen). AODV HELLO extensions are now correctly printed. The code is closer to FreeBSD's style guidelines. Don't use "u_char" and "u_long", use "u_int8_t" and "u_int32_t". "u_long" is definitely wrong as it's 64 bits on some platforms; "u_char" is safe, but the official tcpdump style uses "u_int8_t". At least according to the (long-since-expired) draft-perkins-aodv6-01, the V6 AODV messages have different message type values from the V4 ones in draft-ietf-manet-aodv-13. However, draft-ietf-manet-aodv-13 says that the only differences are in the addresses; we support both. Clean up the way we tell the AODV6 dissector that we're running atop IPv6 a bit. Use "udpipaddr_print()" if we're printing AODV packets as a result of saying "anything that matches this filter is AODV", rather than doing it ourselves under the assumption that it's running over IPv4. --- diff --git a/aodv.h b/aodv.h index bffb8141..6b8315b6 100644 --- a/aodv.h +++ b/aodv.h @@ -1,4 +1,4 @@ -/* @(#) $Header: /tcpdump/master/tcpdump/aodv.h,v 1.1 2003-08-06 06:49:39 guy Exp $ (LBL) */ +/* @(#) $Header: /tcpdump/master/tcpdump/aodv.h,v 1.2 2003-09-12 22:05:56 guy Exp $ (LBL) */ /* * Copyright (c) 2003 Bruce M. Simpson * All rights reserved. @@ -34,27 +34,27 @@ #define _AODV_H_ struct aodv_rreq { - u_char rreq_type; /* AODV message type (1) */ - u_char rreq_flags; /* various flags */ - u_char rreq_zero0; /* reserved, set to zero */ - u_char rreq_hops; /* number of hops from originator */ - u_long rreq_id; /* request ID */ - u_long rreq_da; /* destination IPv4 address */ - u_long rreq_ds; /* destination sequence number */ - u_long rreq_oa; /* originator IPv4 address */ - u_long rreq_os; /* originator sequence number */ + u_int8_t rreq_type; /* AODV message type (1) */ + u_int8_t rreq_flags; /* various flags */ + u_int8_t rreq_zero0; /* reserved, set to zero */ + u_int8_t rreq_hops; /* number of hops from originator */ + u_int32_t rreq_id; /* request ID */ + u_int32_t rreq_da; /* destination IPv4 address */ + u_int32_t rreq_ds; /* destination sequence number */ + u_int32_t rreq_oa; /* originator IPv4 address */ + u_int32_t rreq_os; /* originator sequence number */ }; #ifdef INET6 struct aodv_rreq6 { - u_char rreq_type; /* AODV message type (1) */ - u_char rreq_flags; /* various flags */ - u_char rreq_zero0; /* reserved, set to zero */ - u_char rreq_hops; /* number of hops from originator */ - u_long rreq_id; /* request ID */ + u_int8_t rreq_type; /* AODV message type (1) */ + u_int8_t rreq_flags; /* various flags */ + u_int8_t rreq_zero0; /* reserved, set to zero */ + u_int8_t rreq_hops; /* number of hops from originator */ + u_int32_t rreq_id; /* request ID */ struct in6_addr rreq_da; /* destination IPv6 address */ - u_long rreq_ds; /* destination sequence number */ + u_int32_t rreq_ds; /* destination sequence number */ struct in6_addr rreq_oa; /* originator IPv6 address */ - u_long rreq_os; /* originator sequence number */ + u_int32_t rreq_os; /* originator sequence number */ }; #endif @@ -66,25 +66,25 @@ struct aodv_rreq6 { #define RREQ_FLAGS_MASK 0xF8 /* mask for rreq_flags */ struct aodv_rrep { - u_char rrep_type; /* AODV message type (2) */ - u_char rrep_flags; /* various flags */ - u_char rrep_ps; /* prefix size */ - u_char rrep_hops; /* number of hops from o to d */ - u_long rrep_da; /* destination IPv4 address */ - u_long rrep_ds; /* destination sequence number */ - u_long rrep_oa; /* originator IPv4 address */ - u_long rrep_life; /* lifetime of this route */ + u_int8_t rrep_type; /* AODV message type (2) */ + u_int8_t rrep_flags; /* various flags */ + u_int8_t rrep_ps; /* prefix size */ + u_int8_t rrep_hops; /* number of hops from o to d */ + u_int32_t rrep_da; /* destination IPv4 address */ + u_int32_t rrep_ds; /* destination sequence number */ + u_int32_t rrep_oa; /* originator IPv4 address */ + u_int32_t rrep_life; /* lifetime of this route */ }; #ifdef INET6 struct aodv_rrep6 { - u_char rrep_type; /* AODV message type (2) */ - u_char rrep_flags; /* various flags */ - u_char rrep_ps; /* prefix size */ - u_char rrep_hops; /* number of hops from o to d */ + u_int8_t rrep_type; /* AODV message type (2) */ + u_int8_t rrep_flags; /* various flags */ + u_int8_t rrep_ps; /* prefix size */ + u_int8_t rrep_hops; /* number of hops from o to d */ struct in6_addr rrep_da; /* destination IPv6 address */ - u_long rrep_ds; /* destination sequence number */ + u_int32_t rrep_ds; /* destination sequence number */ struct in6_addr rrep_oa; /* originator IPv6 address */ - u_long rrep_life; /* lifetime of this route */ + u_int32_t rrep_life; /* lifetime of this route */ }; #endif @@ -94,21 +94,21 @@ struct aodv_rrep6 { #define RREP_PREFIX_MASK 0x1F /* mask for prefix size */ struct rerr_unreach { - u_long u_da; /* IPv4 address */ - u_long u_ds; /* sequence number */ + u_int32_t u_da; /* IPv4 address */ + u_int32_t u_ds; /* sequence number */ }; #ifdef INET6 struct rerr_unreach6 { struct in6_addr u_da; /* IPv6 address */ - u_long u_ds; /* sequence number */ + u_int32_t u_ds; /* sequence number */ }; #endif struct aodv_rerr { - u_char rerr_type; /* AODV message type (3) */ - u_char rerr_flags; /* various flags */ - u_char rerr_zero0; /* reserved, set to zero */ - u_char rerr_dc; /* destination count */ + u_int8_t rerr_type; /* AODV message type (3) */ + u_int8_t rerr_flags; /* various flags */ + u_int8_t rerr_zero0; /* reserved, set to zero */ + u_int8_t rerr_dc; /* destination count */ union { struct rerr_unreach dest[1]; #ifdef INET6 @@ -121,8 +121,8 @@ struct aodv_rerr { #define RERR_FLAGS_MASK 0x80 /* mask for rerr_flags */ struct aodv_rrep_ack { - u_char ra_type; - u_char ra_zero0; + u_int8_t ra_type; + u_int8_t ra_zero0; }; union aodv { @@ -141,14 +141,19 @@ union aodv { #define AODV_RERR 3 /* error report */ #define AODV_RREP_ACK 4 /* route response acknowledgement */ +#define AODV_V6_RREQ 16 /* IPv6 route request */ +#define AODV_V6_RREP 17 /* IPv6 route response */ +#define AODV_V6_RERR 18 /* IPv6 error report */ +#define AODV_V6_RREP_ACK 19 /* IPV6 route response acknowledgment */ + struct aodv_ext { - u_char type; /* extension type */ - u_char length; /* extension length */ + u_int8_t type; /* extension type */ + u_int8_t length; /* extension length */ }; struct aodv_hello { struct aodv_ext eh; /* extension header */ - u_long interval; /* expect my next hello in + u_int32_t interval; /* expect my next hello in * (n) ms */ }; diff --git a/interface.h b/interface.h index 33930b67..85bdb9a7 100644 --- a/interface.h +++ b/interface.h @@ -18,7 +18,7 @@ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * @(#) $Header: /tcpdump/master/tcpdump/interface.h,v 1.214 2003-08-06 06:49:40 guy Exp $ (LBL) + * @(#) $Header: /tcpdump/master/tcpdump/interface.h,v 1.215 2003-09-12 22:05:56 guy Exp $ (LBL) */ #ifndef tcpdump_interface_h @@ -204,7 +204,7 @@ extern int llc_print(const u_char *, u_int, u_int, const u_char *, extern int snap_print(const u_char *, u_int, u_int, u_short *, u_int32_t, u_short, u_int); extern void aarp_print(const u_char *, u_int); -extern void aodv_print(const u_char *, u_int, void *); +extern void aodv_print(const u_char *, u_int, int); extern void arp_print(const u_char *, u_int, u_int); extern void atalk_print(const u_char *, u_int); extern void atm_print(u_int, u_int, u_int, const u_char *, u_int, u_int); diff --git a/print-aodv.c b/print-aodv.c index 92d21859..92a96458 100644 --- a/print-aodv.c +++ b/print-aodv.c @@ -32,7 +32,7 @@ #ifndef lint static const char rcsid[] = - "@(#) $Header: /tcpdump/master/tcpdump/print-aodv.c,v 1.4 2003-09-06 22:16:56 guy Exp $ (LBL)"; + "@(#) $Header: /tcpdump/master/tcpdump/print-aodv.c,v 1.5 2003-09-12 22:05:57 guy Exp $ (LBL)"; #endif #ifdef HAVE_CONFIG_H @@ -53,10 +53,10 @@ static const char rcsid[] = #include "aodv.h" static void -aodv_extension(struct aodv_ext *ep, u_int length) +aodv_extension(const struct aodv_ext *ep, u_int length) { u_int i; - struct aodv_hello *ah; + const struct aodv_hello *ah; switch (ep->type) { case AODV_EXT_HELLO: @@ -64,15 +64,14 @@ aodv_extension(struct aodv_ext *ep, u_int length) printf(" [|hello]"); return; } - i = min(length, (u_int)(snapend - (u_char *) ep)); + i = min(length, (u_int)(snapend - (u_char *)ep)); if (i < sizeof(struct aodv_hello)) { printf(" [|hello]"); return; } i -= sizeof(struct aodv_hello); - ah = (void *) ep; - printf("\n\text HELLO %d ms", - EXTRACT_32BITS(ah->interval)); + ah = (void *)ep; + printf("\n\text HELLO %d ms", EXTRACT_32BITS(&ah->interval)); break; default: @@ -82,11 +81,7 @@ aodv_extension(struct aodv_ext *ep, u_int length) } static void -aodv_rreq(union aodv *ap, const u_char *dat, u_int length, void *ip6 -#ifndef INET6 - _U_ -#endif - ) +aodv_rreq(const union aodv *ap, const u_char *dat, u_int length) { u_int i; @@ -100,54 +95,25 @@ aodv_rreq(union aodv *ap, const u_char *dat, u_int length, void *ip6 return; } i -= sizeof(ap->rreq); -#ifdef INET6 - if (ip6 != NULL) { - printf(" rreq %d %s%s%s%s%shops %d id 0x%08lx\n" - "\tdst %s seq %ld src %s seq %ld", length, - ap->rreq6.rreq_type & RREQ_JOIN ? "[J]" : "", - ap->rreq6.rreq_type & RREQ_REPAIR ? "[R]" : "", - ap->rreq6.rreq_type & RREQ_GRAT ? "[G]" : "", - ap->rreq6.rreq_type & RREQ_DEST ? "[D]" : "", - ap->rreq6.rreq_type & RREQ_UNKNOWN ? "[U] " : " ", - ap->rreq6.rreq_hops, - (unsigned long)EXTRACT_32BITS(ap->rreq6.rreq_id), - ip6addr_string(&ap->rreq6.rreq_da), - (unsigned long)EXTRACT_32BITS(ap->rreq6.rreq_ds), - ip6addr_string(&ap->rreq6.rreq_oa), - (unsigned long)EXTRACT_32BITS(ap->rreq6.rreq_os)); - if (i >= sizeof(ap->rreq6) + sizeof(struct aodv_ext)) { - aodv_extension((void *) (&ap->rreq6 + 1), - length - sizeof(ap->rreq6)); - } - } else -#endif - { - printf(" rreq %d %s%s%s%s%shops %d id 0x%08x\n" - "\tdst %s seq %d src %s seq %d", length, - ap->rreq.rreq_type & RREQ_JOIN ? "[J]" : "", - ap->rreq.rreq_type & RREQ_REPAIR ? "[R]" : "", - ap->rreq.rreq_type & RREQ_GRAT ? "[G]" : "", - ap->rreq.rreq_type & RREQ_DEST ? "[D]" : "", - ap->rreq.rreq_type & RREQ_UNKNOWN ? "[U] " : " ", - ap->rreq.rreq_hops, - EXTRACT_32BITS(ap->rreq.rreq_id), - ipaddr_string(ap->rreq.rreq_da), - EXTRACT_32BITS(ap->rreq.rreq_ds), - ipaddr_string(ap->rreq.rreq_oa), - EXTRACT_32BITS(ap->rreq.rreq_os)); - if (i >= sizeof(ap->rreq) + sizeof(struct aodv_ext)) { - aodv_extension((void *) (&ap->rreq + 1), - length - sizeof(ap->rreq)); - } - } + printf(" rreq %d %s%s%s%s%shops %d id 0x%08x\n" + "\tdst %s seq %d src %s seq %d", length, + ap->rreq.rreq_type & RREQ_JOIN ? "[J]" : "", + ap->rreq.rreq_type & RREQ_REPAIR ? "[R]" : "", + ap->rreq.rreq_type & RREQ_GRAT ? "[G]" : "", + ap->rreq.rreq_type & RREQ_DEST ? "[D]" : "", + ap->rreq.rreq_type & RREQ_UNKNOWN ? "[U] " : " ", + ap->rreq.rreq_hops, + EXTRACT_32BITS(&ap->rreq.rreq_id), + ipaddr_string(&ap->rreq.rreq_da), + EXTRACT_32BITS(&ap->rreq.rreq_ds), + ipaddr_string(&ap->rreq.rreq_oa), + EXTRACT_32BITS(&ap->rreq.rreq_os)); + if (i >= sizeof(struct aodv_ext)) + aodv_extension((void *)(&ap->rreq + 1), i); } static void -aodv_rrep(union aodv *ap, const u_char *dat, u_int length, void *ip6 -#ifndef INET6 - _U_ -#endif - ) +aodv_rrep(const union aodv *ap, const u_char *dat, u_int length) { u_int i; @@ -161,93 +127,153 @@ aodv_rrep(union aodv *ap, const u_char *dat, u_int length, void *ip6 return; } i -= sizeof(ap->rrep); + printf(" rrep %d %s%sprefix %d hops %d\n" + "\tdst %s dseq %d src %s %d ms", length, + ap->rrep.rrep_type & RREP_REPAIR ? "[R]" : "", + ap->rrep.rrep_type & RREP_ACK ? "[A] " : " ", + ap->rrep.rrep_ps & RREP_PREFIX_MASK, + ap->rrep.rrep_hops, + ipaddr_string(&ap->rrep.rrep_da), + EXTRACT_32BITS(&ap->rrep.rrep_ds), + ipaddr_string(&ap->rrep.rrep_oa), + EXTRACT_32BITS(&ap->rrep.rrep_life)); + if (i >= sizeof(struct aodv_ext)) + aodv_extension((void *)(&ap->rrep + 1), i); +} + +static void +aodv_rerr(const union aodv *ap, u_int length) +{ + const struct rerr_unreach *dp = NULL; + int i, j, n, trunc; + + i = length - offsetof(struct aodv_rerr, r); + j = sizeof(ap->rerr.r.dest[0]); + dp = &ap->rerr.r.dest[0]; + n = ap->rerr.rerr_dc * j; + printf(" rerr %s [items %d] [%d]:", + ap->rerr.rerr_flags & RERR_NODELETE ? "[D]" : "", + ap->rerr.rerr_dc, length); + trunc = n - (i/j); + for (; i -= j >= 0; ++dp) { + printf(" {%s}(%d)", ipaddr_string(&dp->u_da), + EXTRACT_32BITS(&dp->u_ds)); + } + if (trunc) + printf("[|rerr]"); +} + +static void #ifdef INET6 - if (ip6 != NULL) { - printf(" rrep %d %s%sprefix %d hops %d\n" - "\tdst %s dseq %d src %s %d ms", length, - ap->rrep6.rrep_type & RREP_REPAIR ? "[R]" : "", - ap->rrep6.rrep_type & RREP_ACK ? "[A] " : " ", - ap->rrep6.rrep_ps & RREP_PREFIX_MASK, - ap->rrep6.rrep_hops, - ip6addr_string(&ap->rrep6.rrep_da), - EXTRACT_32BITS(ap->rrep6.rrep_ds), - ip6addr_string(&ap->rrep6.rrep_oa), - EXTRACT_32BITS(ap->rrep6.rrep_life)); - if (i >= sizeof(ap->rrep6) + sizeof(struct aodv_ext)) { - aodv_extension((void *) (&ap->rrep6 + 1), - length - sizeof(ap->rrep6)); - } - } else +aodv_v6_rreq(const union aodv *ap, const u_char *dat, u_int length) +#else +aodv_v6_rreq(const union aodv *ap _U_, const u_char *dat _U_, u_int length) #endif - { - printf(" rrep %d %s%sprefix %d hops %d\n" - "\tdst %s dseq %d src %s %d ms", length, - ap->rrep.rrep_type & RREP_REPAIR ? "[R]" : "", - ap->rrep.rrep_type & RREP_ACK ? "[A] " : " ", - ap->rrep.rrep_ps & RREP_PREFIX_MASK, - ap->rrep.rrep_hops, - ipaddr_string(ap->rrep.rrep_da), - EXTRACT_32BITS(ap->rrep.rrep_ds), - ipaddr_string(ap->rrep.rrep_oa), - EXTRACT_32BITS(ap->rrep.rrep_life)); - if (i >= sizeof(ap->rrep) + sizeof(struct aodv_ext)) { - aodv_extension((void *) (&ap->rrep + 1), - length - sizeof(ap->rrep)); - } +{ +#ifdef INET6 + u_int i; + + if (snapend < dat) { + printf(" [|aodv]"); + return; } + i = min(length, (u_int)(snapend - dat)); + if (i < sizeof(ap->rreq6)) { + printf(" [|rreq6]"); + return; + } + i -= sizeof(ap->rreq6); + printf(" v6 rreq %d %s%s%s%s%shops %d id 0x%08x\n" + "\tdst %s seq %d src %s seq %d", length, + ap->rreq6.rreq_type & RREQ_JOIN ? "[J]" : "", + ap->rreq6.rreq_type & RREQ_REPAIR ? "[R]" : "", + ap->rreq6.rreq_type & RREQ_GRAT ? "[G]" : "", + ap->rreq6.rreq_type & RREQ_DEST ? "[D]" : "", + ap->rreq6.rreq_type & RREQ_UNKNOWN ? "[U] " : " ", + ap->rreq6.rreq_hops, + EXTRACT_32BITS(&ap->rreq6.rreq_id), + ip6addr_string(&ap->rreq6.rreq_da), + EXTRACT_32BITS(&ap->rreq6.rreq_ds), + ip6addr_string(&ap->rreq6.rreq_oa), + EXTRACT_32BITS(&ap->rreq6.rreq_os)); + if (i >= sizeof(struct aodv_ext)) + aodv_extension((void *)(&ap->rreq6 + 1), i); +#else + printf(" v6 rreq %d", length); +#endif } static void -aodv_rerr(union aodv *ap, u_int length, void *ip6 -#ifndef INET6 - _U_ +#ifdef INET6 +aodv_v6_rrep(const union aodv *ap, const u_char *dat, u_int length) +#else +aodv_v6_rrep(const union aodv *ap _U_, const u_char *dat _U_, u_int length) #endif - ) { - int i, j, n, trunc; - struct rerr_unreach *dp = NULL; #ifdef INET6 - struct rerr_unreach6 *dp6 = NULL; + u_int i; + + if (snapend < dat) { + printf(" [|aodv]"); + return; + } + i = min(length, (u_int)(snapend - dat)); + if (i < sizeof(ap->rrep6)) { + printf(" [|rrep6]"); + return; + } + i -= sizeof(ap->rrep6); + printf(" rrep %d %s%sprefix %d hops %d\n" + "\tdst %s dseq %d src %s %d ms", length, + ap->rrep6.rrep_type & RREP_REPAIR ? "[R]" : "", + ap->rrep6.rrep_type & RREP_ACK ? "[A] " : " ", + ap->rrep6.rrep_ps & RREP_PREFIX_MASK, + ap->rrep6.rrep_hops, + ip6addr_string(&ap->rrep6.rrep_da), + EXTRACT_32BITS(&ap->rrep6.rrep_ds), + ip6addr_string(&ap->rrep6.rrep_oa), + EXTRACT_32BITS(&ap->rrep6.rrep_life)); + if (i >= sizeof(struct aodv_ext)) + aodv_extension((void *)(&ap->rrep6 + 1), i); +#else + printf(" v6 rrep %d", length); #endif +} - i = length - offsetof(struct aodv_rerr, r); +static void #ifdef INET6 - if (ip6 != NULL) { - j = sizeof(ap->rerr.r.dest6[0]); - dp6 = &ap->rerr.r.dest6[0]; - } else +aodv_v6_rerr(const union aodv *ap, u_int length) +#else +aodv_v6_rerr(const union aodv *ap _U_, u_int length) #endif - { - j = sizeof(ap->rerr.r.dest[0]); - dp = &ap->rerr.r.dest[0]; - } +{ +#ifdef INET6 + const struct rerr_unreach6 *dp6 = NULL; + int i, j, n, trunc; + + i = length - offsetof(struct aodv_rerr, r); + j = sizeof(ap->rerr.r.dest6[0]); + dp6 = &ap->rerr.r.dest6[0]; n = ap->rerr.rerr_dc * j; printf(" rerr %s [items %d] [%d]:", - ap->rerr.rerr_flags & RERR_NODELETE ? "[D]" : "", - ap->rerr.rerr_dc, length); + ap->rerr.rerr_flags & RERR_NODELETE ? "[D]" : "", + ap->rerr.rerr_dc, length); trunc = n - (i/j); -#ifdef INET6 - if (ip6 != NULL) { - for (; i -= j >= 0; ++dp6) { - printf(" {%s}(%d)", ip6addr_string(&dp6->u_da), - EXTRACT_32BITS(dp6->u_ds)); - } - } else -#endif - { - for (; i -= j >= 0; ++dp) { - printf(" {%s}(%d)", ipaddr_string(dp->u_da), - EXTRACT_32BITS(dp->u_ds)); - } + for (; i -= j >= 0; ++dp6) { + printf(" {%s}(%d)", ip6addr_string(&dp6->u_da), + EXTRACT_32BITS(&dp6->u_ds)); } if (trunc) printf("[|rerr]"); +#else + printf(" v6 rerr %d", length); +#endif } void -aodv_print(const u_char *dat, u_int length, void *ip6) +aodv_print(const u_char *dat, u_int length, int is_ip6) { - union aodv *ap; + const union aodv *ap; ap = (union aodv *)dat; if (snapend < dat) { @@ -261,17 +287,46 @@ aodv_print(const u_char *dat, u_int length, void *ip6) printf(" aodv"); switch (ap->rerr.rerr_type) { + case AODV_RREQ: - aodv_rreq(ap, dat, length, ip6); + if (is_ip6) + aodv_v6_rreq(ap, dat, length); + else + aodv_rreq(ap, dat, length); break; + case AODV_RREP: - aodv_rrep(ap, dat, length, ip6); + if (is_ip6) + aodv_v6_rrep(ap, dat, length); + else + aodv_rrep(ap, dat, length); break; + case AODV_RERR: - aodv_rerr(ap, length, ip6); + if (is_ip6) + aodv_v6_rerr(ap, length); + else + aodv_rerr(ap, length); break; + case AODV_RREP_ACK: - printf(" rrep-ack %d", ap->rrep_ack.ra_type); + printf(" rrep-ack %d", length); + break; + + case AODV_V6_RREQ: + aodv_v6_rreq(ap, dat, length); + break; + + case AODV_V6_RREP: + aodv_v6_rrep(ap, dat, length); + break; + + case AODV_V6_RERR: + aodv_v6_rerr(ap, length); + break; + + case AODV_V6_RREP_ACK: + printf(" v6 rrep-ack %d", length); break; default: diff --git a/print-udp.c b/print-udp.c index 46f66e9e..e289be61 100644 --- a/print-udp.c +++ b/print-udp.c @@ -21,7 +21,7 @@ #ifndef lint static const char rcsid[] = - "@(#) $Header: /tcpdump/master/tcpdump/print-udp.c,v 1.120 2003-08-06 06:49:40 guy Exp $ (LBL)"; + "@(#) $Header: /tcpdump/master/tcpdump/print-udp.c,v 1.121 2003-09-12 22:05:57 guy Exp $ (LBL)"; #endif #ifdef HAVE_CONFIG_H @@ -562,15 +562,12 @@ udp_print(register const u_char *bp, u_int length, break; case PT_AODV: - (void)printf("%s.%s > %s.%s: ", - ipaddr_string(&ip->ip_src), - udpport_string(sport), - ipaddr_string(&ip->ip_dst), - udpport_string(dport)); + udpipaddr_print(ip, sport, dport); + aodv_print((const u_char *)(up + 1), length, #ifdef INET6 - aodv_print((void *)(up + 1), length, (void *) ip6); + ip6 != NULL); #else - aodv_print((void *)(up + 1), length, NULL); + FALSE); #endif break; } @@ -651,10 +648,11 @@ udp_print(register const u_char *bp, u_int length, else if (ISPORT(RIP_PORT)) rip_print((const u_char *)(up + 1), length); else if (ISPORT(AODV_PORT)) + aodv_print((const u_char *)(up + 1), length, #ifdef INET6 - aodv_print((const u_char *)(up + 1), length, (void *) ip6); + ip6 != NULL); #else - aodv_print((const u_char *)(up + 1), length, NULL); + FALSE); #endif else if (ISPORT(ISAKMP_PORT)) isakmp_print((const u_char *)(up + 1), length, bp2);