brintos

brintos / linux-shallow public Read only

0
0
Text · 3.8 KiB · 67d015d Raw
129 lines · c
1/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */2#ifndef _UAPI_MPTCP_H3#define _UAPI_MPTCP_H4 5#ifndef __KERNEL__6#include <netinet/in.h>		/* for sockaddr_in and sockaddr_in6	*/7#include <sys/socket.h>		/* for struct sockaddr			*/8#endif9 10#include <linux/const.h>11#include <linux/types.h>12#include <linux/in.h>		/* for sockaddr_in			*/13#include <linux/in6.h>		/* for sockaddr_in6			*/14#include <linux/socket.h>	/* for sockaddr_storage and sa_family	*/15 16#define MPTCP_SUBFLOW_FLAG_MCAP_REM		_BITUL(0)17#define MPTCP_SUBFLOW_FLAG_MCAP_LOC		_BITUL(1)18#define MPTCP_SUBFLOW_FLAG_JOIN_REM		_BITUL(2)19#define MPTCP_SUBFLOW_FLAG_JOIN_LOC		_BITUL(3)20#define MPTCP_SUBFLOW_FLAG_BKUP_REM		_BITUL(4)21#define MPTCP_SUBFLOW_FLAG_BKUP_LOC		_BITUL(5)22#define MPTCP_SUBFLOW_FLAG_FULLY_ESTABLISHED	_BITUL(6)23#define MPTCP_SUBFLOW_FLAG_CONNECTED		_BITUL(7)24#define MPTCP_SUBFLOW_FLAG_MAPVALID		_BITUL(8)25 26#define MPTCP_PM_CMD_GRP_NAME	"mptcp_pm_cmds"27#define MPTCP_PM_EV_GRP_NAME	"mptcp_pm_events"28 29#include <linux/mptcp_pm.h>30 31#define MPTCP_INFO_FLAG_FALLBACK		_BITUL(0)32#define MPTCP_INFO_FLAG_REMOTE_KEY_RECEIVED	_BITUL(1)33 34#define MPTCP_PM_ADDR_FLAG_SIGNAL                      (1 << 0)35#define MPTCP_PM_ADDR_FLAG_SUBFLOW                     (1 << 1)36#define MPTCP_PM_ADDR_FLAG_BACKUP                      (1 << 2)37#define MPTCP_PM_ADDR_FLAG_FULLMESH                    (1 << 3)38#define MPTCP_PM_ADDR_FLAG_IMPLICIT                    (1 << 4)39 40struct mptcp_info {41	__u8	mptcpi_subflows;42	__u8	mptcpi_add_addr_signal;43	__u8	mptcpi_add_addr_accepted;44	__u8	mptcpi_subflows_max;45	__u8	mptcpi_add_addr_signal_max;46	__u8	mptcpi_add_addr_accepted_max;47	__u32	mptcpi_flags;48	__u32	mptcpi_token;49	__u64	mptcpi_write_seq;50	__u64	mptcpi_snd_una;51	__u64	mptcpi_rcv_nxt;52	__u8	mptcpi_local_addr_used;53	__u8	mptcpi_local_addr_max;54	__u8	mptcpi_csum_enabled;55	__u32	mptcpi_retransmits;56	__u64	mptcpi_bytes_retrans;57	__u64	mptcpi_bytes_sent;58	__u64	mptcpi_bytes_received;59	__u64	mptcpi_bytes_acked;60	__u8	mptcpi_subflows_total;61	__u8	reserved[3];62	__u32	mptcpi_last_data_sent;63	__u32	mptcpi_last_data_recv;64	__u32	mptcpi_last_ack_recv;65};66 67/* MPTCP Reset reason codes, rfc8684 */68#define MPTCP_RST_EUNSPEC	069#define MPTCP_RST_EMPTCP	170#define MPTCP_RST_ERESOURCE	271#define MPTCP_RST_EPROHIBIT	372#define MPTCP_RST_EWQ2BIG	473#define MPTCP_RST_EBADPERF	574#define MPTCP_RST_EMIDDLEBOX	675 76struct mptcp_subflow_data {77	__u32		size_subflow_data;		/* size of this structure in userspace */78	__u32		num_subflows;			/* must be 0, set by kernel */79	__u32		size_kernel;			/* must be 0, set by kernel */80	__u32		size_user;			/* size of one element in data[] */81} __attribute__((aligned(8)));82 83struct mptcp_subflow_addrs {84	union {85		__kernel_sa_family_t sa_family;86		struct sockaddr sa_local;87		struct sockaddr_in sin_local;88		struct sockaddr_in6 sin6_local;89		struct __kernel_sockaddr_storage ss_local;90	};91	union {92		struct sockaddr sa_remote;93		struct sockaddr_in sin_remote;94		struct sockaddr_in6 sin6_remote;95		struct __kernel_sockaddr_storage ss_remote;96	};97};98 99struct mptcp_subflow_info {100	__u32				id;101	struct mptcp_subflow_addrs	addrs;102};103 104struct mptcp_full_info {105	__u32		size_tcpinfo_kernel;	/* must be 0, set by kernel */106	__u32		size_tcpinfo_user;107	__u32		size_sfinfo_kernel;	/* must be 0, set by kernel */108	__u32		size_sfinfo_user;109	__u32		num_subflows;		/* must be 0, set by kernel (real subflow count) */110	__u32		size_arrays_user;	/* max subflows that userspace is interested in;111						 * the buffers at subflow_info/tcp_info112						 * are respectively at least:113						 *  size_arrays * size_sfinfo_user114						 *  size_arrays * size_tcpinfo_user115						 * bytes wide116						 */117	__aligned_u64		subflow_info;118	__aligned_u64		tcp_info;119	struct mptcp_info	mptcp_info;120};121 122/* MPTCP socket options */123#define MPTCP_INFO		1124#define MPTCP_TCPINFO		2125#define MPTCP_SUBFLOW_ADDRS	3126#define MPTCP_FULL_INFO		4127 128#endif /* _UAPI_MPTCP_H */129