15147dfb5SDavide Caratti /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ 25147dfb5SDavide Caratti #ifndef _UAPI_MPTCP_H 35147dfb5SDavide Caratti #define _UAPI_MPTCP_H 45147dfb5SDavide Caratti 55147dfb5SDavide Caratti #include <linux/const.h> 65147dfb5SDavide Caratti #include <linux/types.h> 75147dfb5SDavide Caratti 85147dfb5SDavide Caratti #define MPTCP_SUBFLOW_FLAG_MCAP_REM _BITUL(0) 95147dfb5SDavide Caratti #define MPTCP_SUBFLOW_FLAG_MCAP_LOC _BITUL(1) 105147dfb5SDavide Caratti #define MPTCP_SUBFLOW_FLAG_JOIN_REM _BITUL(2) 115147dfb5SDavide Caratti #define MPTCP_SUBFLOW_FLAG_JOIN_LOC _BITUL(3) 125147dfb5SDavide Caratti #define MPTCP_SUBFLOW_FLAG_BKUP_REM _BITUL(4) 135147dfb5SDavide Caratti #define MPTCP_SUBFLOW_FLAG_BKUP_LOC _BITUL(5) 145147dfb5SDavide Caratti #define MPTCP_SUBFLOW_FLAG_FULLY_ESTABLISHED _BITUL(6) 155147dfb5SDavide Caratti #define MPTCP_SUBFLOW_FLAG_CONNECTED _BITUL(7) 165147dfb5SDavide Caratti #define MPTCP_SUBFLOW_FLAG_MAPVALID _BITUL(8) 175147dfb5SDavide Caratti 185147dfb5SDavide Caratti enum { 195147dfb5SDavide Caratti MPTCP_SUBFLOW_ATTR_UNSPEC, 205147dfb5SDavide Caratti MPTCP_SUBFLOW_ATTR_TOKEN_REM, 215147dfb5SDavide Caratti MPTCP_SUBFLOW_ATTR_TOKEN_LOC, 225147dfb5SDavide Caratti MPTCP_SUBFLOW_ATTR_RELWRITE_SEQ, 235147dfb5SDavide Caratti MPTCP_SUBFLOW_ATTR_MAP_SEQ, 245147dfb5SDavide Caratti MPTCP_SUBFLOW_ATTR_MAP_SFSEQ, 255147dfb5SDavide Caratti MPTCP_SUBFLOW_ATTR_SSN_OFFSET, 265147dfb5SDavide Caratti MPTCP_SUBFLOW_ATTR_MAP_DATALEN, 275147dfb5SDavide Caratti MPTCP_SUBFLOW_ATTR_FLAGS, 285147dfb5SDavide Caratti MPTCP_SUBFLOW_ATTR_ID_REM, 295147dfb5SDavide Caratti MPTCP_SUBFLOW_ATTR_ID_LOC, 305147dfb5SDavide Caratti MPTCP_SUBFLOW_ATTR_PAD, 315147dfb5SDavide Caratti __MPTCP_SUBFLOW_ATTR_MAX 325147dfb5SDavide Caratti }; 335147dfb5SDavide Caratti 345147dfb5SDavide Caratti #define MPTCP_SUBFLOW_ATTR_MAX (__MPTCP_SUBFLOW_ATTR_MAX - 1) 3501cacb00SPaolo Abeni 3601cacb00SPaolo Abeni /* netlink interface */ 3701cacb00SPaolo Abeni #define MPTCP_PM_NAME "mptcp_pm" 3801cacb00SPaolo Abeni #define MPTCP_PM_CMD_GRP_NAME "mptcp_pm_cmds" 39b911c97cSFlorian Westphal #define MPTCP_PM_EV_GRP_NAME "mptcp_pm_events" 4001cacb00SPaolo Abeni #define MPTCP_PM_VER 0x1 4101cacb00SPaolo Abeni 4201cacb00SPaolo Abeni /* 4301cacb00SPaolo Abeni * ATTR types defined for MPTCP 4401cacb00SPaolo Abeni */ 4501cacb00SPaolo Abeni enum { 4601cacb00SPaolo Abeni MPTCP_PM_ATTR_UNSPEC, 4701cacb00SPaolo Abeni 4801cacb00SPaolo Abeni MPTCP_PM_ATTR_ADDR, /* nested address */ 4901cacb00SPaolo Abeni MPTCP_PM_ATTR_RCV_ADD_ADDRS, /* u32 */ 5001cacb00SPaolo Abeni MPTCP_PM_ATTR_SUBFLOWS, /* u32 */ 5101cacb00SPaolo Abeni 5201cacb00SPaolo Abeni __MPTCP_PM_ATTR_MAX 5301cacb00SPaolo Abeni }; 5401cacb00SPaolo Abeni 5501cacb00SPaolo Abeni #define MPTCP_PM_ATTR_MAX (__MPTCP_PM_ATTR_MAX - 1) 5601cacb00SPaolo Abeni 5701cacb00SPaolo Abeni enum { 5801cacb00SPaolo Abeni MPTCP_PM_ADDR_ATTR_UNSPEC, 5901cacb00SPaolo Abeni 6001cacb00SPaolo Abeni MPTCP_PM_ADDR_ATTR_FAMILY, /* u16 */ 6101cacb00SPaolo Abeni MPTCP_PM_ADDR_ATTR_ID, /* u8 */ 6201cacb00SPaolo Abeni MPTCP_PM_ADDR_ATTR_ADDR4, /* struct in_addr */ 6301cacb00SPaolo Abeni MPTCP_PM_ADDR_ATTR_ADDR6, /* struct in6_addr */ 6401cacb00SPaolo Abeni MPTCP_PM_ADDR_ATTR_PORT, /* u16 */ 6501cacb00SPaolo Abeni MPTCP_PM_ADDR_ATTR_FLAGS, /* u32 */ 6601cacb00SPaolo Abeni MPTCP_PM_ADDR_ATTR_IF_IDX, /* s32 */ 6701cacb00SPaolo Abeni 6801cacb00SPaolo Abeni __MPTCP_PM_ADDR_ATTR_MAX 6901cacb00SPaolo Abeni }; 7001cacb00SPaolo Abeni 7101cacb00SPaolo Abeni #define MPTCP_PM_ADDR_ATTR_MAX (__MPTCP_PM_ADDR_ATTR_MAX - 1) 7201cacb00SPaolo Abeni 7301cacb00SPaolo Abeni #define MPTCP_PM_ADDR_FLAG_SIGNAL (1 << 0) 7401cacb00SPaolo Abeni #define MPTCP_PM_ADDR_FLAG_SUBFLOW (1 << 1) 7501cacb00SPaolo Abeni #define MPTCP_PM_ADDR_FLAG_BACKUP (1 << 2) 7601cacb00SPaolo Abeni 7701cacb00SPaolo Abeni enum { 7801cacb00SPaolo Abeni MPTCP_PM_CMD_UNSPEC, 7901cacb00SPaolo Abeni 8001cacb00SPaolo Abeni MPTCP_PM_CMD_ADD_ADDR, 8101cacb00SPaolo Abeni MPTCP_PM_CMD_DEL_ADDR, 8201cacb00SPaolo Abeni MPTCP_PM_CMD_GET_ADDR, 8301cacb00SPaolo Abeni MPTCP_PM_CMD_FLUSH_ADDRS, 8401cacb00SPaolo Abeni MPTCP_PM_CMD_SET_LIMITS, 8501cacb00SPaolo Abeni MPTCP_PM_CMD_GET_LIMITS, 860f9f696aSGeliang Tang MPTCP_PM_CMD_SET_FLAGS, 8701cacb00SPaolo Abeni 8801cacb00SPaolo Abeni __MPTCP_PM_CMD_AFTER_LAST 8901cacb00SPaolo Abeni }; 9001cacb00SPaolo Abeni 91ac3b45f6SPaolo Abeni #define MPTCP_INFO_FLAG_FALLBACK _BITUL(0) 92ac3b45f6SPaolo Abeni #define MPTCP_INFO_FLAG_REMOTE_KEY_RECEIVED _BITUL(1) 93ac3b45f6SPaolo Abeni 94ac3b45f6SPaolo Abeni struct mptcp_info { 95ac3b45f6SPaolo Abeni __u8 mptcpi_subflows; 96ac3b45f6SPaolo Abeni __u8 mptcpi_add_addr_signal; 97ac3b45f6SPaolo Abeni __u8 mptcpi_add_addr_accepted; 98ac3b45f6SPaolo Abeni __u8 mptcpi_subflows_max; 99ac3b45f6SPaolo Abeni __u8 mptcpi_add_addr_signal_max; 100ac3b45f6SPaolo Abeni __u8 mptcpi_add_addr_accepted_max; 101ac3b45f6SPaolo Abeni __u32 mptcpi_flags; 102ac3b45f6SPaolo Abeni __u32 mptcpi_token; 103ac3b45f6SPaolo Abeni __u64 mptcpi_write_seq; 104ac3b45f6SPaolo Abeni __u64 mptcpi_snd_una; 105ac3b45f6SPaolo Abeni __u64 mptcpi_rcv_nxt; 1060caf3adaSGeliang Tang __u8 mptcpi_local_addr_used; 1070caf3adaSGeliang Tang __u8 mptcpi_local_addr_max; 108ac3b45f6SPaolo Abeni }; 109ac3b45f6SPaolo Abeni 110b911c97cSFlorian Westphal /* 111b911c97cSFlorian Westphal * MPTCP_EVENT_CREATED: token, family, saddr4 | saddr6, daddr4 | daddr6, 112b911c97cSFlorian Westphal * sport, dport 113b911c97cSFlorian Westphal * A new MPTCP connection has been created. It is the good time to allocate 114b911c97cSFlorian Westphal * memory and send ADD_ADDR if needed. Depending on the traffic-patterns 115b911c97cSFlorian Westphal * it can take a long time until the MPTCP_EVENT_ESTABLISHED is sent. 116b911c97cSFlorian Westphal * 117b911c97cSFlorian Westphal * MPTCP_EVENT_ESTABLISHED: token, family, saddr4 | saddr6, daddr4 | daddr6, 118b911c97cSFlorian Westphal * sport, dport 119b911c97cSFlorian Westphal * A MPTCP connection is established (can start new subflows). 120b911c97cSFlorian Westphal * 121b911c97cSFlorian Westphal * MPTCP_EVENT_CLOSED: token 122b911c97cSFlorian Westphal * A MPTCP connection has stopped. 123b911c97cSFlorian Westphal * 124b911c97cSFlorian Westphal * MPTCP_EVENT_ANNOUNCED: token, rem_id, family, daddr4 | daddr6 [, dport] 125b911c97cSFlorian Westphal * A new address has been announced by the peer. 126b911c97cSFlorian Westphal * 127b911c97cSFlorian Westphal * MPTCP_EVENT_REMOVED: token, rem_id 128b911c97cSFlorian Westphal * An address has been lost by the peer. 129b911c97cSFlorian Westphal * 130b911c97cSFlorian Westphal * MPTCP_EVENT_SUB_ESTABLISHED: token, family, saddr4 | saddr6, 131b911c97cSFlorian Westphal * daddr4 | daddr6, sport, dport, backup, 132b911c97cSFlorian Westphal * if_idx [, error] 133b911c97cSFlorian Westphal * A new subflow has been established. 'error' should not be set. 134b911c97cSFlorian Westphal * 135b911c97cSFlorian Westphal * MPTCP_EVENT_SUB_CLOSED: token, family, saddr4 | saddr6, daddr4 | daddr6, 136b911c97cSFlorian Westphal * sport, dport, backup, if_idx [, error] 137b911c97cSFlorian Westphal * A subflow has been closed. An error (copy of sk_err) could be set if an 138b911c97cSFlorian Westphal * error has been detected for this subflow. 139b911c97cSFlorian Westphal * 140b911c97cSFlorian Westphal * MPTCP_EVENT_SUB_PRIORITY: token, family, saddr4 | saddr6, daddr4 | daddr6, 141b911c97cSFlorian Westphal * sport, dport, backup, if_idx [, error] 142b911c97cSFlorian Westphal * The priority of a subflow has changed. 'error' should not be set. 143b911c97cSFlorian Westphal */ 144b911c97cSFlorian Westphal enum mptcp_event_type { 145b911c97cSFlorian Westphal MPTCP_EVENT_UNSPEC = 0, 146b911c97cSFlorian Westphal MPTCP_EVENT_CREATED = 1, 147b911c97cSFlorian Westphal MPTCP_EVENT_ESTABLISHED = 2, 148b911c97cSFlorian Westphal MPTCP_EVENT_CLOSED = 3, 149b911c97cSFlorian Westphal 150b911c97cSFlorian Westphal MPTCP_EVENT_ANNOUNCED = 6, 151b911c97cSFlorian Westphal MPTCP_EVENT_REMOVED = 7, 152b911c97cSFlorian Westphal 153b911c97cSFlorian Westphal MPTCP_EVENT_SUB_ESTABLISHED = 10, 154b911c97cSFlorian Westphal MPTCP_EVENT_SUB_CLOSED = 11, 155b911c97cSFlorian Westphal 156b911c97cSFlorian Westphal MPTCP_EVENT_SUB_PRIORITY = 13, 157b911c97cSFlorian Westphal }; 158b911c97cSFlorian Westphal 159b911c97cSFlorian Westphal enum mptcp_event_attr { 160b911c97cSFlorian Westphal MPTCP_ATTR_UNSPEC = 0, 161b911c97cSFlorian Westphal 162b911c97cSFlorian Westphal MPTCP_ATTR_TOKEN, /* u32 */ 163b911c97cSFlorian Westphal MPTCP_ATTR_FAMILY, /* u16 */ 164b911c97cSFlorian Westphal MPTCP_ATTR_LOC_ID, /* u8 */ 165b911c97cSFlorian Westphal MPTCP_ATTR_REM_ID, /* u8 */ 166b911c97cSFlorian Westphal MPTCP_ATTR_SADDR4, /* be32 */ 167b911c97cSFlorian Westphal MPTCP_ATTR_SADDR6, /* struct in6_addr */ 168b911c97cSFlorian Westphal MPTCP_ATTR_DADDR4, /* be32 */ 169b911c97cSFlorian Westphal MPTCP_ATTR_DADDR6, /* struct in6_addr */ 170b911c97cSFlorian Westphal MPTCP_ATTR_SPORT, /* be16 */ 171b911c97cSFlorian Westphal MPTCP_ATTR_DPORT, /* be16 */ 172b911c97cSFlorian Westphal MPTCP_ATTR_BACKUP, /* u8 */ 173b911c97cSFlorian Westphal MPTCP_ATTR_ERROR, /* u8 */ 174b911c97cSFlorian Westphal MPTCP_ATTR_FLAGS, /* u16 */ 175b911c97cSFlorian Westphal MPTCP_ATTR_TIMEOUT, /* u32 */ 176b911c97cSFlorian Westphal MPTCP_ATTR_IF_IDX, /* s32 */ 177*dc87efdbSFlorian Westphal MPTCP_ATTR_RESET_REASON,/* u32 */ 178*dc87efdbSFlorian Westphal MPTCP_ATTR_RESET_FLAGS, /* u32 */ 179b911c97cSFlorian Westphal 180b911c97cSFlorian Westphal __MPTCP_ATTR_AFTER_LAST 181b911c97cSFlorian Westphal }; 182b911c97cSFlorian Westphal 183b911c97cSFlorian Westphal #define MPTCP_ATTR_MAX (__MPTCP_ATTR_AFTER_LAST - 1) 184b911c97cSFlorian Westphal 185*dc87efdbSFlorian Westphal /* MPTCP Reset reason codes, rfc8684 */ 186*dc87efdbSFlorian Westphal #define MPTCP_RST_EUNSPEC 0 187*dc87efdbSFlorian Westphal #define MPTCP_RST_EMPTCP 1 188*dc87efdbSFlorian Westphal #define MPTCP_RST_ERESOURCE 2 189*dc87efdbSFlorian Westphal #define MPTCP_RST_EPROHIBIT 3 190*dc87efdbSFlorian Westphal #define MPTCP_RST_EWQ2BIG 4 191*dc87efdbSFlorian Westphal #define MPTCP_RST_EBADPERF 5 192*dc87efdbSFlorian Westphal #define MPTCP_RST_EMIDDLEBOX 6 193*dc87efdbSFlorian Westphal 1945147dfb5SDavide Caratti #endif /* _UAPI_MPTCP_H */ 195