1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ 2*4882a593Smuzhiyun #ifndef _UAPI_MPTCP_H 3*4882a593Smuzhiyun #define _UAPI_MPTCP_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <linux/const.h> 6*4882a593Smuzhiyun #include <linux/types.h> 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #define MPTCP_SUBFLOW_FLAG_MCAP_REM _BITUL(0) 9*4882a593Smuzhiyun #define MPTCP_SUBFLOW_FLAG_MCAP_LOC _BITUL(1) 10*4882a593Smuzhiyun #define MPTCP_SUBFLOW_FLAG_JOIN_REM _BITUL(2) 11*4882a593Smuzhiyun #define MPTCP_SUBFLOW_FLAG_JOIN_LOC _BITUL(3) 12*4882a593Smuzhiyun #define MPTCP_SUBFLOW_FLAG_BKUP_REM _BITUL(4) 13*4882a593Smuzhiyun #define MPTCP_SUBFLOW_FLAG_BKUP_LOC _BITUL(5) 14*4882a593Smuzhiyun #define MPTCP_SUBFLOW_FLAG_FULLY_ESTABLISHED _BITUL(6) 15*4882a593Smuzhiyun #define MPTCP_SUBFLOW_FLAG_CONNECTED _BITUL(7) 16*4882a593Smuzhiyun #define MPTCP_SUBFLOW_FLAG_MAPVALID _BITUL(8) 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun enum { 19*4882a593Smuzhiyun MPTCP_SUBFLOW_ATTR_UNSPEC, 20*4882a593Smuzhiyun MPTCP_SUBFLOW_ATTR_TOKEN_REM, 21*4882a593Smuzhiyun MPTCP_SUBFLOW_ATTR_TOKEN_LOC, 22*4882a593Smuzhiyun MPTCP_SUBFLOW_ATTR_RELWRITE_SEQ, 23*4882a593Smuzhiyun MPTCP_SUBFLOW_ATTR_MAP_SEQ, 24*4882a593Smuzhiyun MPTCP_SUBFLOW_ATTR_MAP_SFSEQ, 25*4882a593Smuzhiyun MPTCP_SUBFLOW_ATTR_SSN_OFFSET, 26*4882a593Smuzhiyun MPTCP_SUBFLOW_ATTR_MAP_DATALEN, 27*4882a593Smuzhiyun MPTCP_SUBFLOW_ATTR_FLAGS, 28*4882a593Smuzhiyun MPTCP_SUBFLOW_ATTR_ID_REM, 29*4882a593Smuzhiyun MPTCP_SUBFLOW_ATTR_ID_LOC, 30*4882a593Smuzhiyun MPTCP_SUBFLOW_ATTR_PAD, 31*4882a593Smuzhiyun __MPTCP_SUBFLOW_ATTR_MAX 32*4882a593Smuzhiyun }; 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun #define MPTCP_SUBFLOW_ATTR_MAX (__MPTCP_SUBFLOW_ATTR_MAX - 1) 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun /* netlink interface */ 37*4882a593Smuzhiyun #define MPTCP_PM_NAME "mptcp_pm" 38*4882a593Smuzhiyun #define MPTCP_PM_CMD_GRP_NAME "mptcp_pm_cmds" 39*4882a593Smuzhiyun #define MPTCP_PM_VER 0x1 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun /* 42*4882a593Smuzhiyun * ATTR types defined for MPTCP 43*4882a593Smuzhiyun */ 44*4882a593Smuzhiyun enum { 45*4882a593Smuzhiyun MPTCP_PM_ATTR_UNSPEC, 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun MPTCP_PM_ATTR_ADDR, /* nested address */ 48*4882a593Smuzhiyun MPTCP_PM_ATTR_RCV_ADD_ADDRS, /* u32 */ 49*4882a593Smuzhiyun MPTCP_PM_ATTR_SUBFLOWS, /* u32 */ 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun __MPTCP_PM_ATTR_MAX 52*4882a593Smuzhiyun }; 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun #define MPTCP_PM_ATTR_MAX (__MPTCP_PM_ATTR_MAX - 1) 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun enum { 57*4882a593Smuzhiyun MPTCP_PM_ADDR_ATTR_UNSPEC, 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun MPTCP_PM_ADDR_ATTR_FAMILY, /* u16 */ 60*4882a593Smuzhiyun MPTCP_PM_ADDR_ATTR_ID, /* u8 */ 61*4882a593Smuzhiyun MPTCP_PM_ADDR_ATTR_ADDR4, /* struct in_addr */ 62*4882a593Smuzhiyun MPTCP_PM_ADDR_ATTR_ADDR6, /* struct in6_addr */ 63*4882a593Smuzhiyun MPTCP_PM_ADDR_ATTR_PORT, /* u16 */ 64*4882a593Smuzhiyun MPTCP_PM_ADDR_ATTR_FLAGS, /* u32 */ 65*4882a593Smuzhiyun MPTCP_PM_ADDR_ATTR_IF_IDX, /* s32 */ 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun __MPTCP_PM_ADDR_ATTR_MAX 68*4882a593Smuzhiyun }; 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun #define MPTCP_PM_ADDR_ATTR_MAX (__MPTCP_PM_ADDR_ATTR_MAX - 1) 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun #define MPTCP_PM_ADDR_FLAG_SIGNAL (1 << 0) 73*4882a593Smuzhiyun #define MPTCP_PM_ADDR_FLAG_SUBFLOW (1 << 1) 74*4882a593Smuzhiyun #define MPTCP_PM_ADDR_FLAG_BACKUP (1 << 2) 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun enum { 77*4882a593Smuzhiyun MPTCP_PM_CMD_UNSPEC, 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun MPTCP_PM_CMD_ADD_ADDR, 80*4882a593Smuzhiyun MPTCP_PM_CMD_DEL_ADDR, 81*4882a593Smuzhiyun MPTCP_PM_CMD_GET_ADDR, 82*4882a593Smuzhiyun MPTCP_PM_CMD_FLUSH_ADDRS, 83*4882a593Smuzhiyun MPTCP_PM_CMD_SET_LIMITS, 84*4882a593Smuzhiyun MPTCP_PM_CMD_GET_LIMITS, 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun __MPTCP_PM_CMD_AFTER_LAST 87*4882a593Smuzhiyun }; 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun #define MPTCP_INFO_FLAG_FALLBACK _BITUL(0) 90*4882a593Smuzhiyun #define MPTCP_INFO_FLAG_REMOTE_KEY_RECEIVED _BITUL(1) 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun struct mptcp_info { 93*4882a593Smuzhiyun __u8 mptcpi_subflows; 94*4882a593Smuzhiyun __u8 mptcpi_add_addr_signal; 95*4882a593Smuzhiyun __u8 mptcpi_add_addr_accepted; 96*4882a593Smuzhiyun __u8 mptcpi_subflows_max; 97*4882a593Smuzhiyun __u8 mptcpi_add_addr_signal_max; 98*4882a593Smuzhiyun __u8 mptcpi_add_addr_accepted_max; 99*4882a593Smuzhiyun __u32 mptcpi_flags; 100*4882a593Smuzhiyun __u32 mptcpi_token; 101*4882a593Smuzhiyun __u64 mptcpi_write_seq; 102*4882a593Smuzhiyun __u64 mptcpi_snd_una; 103*4882a593Smuzhiyun __u64 mptcpi_rcv_nxt; 104*4882a593Smuzhiyun }; 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun #endif /* _UAPI_MPTCP_H */ 107