]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-mptcp.c
Makefile.in: 'distclean' target: add files and directories to remove
[tcpdump] / print-mptcp.c
index 5ead415a75e839de9909038a49eca0e04c952cda..a604e56311eac62394f11f9151dd3c80d42ed3a7 100644 (file)
 #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;