X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/d8b3af528a3af5d3715f0d05c3583420acfb8a22..6c78ecd7a8b996bc81cc28d412ed9afa55f0b84c:/print-mptcp.c diff --git a/print-mptcp.c b/print-mptcp.c index 5ead415a..a604e563 100644 --- a/print-mptcp.c +++ b/print-mptcp.c @@ -46,9 +46,125 @@ #include "addrtoname.h" #include "ipproto.h" -#include "mptcp.h" #include "tcp.h" +#define MPTCP_SUB_CAPABLE 0x0 +#define MPTCP_SUB_JOIN 0x1 +#define MPTCP_SUB_DSS 0x2 +#define MPTCP_SUB_ADD_ADDR 0x3 +#define MPTCP_SUB_REMOVE_ADDR 0x4 +#define MPTCP_SUB_PRIO 0x5 +#define MPTCP_SUB_FAIL 0x6 +#define MPTCP_SUB_FCLOSE 0x7 + +struct mptcp_option { + u_int8_t kind; + u_int8_t len; + u_int8_t sub_etc; /* subtype upper 4 bits, other stuff lower 4 bits */ +}; + +#define MPTCP_OPT_SUBTYPE(sub_etc) (((sub_etc) >> 4) & 0xF) + +struct mp_capable { + u_int8_t kind; + u_int8_t len; + u_int8_t sub_ver; + u_int8_t flags; + u_int8_t sender_key[8]; + u_int8_t receiver_key[8]; +}; + +#define MP_CAPABLE_OPT_VERSION(sub_ver) (((sub_ver) >> 0) & 0xF) +#define MP_CAPABLE_C 0x80 +#define MP_CAPABLE_S 0x01 + +struct mp_join { + u_int8_t kind; + u_int8_t len; + u_int8_t sub_b; + u_int8_t addr_id; + union { + struct { + u_int8_t token[4]; + u_int8_t nonce[4]; + } syn; + struct { + u_int8_t mac[8]; + u_int8_t nonce[4]; + } synack; + struct { + u_int8_t mac[20]; + } ack; + } u; +}; + +#define MP_JOIN_B 0x01 + +struct mp_dss { + u_int8_t kind; + u_int8_t len; + u_int8_t sub; + u_int8_t flags; +}; + +#define MP_DSS_F 0x10 +#define MP_DSS_m 0x08 +#define MP_DSS_M 0x04 +#define MP_DSS_a 0x02 +#define MP_DSS_A 0x01 + +struct mp_add_addr { + u_int8_t kind; + u_int8_t len; + u_int8_t sub_ipver; + u_int8_t addr_id; + union { + struct { + u_int8_t addr[4]; + u_int8_t port[2]; + } v4; + struct { + u_int8_t addr[16]; + u_int8_t port[2]; + } v6; + } u; +}; + +#define MP_ADD_ADDR_IPVER(sub_ipver) (((sub_ipver) >> 0) & 0xF) + +struct mp_remove_addr { + u_int8_t kind; + u_int8_t len; + u_int8_t sub; + /* list of addr_id */ + u_int8_t addrs_id; +}; + +struct mp_fail { + u_int8_t kind; + u_int8_t len; + u_int8_t sub; + u_int8_t resv; + u_int8_t data_seq[8]; +}; + +struct mp_close { + u_int8_t kind; + u_int8_t len; + u_int8_t sub; + u_int8_t rsv; + u_int8_t key[8]; +}; + +struct mp_prio { + u_int8_t kind; + u_int8_t len; + u_int8_t sub_b; + u_int8_t addr_id; +}; + +#define MP_PRIO_B 0x01 + static int dummy_print(const u_char *opt _U_, u_int opt_len _U_, u_char flags _U_) { return 1;