Skip to content

Commit 2058b80

Browse files
authored
Mptcp upstream headers (#325)
* include: upstream: always include the local copy The platform one might not be up-to-date: it seems better to always include the local copy which is synced with the supported features. Signed-off-by: Matthieu Baerts (NGI0) <[email protected]> * include: update MPTCP upstream headers Now split in two files, with new lines related to MPTCP_INFO. Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
1 parent e8b1767 commit 2058b80

File tree

4 files changed

+197
-173
lines changed

4 files changed

+197
-173
lines changed

include/linux/Makefile.am

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
##
33
## Copyright (c) 2018, 2020, Intel Corporation
44

5-
noinst_HEADERS = mptcp_upstream.h mptcp_org.h
5+
noinst_HEADERS = mptcp_upstream.h mptcp_upstream_pm.h mptcp_org.h
66

77
EXTRA_DIST = README

include/linux/mptcp_upstream.h

Lines changed: 41 additions & 165 deletions
Original file line numberDiff line numberDiff line change
@@ -23,91 +23,20 @@
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+
11140
struct 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 */

include/linux/mptcp_upstream_pm.h

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) */
2+
/* Do not edit directly, auto-generated from: */
3+
/* Documentation/netlink/specs/mptcp_pm.yaml */
4+
/* YNL-GEN uapi header */
5+
6+
#ifndef _UAPI_LINUX_MPTCP_PM_H
7+
#define _UAPI_LINUX_MPTCP_PM_H
8+
9+
#define MPTCP_PM_NAME "mptcp_pm"
10+
#define MPTCP_PM_VER 1
11+
12+
/**
13+
* enum mptcp_event_type
14+
* @MPTCP_EVENT_UNSPEC: unused event
15+
* @MPTCP_EVENT_CREATED: A new MPTCP connection has been created. It is the
16+
* good time to allocate memory and send ADD_ADDR if needed. Depending on the
17+
* traffic-patterns it can take a long time until the MPTCP_EVENT_ESTABLISHED
18+
* is sent. Attributes: token, family, saddr4 | saddr6, daddr4 | daddr6,
19+
* sport, dport, server-side.
20+
* @MPTCP_EVENT_ESTABLISHED: A MPTCP connection is established (can start new
21+
* subflows). Attributes: token, family, saddr4 | saddr6, daddr4 | daddr6,
22+
* sport, dport, server-side.
23+
* @MPTCP_EVENT_CLOSED: A MPTCP connection has stopped. Attribute: token.
24+
* @MPTCP_EVENT_ANNOUNCED: A new address has been announced by the peer.
25+
* Attributes: token, rem_id, family, daddr4 | daddr6 [, dport].
26+
* @MPTCP_EVENT_REMOVED: An address has been lost by the peer. Attributes:
27+
* token, rem_id.
28+
* @MPTCP_EVENT_SUB_ESTABLISHED: A new subflow has been established. 'error'
29+
* should not be set. Attributes: token, family, loc_id, rem_id, saddr4 |
30+
* saddr6, daddr4 | daddr6, sport, dport, backup, if-idx [, error].
31+
* @MPTCP_EVENT_SUB_CLOSED: A subflow has been closed. An error (copy of
32+
* sk_err) could be set if an error has been detected for this subflow.
33+
* Attributes: token, family, loc_id, rem_id, saddr4 | saddr6, daddr4 |
34+
* daddr6, sport, dport, backup, if-idx [, error].
35+
* @MPTCP_EVENT_SUB_PRIORITY: The priority of a subflow has changed. 'error'
36+
* should not be set. Attributes: token, family, loc_id, rem_id, saddr4 |
37+
* saddr6, daddr4 | daddr6, sport, dport, backup, if-idx [, error].
38+
* @MPTCP_EVENT_LISTENER_CREATED: A new PM listener is created. Attributes:
39+
* family, sport, saddr4 | saddr6.
40+
* @MPTCP_EVENT_LISTENER_CLOSED: A PM listener is closed. Attributes: family,
41+
* sport, saddr4 | saddr6.
42+
*/
43+
enum mptcp_event_type {
44+
MPTCP_EVENT_UNSPEC,
45+
MPTCP_EVENT_CREATED,
46+
MPTCP_EVENT_ESTABLISHED,
47+
MPTCP_EVENT_CLOSED,
48+
MPTCP_EVENT_ANNOUNCED = 6,
49+
MPTCP_EVENT_REMOVED,
50+
MPTCP_EVENT_SUB_ESTABLISHED = 10,
51+
MPTCP_EVENT_SUB_CLOSED,
52+
MPTCP_EVENT_SUB_PRIORITY = 13,
53+
MPTCP_EVENT_LISTENER_CREATED = 15,
54+
MPTCP_EVENT_LISTENER_CLOSED,
55+
};
56+
57+
enum {
58+
MPTCP_PM_ADDR_ATTR_UNSPEC,
59+
MPTCP_PM_ADDR_ATTR_FAMILY,
60+
MPTCP_PM_ADDR_ATTR_ID,
61+
MPTCP_PM_ADDR_ATTR_ADDR4,
62+
MPTCP_PM_ADDR_ATTR_ADDR6,
63+
MPTCP_PM_ADDR_ATTR_PORT,
64+
MPTCP_PM_ADDR_ATTR_FLAGS,
65+
MPTCP_PM_ADDR_ATTR_IF_IDX,
66+
67+
__MPTCP_PM_ADDR_ATTR_MAX
68+
};
69+
#define MPTCP_PM_ADDR_ATTR_MAX (__MPTCP_PM_ADDR_ATTR_MAX - 1)
70+
71+
enum {
72+
MPTCP_SUBFLOW_ATTR_UNSPEC,
73+
MPTCP_SUBFLOW_ATTR_TOKEN_REM,
74+
MPTCP_SUBFLOW_ATTR_TOKEN_LOC,
75+
MPTCP_SUBFLOW_ATTR_RELWRITE_SEQ,
76+
MPTCP_SUBFLOW_ATTR_MAP_SEQ,
77+
MPTCP_SUBFLOW_ATTR_MAP_SFSEQ,
78+
MPTCP_SUBFLOW_ATTR_SSN_OFFSET,
79+
MPTCP_SUBFLOW_ATTR_MAP_DATALEN,
80+
MPTCP_SUBFLOW_ATTR_FLAGS,
81+
MPTCP_SUBFLOW_ATTR_ID_REM,
82+
MPTCP_SUBFLOW_ATTR_ID_LOC,
83+
MPTCP_SUBFLOW_ATTR_PAD,
84+
85+
__MPTCP_SUBFLOW_ATTR_MAX
86+
};
87+
#define MPTCP_SUBFLOW_ATTR_MAX (__MPTCP_SUBFLOW_ATTR_MAX - 1)
88+
89+
enum {
90+
MPTCP_PM_ENDPOINT_ADDR = 1,
91+
92+
__MPTCP_PM_ENDPOINT_MAX
93+
};
94+
#define MPTCP_PM_ENDPOINT_MAX (__MPTCP_PM_ENDPOINT_MAX - 1)
95+
96+
enum {
97+
MPTCP_PM_ATTR_UNSPEC,
98+
MPTCP_PM_ATTR_ADDR,
99+
MPTCP_PM_ATTR_RCV_ADD_ADDRS,
100+
MPTCP_PM_ATTR_SUBFLOWS,
101+
MPTCP_PM_ATTR_TOKEN,
102+
MPTCP_PM_ATTR_LOC_ID,
103+
MPTCP_PM_ATTR_ADDR_REMOTE,
104+
105+
__MPTCP_ATTR_AFTER_LAST
106+
};
107+
#define MPTCP_PM_ATTR_MAX (__MPTCP_ATTR_AFTER_LAST - 1)
108+
109+
enum mptcp_event_attr {
110+
MPTCP_ATTR_UNSPEC,
111+
MPTCP_ATTR_TOKEN,
112+
MPTCP_ATTR_FAMILY,
113+
MPTCP_ATTR_LOC_ID,
114+
MPTCP_ATTR_REM_ID,
115+
MPTCP_ATTR_SADDR4,
116+
MPTCP_ATTR_SADDR6,
117+
MPTCP_ATTR_DADDR4,
118+
MPTCP_ATTR_DADDR6,
119+
MPTCP_ATTR_SPORT,
120+
MPTCP_ATTR_DPORT,
121+
MPTCP_ATTR_BACKUP,
122+
MPTCP_ATTR_ERROR,
123+
MPTCP_ATTR_FLAGS,
124+
MPTCP_ATTR_TIMEOUT,
125+
MPTCP_ATTR_IF_IDX,
126+
MPTCP_ATTR_RESET_REASON,
127+
MPTCP_ATTR_RESET_FLAGS,
128+
MPTCP_ATTR_SERVER_SIDE,
129+
130+
__MPTCP_ATTR_MAX
131+
};
132+
#define MPTCP_ATTR_MAX (__MPTCP_ATTR_MAX - 1)
133+
134+
enum {
135+
MPTCP_PM_CMD_UNSPEC,
136+
MPTCP_PM_CMD_ADD_ADDR,
137+
MPTCP_PM_CMD_DEL_ADDR,
138+
MPTCP_PM_CMD_GET_ADDR,
139+
MPTCP_PM_CMD_FLUSH_ADDRS,
140+
MPTCP_PM_CMD_SET_LIMITS,
141+
MPTCP_PM_CMD_GET_LIMITS,
142+
MPTCP_PM_CMD_SET_FLAGS,
143+
MPTCP_PM_CMD_ANNOUNCE,
144+
MPTCP_PM_CMD_REMOVE,
145+
MPTCP_PM_CMD_SUBFLOW_CREATE,
146+
MPTCP_PM_CMD_SUBFLOW_DESTROY,
147+
148+
__MPTCP_PM_CMD_AFTER_LAST
149+
};
150+
#define MPTCP_PM_CMD_MAX (__MPTCP_PM_CMD_AFTER_LAST - 1)
151+
152+
#endif /* _UAPI_LINUX_MPTCP_PM_H */

0 commit comments

Comments
 (0)