#endif
#ifndef lint
-static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/tcpdump/print-ip6opts.c,v 1.12 2002-08-01 08:53:11 risso Exp $";
+static const char rcsid[] _U_ =
+ "@(#) $Header: /tcpdump/master/tcpdump/print-ip6opts.c,v 1.18 2005-04-20 22:18:50 guy Exp $";
#endif
#ifdef INET6
#include "interface.h"
#include "addrtoname.h"
+#include "extract.h"
/* items outside of rfc2292bis */
#ifndef IP6OPT_MINLEN
printf(", ui: trunc");
goto trunc;
}
- printf(", ui: 0x%04x ", ntohs(*(u_int16_t *)&bp[i + 2]));
+ printf(", ui: 0x%04x ", EXTRACT_16BITS(&bp[i + 2]));
break;
case IP6SOPT_ALTCOA:
if (len - i < IP6SOPT_ALTCOA_MINLEN) {
printf(", auth: trunc");
goto trunc;
}
- printf(", auth spi: 0x%08x",
- (u_int32_t)ntohl(*(u_int32_t *)&bp[i + 2]));
+ printf(", auth spi: 0x%08x", EXTRACT_32BITS(&bp[i + 2]));
break;
default:
if (len - i < IP6OPT_MINLEN) {
ip6_opt_print(const u_char *bp, int len)
{
int i;
- int optlen;
+ int optlen = 0;
for (i = 0; i < len; i += optlen) {
if (bp[i] == IP6OPT_PAD1)
printf("(rtalert: invalid len %d)", bp[i + 1]);
goto trunc;
}
- printf("(rtalert: 0x%04x) ", ntohs(*(u_int16_t *)&bp[i + 2]));
+ printf("(rtalert: 0x%04x) ", EXTRACT_16BITS(&bp[i + 2]));
break;
case IP6OPT_JUMBO:
if (len - i < IP6OPT_JUMBO_LEN) {
printf("(jumbo: invalid len %d)", bp[i + 1]);
goto trunc;
}
- printf("(jumbo: %u) ", (u_int32_t)ntohl(*(u_int32_t *)&bp[i + 2]));
+ printf("(jumbo: %u) ", EXTRACT_32BITS(&bp[i + 2]));
break;
case IP6OPT_HOME_ADDRESS:
if (len - i < IP6OPT_HOMEADDR_MINLEN) {
if ((bp[i + 2] & 0x0f) || bp[i + 3] || bp[i + 4])
printf("res");
printf(", sequence: %u", bp[i + 5]);
- printf(", lifetime: %u",
- (u_int32_t)ntohl(*(u_int32_t *)&bp[i + 6]));
+ printf(", lifetime: %u", EXTRACT_32BITS(&bp[i + 6]));
if (bp[i + 1] > IP6OPT_BU_MINLEN - 2) {
ip6_sopt_print(&bp[i + IP6OPT_BU_MINLEN],
if (bp[i + 3])
printf("res");
printf(", sequence: %u", bp[i + 4]);
- printf(", lifetime: %u",
- (u_int32_t)ntohl(*(u_int32_t *)&bp[i + 5]));
- printf(", refresh: %u",
- (u_int32_t)ntohl(*(u_int32_t *)&bp[i + 9]));
+ printf(", lifetime: %u", EXTRACT_32BITS(&bp[i + 5]));
+ printf(", refresh: %u", EXTRACT_32BITS(&bp[i + 9]));
if (bp[i + 1] > IP6OPT_BA_MINLEN - 2) {
ip6_sopt_print(&bp[i + IP6OPT_BA_MINLEN],
hbhopt_print(register const u_char *bp)
{
const struct ip6_hbh *dp = (struct ip6_hbh *)bp;
- register const u_char *ep;
int hbhlen = 0;
- /* 'ep' points to the end of available data. */
- ep = snapend;
TCHECK(dp->ip6h_len);
hbhlen = (int)((dp->ip6h_len + 1) << 3);
TCHECK2(*dp, hbhlen);
trunc:
fputs("[|HBH]", stdout);
- return(hbhlen);
+ return(-1);
}
int
dstopt_print(register const u_char *bp)
{
const struct ip6_dest *dp = (struct ip6_dest *)bp;
- register const u_char *ep;
int dstoptlen = 0;
- /* 'ep' points to the end of available data. */
- ep = snapend;
TCHECK(dp->ip6d_len);
dstoptlen = (int)((dp->ip6d_len + 1) << 3);
TCHECK2(*dp, dstoptlen);
trunc:
fputs("[|DSTOPT]", stdout);
- return(dstoptlen);
+ return(-1);
}
#endif /* INET6 */