printer.
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * @(#) $Header: /tcpdump/master/tcpdump/netdissect.h,v 1.15 2005-04-06 21:33:27 mcr Exp $ (LBL)
+ * @(#) $Header: /tcpdump/master/tcpdump/netdissect.h,v 1.16 2005-04-07 00:28:17 mcr Exp $ (LBL)
*/
#ifndef netdissect_h
extern void isakmp_rfc3948_print(netdissect_options *,const u_char *,
u_int, const u_char *);
extern void ip_print(netdissect_options *,const u_char *, u_int);
+extern void ip_print_inner(netdissect_options *ndo,
+ const u_char *bp, u_int length, u_int nh,
+ const u_char *bp2);
+/* stuff that has not yet been rototiled */
#if 0
extern void ascii_print_with_offset(netdissect_options *, const char *,
u_int, u_int);
#ifndef lint
static const char rcsid[] _U_ =
- "@(#) $Header: /tcpdump/master/tcpdump/print-ip.c,v 1.148 2005-04-06 21:33:02 mcr Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-ip.c,v 1.149 2005-04-07 00:28:17 mcr Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
struct ip_print_demux_state {
const struct ip *ip;
const u_char *cp;
- u_int hlen, len, off;
+ u_int len, off;
u_char nh;
int advance;
};
}
}
+void
+ip_print_inner(netdissect_options *ndo,
+ const u_char *bp,
+ u_int length, u_int nh,
+ const u_char *bp2)
+{
+ struct ip_print_demux_state ipd;
+
+ ipd.ip = (const struct ip *)bp2;
+ ipd.cp = bp;
+ ipd.len = length;
+ ipd.off = 0;
+ ipd.nh = nh;
+ ipd.advance = 0;
+
+ ip_print_demux(ndo, &ipd);
+}
+
/*
* print an IP datagram.
struct ip_print_demux_state ipd;
struct ip_print_demux_state *ipds=&ipd;
const u_char *ipend;
+ u_int hlen;
u_int16_t sum, ip_sum;
struct protoent *proto;
(void)printf("truncated-ip %u", length);
return;
}
- ipds->hlen = IP_HL(ipds->ip) * 4;
- if (ipds->hlen < sizeof (struct ip)) {
- (void)printf("bad-hlen %u", ipds->hlen);
+ hlen = IP_HL(ipds->ip) * 4;
+ if (hlen < sizeof (struct ip)) {
+ (void)printf("bad-hlen %u", hlen);
return;
}
if (length < ipds->len)
(void)printf("truncated-ip - %u bytes missing! ",
ipds->len - length);
- if (ipds->len < ipds->hlen) {
+ if (ipds->len < hlen) {
#ifdef GUESS_TSO
if (ipds->len) {
(void)printf("bad-len %u", ipds->len);
if (ipend < snapend)
snapend = ipend;
- ipds->len -= ipds->hlen;
+ ipds->len -= hlen;
ipds->off = EXTRACT_16BITS(&ipds->ip->ip_off);
(void)printf(", length: %u", EXTRACT_16BITS(&ipds->ip->ip_len));
- if ((ipds->hlen - sizeof(struct ip)) > 0) {
+ if ((hlen - sizeof(struct ip)) > 0) {
printf(", options ( ");
- ip_optprint((u_char *)(ipds->ip + 1), ipds->hlen - sizeof(struct ip));
+ ip_optprint((u_char *)(ipds->ip + 1), hlen - sizeof(struct ip));
printf(" )");
}
- if ((u_char *)ipds->ip + ipds->hlen <= snapend) {
- sum = in_cksum((const u_short *)ipds->ip, ipds->hlen, 0);
+ if ((u_char *)ipds->ip + hlen <= snapend) {
+ sum = in_cksum((const u_short *)ipds->ip, hlen, 0);
if (sum != 0) {
ip_sum = EXTRACT_16BITS(&ipds->ip->ip_sum);
(void)printf(", bad cksum %x (->%x)!", ip_sum,
* level protocol.
*/
if ((ipds->off & 0x1fff) == 0) {
- ipds->cp = (const u_char *)ipds->ip + ipds->hlen;
+ ipds->cp = (const u_char *)ipds->ip + hlen;
ipds->nh = ipds->ip->ip_p;
if (ipds->nh != IPPROTO_TCP && ipds->nh != IPPROTO_UDP &&
}
}
+/*
+ * Local Variables:
+ * c-style: whitesmith
+ * c-basic-offset: 8
+ * End:
+ */
#ifndef lint
static const char rcsid[] _U_ =
- "@(#) $Header: /tcpdump/master/tcpdump/print-isakmp.c,v 1.50 2005-04-06 21:33:27 mcr Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-isakmp.c,v 1.51 2005-04-07 00:28:17 mcr Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
return;
}
- ND_TCHECK2(bp, 4);
+ if(length < 4) {
+ goto trunc;
+ }
/*
* see if this is an IKE packet
*/
if(bp[0]==0 && bp[1]==0 && bp[2]==0 && bp[3]==0) {
+ ND_PRINT((ndo, "NONESP-encap: "));
isakmp_print(ndo, bp+4, length-4, bp2);
return;
}
int nh, enh, padlen;
int advance;
+ ND_PRINT((ndo, "UDP-encap: "));
+
advance = esp_print(ndo, bp, length, bp2, &enh, &padlen);
if(advance <= 0)
return;
length -= advance + padlen;
nh = enh & 0xff;
- /* now need to jump into ip_print(). */
+ ip_print_inner(ndo, bp, length, nh, bp2);
return;
}
return;
}
+/*
+ * Local Variables:
+ * c-style: whitesmith
+ * c-basic-offset: 8
+ * End:
+ */
+
+
#ifndef lint
static const char rcsid[] _U_ =
- "@(#) $Header: /tcpdump/master/tcpdump/print-udp.c,v 1.137 2005-04-06 21:33:28 mcr Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-udp.c,v 1.138 2005-04-07 00:28:17 mcr Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
#else
0);
#endif
- else if (ISPORT(ISAKMP_PORT) || ISPORT(ISAKMP_PORT_NATT))
+ else if (ISPORT(ISAKMP_PORT))
isakmp_print(gndo, (const u_char *)(up + 1), length, bp2);
+ else if (ISPORT(ISAKMP_PORT_NATT))
+ isakmp_rfc3948_print(gndo, (const u_char *)(up + 1), length, bp2);
#if 1 /*???*/
else if (ISPORT(ISAKMP_PORT_USER1) || ISPORT(ISAKMP_PORT_USER2))
isakmp_print(gndo, (const u_char *)(up + 1), length, bp2);