__RCSID("$NetBSD: print-tcp.c,v 1.8 2007/07/24 11:53:48 drochner Exp $");
#endif
-#define NETDISSECT_REWORKED
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#endif
static void print_tcp_rst_data(netdissect_options *, register const u_char *sp, u_int length);
+static void print_tcp_fastopen_option(netdissect_options *ndo, register const u_char *cp,
+ u_int datalen, int exp);
#define MAX_RST_DATA_LEN 30
{ TCPOPT_AUTH, "enhanced auth" },
{ TCPOPT_UTO, "uto" },
{ TCPOPT_MPTCP, "mptcp" },
+ { TCPOPT_FASTOPEN, "tfo" },
{ TCPOPT_EXPERIMENT2, "exp" },
{ 0, NULL }
};
goto bad;
break;
+ case TCPOPT_FASTOPEN:
+ datalen = len - 2;
+ LENCHECK(datalen);
+ print_tcp_fastopen_option(ndo, cp, datalen, FALSE);
+ break;
+
case TCPOPT_EXPERIMENT2:
datalen = len - 2;
LENCHECK(datalen);
switch(magic) {
- case 0xf989:
- /* TCP Fast Open: draft-ietf-tcpm-fastopen-04 */
- if (datalen == 2) {
- /* Fast Open Cookie Request */
- ND_PRINT((ndo, "tfo cookiereq"));
- } else {
- /* Fast Open Cookie */
- if (datalen % 2 != 0 || datalen < 6 || datalen > 18) {
- ND_PRINT((ndo, "tfo malformed"));
- } else {
- ND_PRINT((ndo, "tfo cookie "));
- for (i = 2; i < datalen; ++i)
- ND_PRINT((ndo, "%02x", cp[i]));
- }
- }
+ case 0xf989: /* TCP Fast Open RFC 7413 */
+ print_tcp_fastopen_option(ndo, cp + 2, datalen - 2, TRUE);
break;
default:
}
if (sport == TELNET_PORT || dport == TELNET_PORT) {
- if (!ndo->ndo_qflag && ndo->ndo_vflag)
- telnet_print(ndo, bp, length);
+ telnet_print(ndo, bp, length);
+ } else if (sport == SMTP_PORT || dport == SMTP_PORT) {
+ ND_PRINT((ndo, ": "));
+ smtp_print(ndo, bp, length);
} else if (sport == BGP_PORT || dport == BGP_PORT)
bgp_print(ndo, bp, length);
else if (sport == PPTP_PORT || dport == PPTP_PORT)
else if (sport == OPENFLOW_PORT_OLD || dport == OPENFLOW_PORT_OLD ||
sport == OPENFLOW_PORT_IANA || dport == OPENFLOW_PORT_IANA)
openflow_print(ndo, bp, length);
- else if (length > 2 &&
+ else if (sport == FTP_PORT || dport == FTP_PORT) {
+ ND_PRINT((ndo, ": "));
+ ftp_print(ndo, bp, length);
+ } else if (sport == HTTP_PORT || dport == HTTP_PORT ||
+ sport == HTTP_PORT_ALT || dport == HTTP_PORT_ALT) {
+ ND_PRINT((ndo, ": "));
+ http_print(ndo, bp, length);
+ } else if (sport == RTSP_PORT || dport == RTSP_PORT ||
+ sport == RTSP_PORT_ALT || dport == RTSP_PORT_ALT) {
+ ND_PRINT((ndo, ": "));
+ rtsp_print(ndo, bp, length);
+ } else if (length > 2 &&
(sport == NAMESERVER_PORT || dport == NAMESERVER_PORT ||
sport == MULTICASTDNS_PORT || dport == MULTICASTDNS_PORT)) {
/*
ND_PRINT((ndo, "]"));
}
+static void
+print_tcp_fastopen_option(netdissect_options *ndo, register const u_char *cp,
+ u_int datalen, int exp)
+{
+ u_int i;
+
+ if (exp)
+ ND_PRINT((ndo, "tfo"));
+
+ if (datalen == 0) {
+ /* Fast Open Cookie Request */
+ ND_PRINT((ndo, " cookiereq"));
+ } else {
+ /* Fast Open Cookie */
+ if (datalen % 2 != 0 || datalen < 4 || datalen > 16) {
+ ND_PRINT((ndo, " malformed"));
+ } else {
+ ND_PRINT((ndo, " cookie "));
+ for (i = 0; i < datalen; ++i)
+ ND_PRINT((ndo, "%02x", cp[i]));
+ }
+ }
+}
+
#ifdef HAVE_LIBCRYPTO
USES_APPLE_DEPRECATED_API
static int