+ 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;
+