2323#define MPTCP_SUBFLOW_FLAG_CONNECTED _BITUL(7)
2424#define MPTCP_SUBFLOW_FLAG_MAPVALID _BITUL(8)
2525
26- enum {
27- MPTCP_SUBFLOW_ATTR_UNSPEC ,
28- MPTCP_SUBFLOW_ATTR_TOKEN_REM ,
29- MPTCP_SUBFLOW_ATTR_TOKEN_LOC ,
30- MPTCP_SUBFLOW_ATTR_RELWRITE_SEQ ,
31- MPTCP_SUBFLOW_ATTR_MAP_SEQ ,
32- MPTCP_SUBFLOW_ATTR_MAP_SFSEQ ,
33- MPTCP_SUBFLOW_ATTR_SSN_OFFSET ,
34- MPTCP_SUBFLOW_ATTR_MAP_DATALEN ,
35- MPTCP_SUBFLOW_ATTR_FLAGS ,
36- MPTCP_SUBFLOW_ATTR_ID_REM ,
37- MPTCP_SUBFLOW_ATTR_ID_LOC ,
38- MPTCP_SUBFLOW_ATTR_PAD ,
39- __MPTCP_SUBFLOW_ATTR_MAX
40- };
41-
42- #define MPTCP_SUBFLOW_ATTR_MAX (__MPTCP_SUBFLOW_ATTR_MAX - 1)
43-
44- /* netlink interface */
45- #define MPTCP_PM_NAME "mptcp_pm"
4626#define MPTCP_PM_CMD_GRP_NAME "mptcp_pm_cmds"
4727#define MPTCP_PM_EV_GRP_NAME "mptcp_pm_events"
48- #define MPTCP_PM_VER 0x1
49-
50- /*
51- * ATTR types defined for MPTCP
52- */
53- enum {
54- MPTCP_PM_ATTR_UNSPEC ,
55-
56- MPTCP_PM_ATTR_ADDR , /* nested address */
57- MPTCP_PM_ATTR_RCV_ADD_ADDRS , /* u32 */
58- MPTCP_PM_ATTR_SUBFLOWS , /* u32 */
59- MPTCP_PM_ATTR_TOKEN , /* u32 */
60- MPTCP_PM_ATTR_LOC_ID , /* u8 */
61- MPTCP_PM_ATTR_ADDR_REMOTE , /* nested address */
62-
63- __MPTCP_PM_ATTR_MAX
64- };
65-
66- #define MPTCP_PM_ATTR_MAX (__MPTCP_PM_ATTR_MAX - 1)
67-
68- enum {
69- MPTCP_PM_ADDR_ATTR_UNSPEC ,
7028
71- MPTCP_PM_ADDR_ATTR_FAMILY , /* u16 */
72- MPTCP_PM_ADDR_ATTR_ID , /* u8 */
73- MPTCP_PM_ADDR_ATTR_ADDR4 , /* struct in_addr */
74- MPTCP_PM_ADDR_ATTR_ADDR6 , /* struct in6_addr */
75- MPTCP_PM_ADDR_ATTR_PORT , /* u16 */
76- MPTCP_PM_ADDR_ATTR_FLAGS , /* u32 */
77- MPTCP_PM_ADDR_ATTR_IF_IDX , /* s32 */
78-
79- __MPTCP_PM_ADDR_ATTR_MAX
80- };
81-
82- #define MPTCP_PM_ADDR_ATTR_MAX (__MPTCP_PM_ADDR_ATTR_MAX - 1)
83-
84- #define MPTCP_PM_ADDR_FLAG_SIGNAL (1 << 0)
85- #define MPTCP_PM_ADDR_FLAG_SUBFLOW (1 << 1)
86- #define MPTCP_PM_ADDR_FLAG_BACKUP (1 << 2)
87- #define MPTCP_PM_ADDR_FLAG_FULLMESH (1 << 3)
88- #define MPTCP_PM_ADDR_FLAG_IMPLICIT (1 << 4)
89-
90- enum {
91- MPTCP_PM_CMD_UNSPEC ,
92-
93- MPTCP_PM_CMD_ADD_ADDR ,
94- MPTCP_PM_CMD_DEL_ADDR ,
95- MPTCP_PM_CMD_GET_ADDR ,
96- MPTCP_PM_CMD_FLUSH_ADDRS ,
97- MPTCP_PM_CMD_SET_LIMITS ,
98- MPTCP_PM_CMD_GET_LIMITS ,
99- MPTCP_PM_CMD_SET_FLAGS ,
100- MPTCP_PM_CMD_ANNOUNCE ,
101- MPTCP_PM_CMD_REMOVE ,
102- MPTCP_PM_CMD_SUBFLOW_CREATE ,
103- MPTCP_PM_CMD_SUBFLOW_DESTROY ,
104-
105- __MPTCP_PM_CMD_AFTER_LAST
106- };
29+ #include <linux/mptcp_upstream_pm.h>
10730
10831#define MPTCP_INFO_FLAG_FALLBACK _BITUL(0)
10932#define MPTCP_INFO_FLAG_REMOTE_KEY_RECEIVED _BITUL(1)
11033
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+
11140struct mptcp_info {
11241 __u8 mptcpi_subflows ;
11342 __u8 mptcpi_add_addr_signal ;
@@ -123,95 +52,18 @@ struct mptcp_info {
12352 __u8 mptcpi_local_addr_used ;
12453 __u8 mptcpi_local_addr_max ;
12554 __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 ;
12665};
12766
128- /*
129- * MPTCP_EVENT_CREATED: token, family, saddr4 | saddr6, daddr4 | daddr6,
130- * sport, dport
131- * A new MPTCP connection has been created. It is the good time to allocate
132- * memory and send ADD_ADDR if needed. Depending on the traffic-patterns
133- * it can take a long time until the MPTCP_EVENT_ESTABLISHED is sent.
134- *
135- * MPTCP_EVENT_ESTABLISHED: token, family, saddr4 | saddr6, daddr4 | daddr6,
136- * sport, dport
137- * A MPTCP connection is established (can start new subflows).
138- *
139- * MPTCP_EVENT_CLOSED: token
140- * A MPTCP connection has stopped.
141- *
142- * MPTCP_EVENT_ANNOUNCED: token, rem_id, family, daddr4 | daddr6 [, dport]
143- * A new address has been announced by the peer.
144- *
145- * MPTCP_EVENT_REMOVED: token, rem_id
146- * An address has been lost by the peer.
147- *
148- * MPTCP_EVENT_SUB_ESTABLISHED: token, family, loc_id, rem_id,
149- * saddr4 | saddr6, daddr4 | daddr6, sport,
150- * dport, backup, if_idx [, error]
151- * A new subflow has been established. 'error' should not be set.
152- *
153- * MPTCP_EVENT_SUB_CLOSED: token, family, loc_id, rem_id, saddr4 | saddr6,
154- * daddr4 | daddr6, sport, dport, backup, if_idx
155- * [, error]
156- * A subflow has been closed. An error (copy of sk_err) could be set if an
157- * error has been detected for this subflow.
158- *
159- * MPTCP_EVENT_SUB_PRIORITY: token, family, loc_id, rem_id, saddr4 | saddr6,
160- * daddr4 | daddr6, sport, dport, backup, if_idx
161- * [, error]
162- * The priority of a subflow has changed. 'error' should not be set.
163- *
164- * MPTCP_EVENT_LISTENER_CREATED: family, sport, saddr4 | saddr6
165- * A new PM listener is created.
166- *
167- * MPTCP_EVENT_LISTENER_CLOSED: family, sport, saddr4 | saddr6
168- * A PM listener is closed.
169- */
170- enum mptcp_event_type {
171- MPTCP_EVENT_UNSPEC = 0 ,
172- MPTCP_EVENT_CREATED = 1 ,
173- MPTCP_EVENT_ESTABLISHED = 2 ,
174- MPTCP_EVENT_CLOSED = 3 ,
175-
176- MPTCP_EVENT_ANNOUNCED = 6 ,
177- MPTCP_EVENT_REMOVED = 7 ,
178-
179- MPTCP_EVENT_SUB_ESTABLISHED = 10 ,
180- MPTCP_EVENT_SUB_CLOSED = 11 ,
181-
182- MPTCP_EVENT_SUB_PRIORITY = 13 ,
183-
184- MPTCP_EVENT_LISTENER_CREATED = 15 ,
185- MPTCP_EVENT_LISTENER_CLOSED = 16 ,
186- };
187-
188- enum mptcp_event_attr {
189- MPTCP_ATTR_UNSPEC = 0 ,
190-
191- MPTCP_ATTR_TOKEN , /* u32 */
192- MPTCP_ATTR_FAMILY , /* u16 */
193- MPTCP_ATTR_LOC_ID , /* u8 */
194- MPTCP_ATTR_REM_ID , /* u8 */
195- MPTCP_ATTR_SADDR4 , /* be32 */
196- MPTCP_ATTR_SADDR6 , /* struct in6_addr */
197- MPTCP_ATTR_DADDR4 , /* be32 */
198- MPTCP_ATTR_DADDR6 , /* struct in6_addr */
199- MPTCP_ATTR_SPORT , /* be16 */
200- MPTCP_ATTR_DPORT , /* be16 */
201- MPTCP_ATTR_BACKUP , /* u8 */
202- MPTCP_ATTR_ERROR , /* u8 */
203- MPTCP_ATTR_FLAGS , /* u16 */
204- MPTCP_ATTR_TIMEOUT , /* u32 */
205- MPTCP_ATTR_IF_IDX , /* s32 */
206- MPTCP_ATTR_RESET_REASON ,/* u32 */
207- MPTCP_ATTR_RESET_FLAGS , /* u32 */
208- MPTCP_ATTR_SERVER_SIDE , /* u8 */
209-
210- __MPTCP_ATTR_AFTER_LAST
211- };
212-
213- #define MPTCP_ATTR_MAX (__MPTCP_ATTR_AFTER_LAST - 1)
214-
21567/* MPTCP Reset reason codes, rfc8684 */
21668#define MPTCP_RST_EUNSPEC 0
21769#define MPTCP_RST_EMPTCP 1
@@ -244,9 +96,33 @@ struct mptcp_subflow_addrs {
24496 };
24597};
24698
99+ struct mptcp_subflow_info {
100+ __u32 id ;
101+ struct mptcp_subflow_addrs addrs ;
102+ };
103+
104+ struct 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_info
112+ * are respectively at least:
113+ * size_arrays * size_sfinfo_user
114+ * size_arrays * size_tcpinfo_user
115+ * bytes wide
116+ */
117+ __aligned_u64 subflow_info ;
118+ __aligned_u64 tcp_info ;
119+ struct mptcp_info mptcp_info ;
120+ };
121+
247122/* MPTCP socket options */
248123#define MPTCP_INFO 1
249124#define MPTCP_TCPINFO 2
250125#define MPTCP_SUBFLOW_ADDRS 3
126+ #define MPTCP_FULL_INFO 4
251127
252128#endif /* _UAPI_MPTCP_H */
0 commit comments