0001
0002 #ifndef _UAPI_MPTCP_H
0003 #define _UAPI_MPTCP_H
0004
0005 #ifndef __KERNEL__
0006 #include <netinet/in.h> /* for sockaddr_in and sockaddr_in6 */
0007 #include <sys/socket.h> /* for struct sockaddr */
0008 #endif
0009
0010 #include <linux/const.h>
0011 #include <linux/types.h>
0012 #include <linux/in.h> /* for sockaddr_in */
0013 #include <linux/in6.h> /* for sockaddr_in6 */
0014 #include <linux/socket.h> /* for sockaddr_storage and sa_family */
0015
0016 #define MPTCP_SUBFLOW_FLAG_MCAP_REM _BITUL(0)
0017 #define MPTCP_SUBFLOW_FLAG_MCAP_LOC _BITUL(1)
0018 #define MPTCP_SUBFLOW_FLAG_JOIN_REM _BITUL(2)
0019 #define MPTCP_SUBFLOW_FLAG_JOIN_LOC _BITUL(3)
0020 #define MPTCP_SUBFLOW_FLAG_BKUP_REM _BITUL(4)
0021 #define MPTCP_SUBFLOW_FLAG_BKUP_LOC _BITUL(5)
0022 #define MPTCP_SUBFLOW_FLAG_FULLY_ESTABLISHED _BITUL(6)
0023 #define MPTCP_SUBFLOW_FLAG_CONNECTED _BITUL(7)
0024 #define MPTCP_SUBFLOW_FLAG_MAPVALID _BITUL(8)
0025
0026 enum {
0027 MPTCP_SUBFLOW_ATTR_UNSPEC,
0028 MPTCP_SUBFLOW_ATTR_TOKEN_REM,
0029 MPTCP_SUBFLOW_ATTR_TOKEN_LOC,
0030 MPTCP_SUBFLOW_ATTR_RELWRITE_SEQ,
0031 MPTCP_SUBFLOW_ATTR_MAP_SEQ,
0032 MPTCP_SUBFLOW_ATTR_MAP_SFSEQ,
0033 MPTCP_SUBFLOW_ATTR_SSN_OFFSET,
0034 MPTCP_SUBFLOW_ATTR_MAP_DATALEN,
0035 MPTCP_SUBFLOW_ATTR_FLAGS,
0036 MPTCP_SUBFLOW_ATTR_ID_REM,
0037 MPTCP_SUBFLOW_ATTR_ID_LOC,
0038 MPTCP_SUBFLOW_ATTR_PAD,
0039 __MPTCP_SUBFLOW_ATTR_MAX
0040 };
0041
0042 #define MPTCP_SUBFLOW_ATTR_MAX (__MPTCP_SUBFLOW_ATTR_MAX - 1)
0043
0044
0045 #define MPTCP_PM_NAME "mptcp_pm"
0046 #define MPTCP_PM_CMD_GRP_NAME "mptcp_pm_cmds"
0047 #define MPTCP_PM_EV_GRP_NAME "mptcp_pm_events"
0048 #define MPTCP_PM_VER 0x1
0049
0050
0051
0052
0053 enum {
0054 MPTCP_PM_ATTR_UNSPEC,
0055
0056 MPTCP_PM_ATTR_ADDR,
0057 MPTCP_PM_ATTR_RCV_ADD_ADDRS,
0058 MPTCP_PM_ATTR_SUBFLOWS,
0059 MPTCP_PM_ATTR_TOKEN,
0060 MPTCP_PM_ATTR_LOC_ID,
0061 MPTCP_PM_ATTR_ADDR_REMOTE,
0062
0063 __MPTCP_PM_ATTR_MAX
0064 };
0065
0066 #define MPTCP_PM_ATTR_MAX (__MPTCP_PM_ATTR_MAX - 1)
0067
0068 enum {
0069 MPTCP_PM_ADDR_ATTR_UNSPEC,
0070
0071 MPTCP_PM_ADDR_ATTR_FAMILY,
0072 MPTCP_PM_ADDR_ATTR_ID,
0073 MPTCP_PM_ADDR_ATTR_ADDR4,
0074 MPTCP_PM_ADDR_ATTR_ADDR6,
0075 MPTCP_PM_ADDR_ATTR_PORT,
0076 MPTCP_PM_ADDR_ATTR_FLAGS,
0077 MPTCP_PM_ADDR_ATTR_IF_IDX,
0078
0079 __MPTCP_PM_ADDR_ATTR_MAX
0080 };
0081
0082 #define MPTCP_PM_ADDR_ATTR_MAX (__MPTCP_PM_ADDR_ATTR_MAX - 1)
0083
0084 #define MPTCP_PM_ADDR_FLAG_SIGNAL (1 << 0)
0085 #define MPTCP_PM_ADDR_FLAG_SUBFLOW (1 << 1)
0086 #define MPTCP_PM_ADDR_FLAG_BACKUP (1 << 2)
0087 #define MPTCP_PM_ADDR_FLAG_FULLMESH (1 << 3)
0088 #define MPTCP_PM_ADDR_FLAG_IMPLICIT (1 << 4)
0089
0090 enum {
0091 MPTCP_PM_CMD_UNSPEC,
0092
0093 MPTCP_PM_CMD_ADD_ADDR,
0094 MPTCP_PM_CMD_DEL_ADDR,
0095 MPTCP_PM_CMD_GET_ADDR,
0096 MPTCP_PM_CMD_FLUSH_ADDRS,
0097 MPTCP_PM_CMD_SET_LIMITS,
0098 MPTCP_PM_CMD_GET_LIMITS,
0099 MPTCP_PM_CMD_SET_FLAGS,
0100 MPTCP_PM_CMD_ANNOUNCE,
0101 MPTCP_PM_CMD_REMOVE,
0102 MPTCP_PM_CMD_SUBFLOW_CREATE,
0103 MPTCP_PM_CMD_SUBFLOW_DESTROY,
0104
0105 __MPTCP_PM_CMD_AFTER_LAST
0106 };
0107
0108 #define MPTCP_INFO_FLAG_FALLBACK _BITUL(0)
0109 #define MPTCP_INFO_FLAG_REMOTE_KEY_RECEIVED _BITUL(1)
0110
0111 struct mptcp_info {
0112 __u8 mptcpi_subflows;
0113 __u8 mptcpi_add_addr_signal;
0114 __u8 mptcpi_add_addr_accepted;
0115 __u8 mptcpi_subflows_max;
0116 __u8 mptcpi_add_addr_signal_max;
0117 __u8 mptcpi_add_addr_accepted_max;
0118 __u32 mptcpi_flags;
0119 __u32 mptcpi_token;
0120 __u64 mptcpi_write_seq;
0121 __u64 mptcpi_snd_una;
0122 __u64 mptcpi_rcv_nxt;
0123 __u8 mptcpi_local_addr_used;
0124 __u8 mptcpi_local_addr_max;
0125 __u8 mptcpi_csum_enabled;
0126 };
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164 enum mptcp_event_type {
0165 MPTCP_EVENT_UNSPEC = 0,
0166 MPTCP_EVENT_CREATED = 1,
0167 MPTCP_EVENT_ESTABLISHED = 2,
0168 MPTCP_EVENT_CLOSED = 3,
0169
0170 MPTCP_EVENT_ANNOUNCED = 6,
0171 MPTCP_EVENT_REMOVED = 7,
0172
0173 MPTCP_EVENT_SUB_ESTABLISHED = 10,
0174 MPTCP_EVENT_SUB_CLOSED = 11,
0175
0176 MPTCP_EVENT_SUB_PRIORITY = 13,
0177 };
0178
0179 enum mptcp_event_attr {
0180 MPTCP_ATTR_UNSPEC = 0,
0181
0182 MPTCP_ATTR_TOKEN,
0183 MPTCP_ATTR_FAMILY,
0184 MPTCP_ATTR_LOC_ID,
0185 MPTCP_ATTR_REM_ID,
0186 MPTCP_ATTR_SADDR4,
0187 MPTCP_ATTR_SADDR6,
0188 MPTCP_ATTR_DADDR4,
0189 MPTCP_ATTR_DADDR6,
0190 MPTCP_ATTR_SPORT,
0191 MPTCP_ATTR_DPORT,
0192 MPTCP_ATTR_BACKUP,
0193 MPTCP_ATTR_ERROR,
0194 MPTCP_ATTR_FLAGS,
0195 MPTCP_ATTR_TIMEOUT,
0196 MPTCP_ATTR_IF_IDX,
0197 MPTCP_ATTR_RESET_REASON,
0198 MPTCP_ATTR_RESET_FLAGS,
0199 MPTCP_ATTR_SERVER_SIDE,
0200
0201 __MPTCP_ATTR_AFTER_LAST
0202 };
0203
0204 #define MPTCP_ATTR_MAX (__MPTCP_ATTR_AFTER_LAST - 1)
0205
0206
0207 #define MPTCP_RST_EUNSPEC 0
0208 #define MPTCP_RST_EMPTCP 1
0209 #define MPTCP_RST_ERESOURCE 2
0210 #define MPTCP_RST_EPROHIBIT 3
0211 #define MPTCP_RST_EWQ2BIG 4
0212 #define MPTCP_RST_EBADPERF 5
0213 #define MPTCP_RST_EMIDDLEBOX 6
0214
0215 struct mptcp_subflow_data {
0216 __u32 size_subflow_data;
0217 __u32 num_subflows;
0218 __u32 size_kernel;
0219 __u32 size_user;
0220 } __attribute__((aligned(8)));
0221
0222 struct mptcp_subflow_addrs {
0223 union {
0224 __kernel_sa_family_t sa_family;
0225 struct sockaddr sa_local;
0226 struct sockaddr_in sin_local;
0227 struct sockaddr_in6 sin6_local;
0228 struct __kernel_sockaddr_storage ss_local;
0229 };
0230 union {
0231 struct sockaddr sa_remote;
0232 struct sockaddr_in sin_remote;
0233 struct sockaddr_in6 sin6_remote;
0234 struct __kernel_sockaddr_storage ss_remote;
0235 };
0236 };
0237
0238
0239 #define MPTCP_INFO 1
0240 #define MPTCP_TCPINFO 2
0241 #define MPTCP_SUBFLOW_ADDRS 3
0242
0243 #endif