static struct tcp_seq_hash tcp_seq_hash[TSEQ_HASHSIZE];
-struct tok tcp_flag_values[] = {
+static const struct tok tcp_flag_values[] = {
{ TH_FIN, "F" },
{ TH_SYN, "S" },
{ TH_RST, "R" },
{ 0, NULL }
};
-struct tok tcp_option_values[] = {
+static const struct tok tcp_option_values[] = {
{ TCPOPT_EOL, "eol" },
{ TCPOPT_NOP, "nop" },
{ TCPOPT_MAXSEG, "mss" },
{ TCPOPT_SIGNATURE, "md5" },
{ TCPOPT_AUTH, "enhanced auth" },
{ TCPOPT_UTO, "uto" },
+ { TCPOPT_MPTCP, "mptcp" },
+ { TCPOPT_EXPERIMENT2, "exp" },
{ 0, NULL }
};
u_int16_t sport, dport, win, urp;
u_int32_t seq, ack, thseq, thack;
u_int utoval;
- int threv;
+ u_int16_t magic;
+ register int rev;
#ifdef INET6
register const struct ip6_hdr *ip6;
#endif
if (!Sflag && (flags & TH_ACK)) {
register struct tcp_seq_hash *th;
const void *src, *dst;
- register int rev;
struct tha tha;
/*
* Find (or record) the initial sequence numbers for
}
#endif
- threv = rev;
for (th = &tcp_seq_hash[tha.port % TSEQ_HASHSIZE];
th->nxt; th = th->nxt)
if (memcmp((char *)&tha, (char *)&th->addr,
thack = th->ack;
} else {
/*fool gcc*/
- thseq = thack = threv = 0;
+ thseq = thack = rev = 0;
}
if (hlen > length) {
(void)printf(" [bad hdr length %u - too long, > %u]",
s = EXTRACT_32BITS(cp + i);
LENCHECK(i + 8);
e = EXTRACT_32BITS(cp + i + 4);
- if (threv) {
+ if (rev) {
s -= thseq;
e -= thseq;
} else {
(void)printf(" %u", utoval);
break;
+ case TCPOPT_MPTCP:
+ datalen = len - 2;
+ LENCHECK(datalen);
+ if (!mptcp_print(cp-2, len, flags))
+ goto bad;
+ break;
+
+ case TCPOPT_EXPERIMENT2:
+ datalen = len - 2;
+ LENCHECK(datalen);
+ if (datalen < 2)
+ goto bad;
+ /* RFC6994 */
+ magic = EXTRACT_16BITS(cp);
+ (void)printf("-");
+
+ switch(magic) {
+
+ case 0xf989:
+ /* TCP Fast Open: draft-ietf-tcpm-fastopen-04 */
+ if (datalen == 2) {
+ /* Fast Open Cookie Request */
+ (void)printf("tfo cookiereq");
+ } else {
+ /* Fast Open Cookie */
+ if (datalen % 2 != 0 || datalen < 6 || datalen > 18) {
+ (void)printf("tfo malformed");
+ } else {
+ (void)printf("tfo cookie ");
+ for (i = 2; i < datalen; ++i)
+ (void)printf("%02x", cp[i]);
+ }
+ }
+ break;
+
+ default:
+ /* Unknown magic number */
+ (void)printf("%04x", magic);
+ break;
+ }
+ break;
+
default:
datalen = len - 2;
for (i = 0; i < datalen; ++i) {
#endif
else if (sport == BEEP_PORT || dport == BEEP_PORT)
beep_print(bp, length);
+ else if (sport == OPENFLOW_PORT || dport == OPENFLOW_PORT)
+ openflow_print(bp, length);
else if (length > 2 &&
(sport == NAMESERVER_PORT || dport == NAMESERVER_PORT ||
sport == MULTICASTDNS_PORT || dport == MULTICASTDNS_PORT)) {
}
#ifdef HAVE_LIBCRYPTO
+USES_APPLE_DEPRECATED_API
static int
tcp_verify_signature(const struct ip *ip, const struct tcphdr *tp,
const u_char *data, int length, const u_char *rcvsig)
else
return (SIGNATURE_INVALID);
}
+USES_APPLE_RST
#endif /* HAVE_LIBCRYPTO */
/*