GNU Linux-libre 6.8.9-gnu
[releases.git] / Documentation / netlink / specs / mptcp_pm.yaml
1 # SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
2
3 name: mptcp_pm
4 protocol: genetlink-legacy
5 doc: Multipath TCP.
6
7 c-family-name: mptcp-pm-name
8 c-version-name: mptcp-pm-ver
9 max-by-define: true
10 kernel-policy: per-op
11 cmd-cnt-name: --mptcp-pm-cmd-after-last
12
13 definitions:
14   -
15     type: enum
16     name: event-type
17     enum-name: mptcp-event-type
18     name-prefix: mptcp-event-
19     entries:
20      -
21       name: unspec
22       doc: unused event
23      -
24       name: created
25       doc:
26         token, family, saddr4 | saddr6, daddr4 | daddr6, sport, dport
27         A new MPTCP connection has been created. It is the good time to
28         allocate memory and send ADD_ADDR if needed. Depending on the
29         traffic-patterns it can take a long time until the
30         MPTCP_EVENT_ESTABLISHED is sent.
31      -
32       name: established
33       doc:
34         token, family, saddr4 | saddr6, daddr4 | daddr6, sport, dport
35         A MPTCP connection is established (can start new subflows).
36      -
37       name: closed
38       doc:
39         token
40         A MPTCP connection has stopped.
41      -
42       name: announced
43       value: 6
44       doc:
45         token, rem_id, family, daddr4 | daddr6 [, dport]
46         A new address has been announced by the peer.
47      -
48       name: removed
49       doc:
50         token, rem_id
51         An address has been lost by the peer.
52      -
53       name: sub-established
54       value: 10
55       doc:
56         token, family, loc_id, rem_id, saddr4 | saddr6, daddr4 | daddr6, sport,
57         dport, backup, if_idx [, error]
58         A new subflow has been established. 'error' should not be set.
59      -
60       name: sub-closed
61       doc:
62         token, family, loc_id, rem_id, saddr4 | saddr6, daddr4 | daddr6, sport,
63         dport, backup, if_idx [, error]
64         A subflow has been closed. An error (copy of sk_err) could be set if an
65         error has been detected for this subflow.
66      -
67       name: sub-priority
68       value: 13
69       doc:
70         token, family, loc_id, rem_id, saddr4 | saddr6, daddr4 | daddr6, sport,
71         dport, backup, if_idx [, error]
72         The priority of a subflow has changed. 'error' should not be set.
73      -
74       name: listener-created
75       value: 15
76       doc:
77         family, sport, saddr4 | saddr6
78         A new PM listener is created.
79      -
80       name: listener-closed
81       doc:
82         family, sport, saddr4 | saddr6
83         A PM listener is closed.
84
85 attribute-sets:
86   -
87     name: address
88     name-prefix: mptcp-pm-addr-attr-
89     attributes:
90       -
91         name: unspec
92         type: unused
93         value: 0
94       -
95         name: family
96         type: u16
97       -
98         name: id
99         type: u8
100       -
101         name: addr4
102         type: u32
103         byte-order: big-endian
104       -
105         name: addr6
106         type: binary
107         checks:
108           exact-len: 16
109       -
110         name: port
111         type: u16
112         byte-order: big-endian
113       -
114         name: flags
115         type: u32
116       -
117         name: if-idx
118         type: s32
119   -
120     name: subflow-attribute
121     name-prefix: mptcp-subflow-attr-
122     attributes:
123       -
124         name: unspec
125         type: unused
126         value: 0
127       -
128         name: token-rem
129         type: u32
130       -
131         name: token-loc
132         type: u32
133       -
134         name: relwrite-seq
135         type: u32
136       -
137         name: map-seq
138         type: u64
139       -
140         name: map-sfseq
141         type: u32
142       -
143         name: ssn-offset
144         type: u32
145       -
146         name: map-datalen
147         type: u16
148       -
149         name: flags
150         type: u32
151       -
152         name: id-rem
153         type: u8
154       -
155         name: id-loc
156         type: u8
157       -
158         name: pad
159         type: pad
160   -
161     name: endpoint
162     name-prefix: mptcp-pm-endpoint-
163     attributes:
164       -
165         name: addr
166         type: nest
167         nested-attributes: address
168   -
169     name: attr
170     name-prefix: mptcp-pm-attr-
171     attr-cnt-name: --mptcp-attr-after-last
172     attributes:
173       -
174         name: unspec
175         type: unused
176         value: 0
177       -
178         name: addr
179         type: nest
180         nested-attributes: address
181       -
182         name: rcv-add-addrs
183         type: u32
184       -
185         name: subflows
186         type: u32
187       -
188         name: token
189         type: u32
190       -
191         name: loc-id
192         type: u8
193       -
194         name: addr-remote
195         type: nest
196         nested-attributes: address
197   -
198     name: event-attr
199     enum-name: mptcp-event-attr
200     name-prefix: mptcp-attr-
201     attributes:
202       -
203         name: unspec
204         type: unused
205         value: 0
206       -
207         name: token
208         type: u32
209       -
210         name: family
211         type: u16
212       -
213         name: loc-id
214         type: u8
215       -
216         name: rem-id
217         type: u8
218       -
219         name: saddr4
220         type: u32
221         byte-order: big-endian
222       -
223         name: saddr6
224         type: binary
225         checks:
226           min-len: 16
227       -
228         name: daddr4
229         type: u32
230         byte-order: big-endian
231       -
232         name: daddr6
233         type: binary
234         checks:
235           min-len: 16
236       -
237         name: sport
238         type: u16
239         byte-order: big-endian
240       -
241         name: dport
242         type: u16
243         byte-order: big-endian
244       -
245         name: backup
246         type: u8
247       -
248         name: error
249         type: u8
250       -
251         name: flags
252         type: u16
253       -
254         name: timeout
255         type: u32
256       -
257         name: if_idx
258         type: u32
259       -
260         name: reset-reason
261         type: u32
262       -
263         name: reset-flags
264         type: u32
265       -
266         name: server-side
267         type: u8
268
269 operations:
270   list:
271     -
272       name: unspec
273       doc: unused
274       value: 0
275     -
276       name: add-addr
277       doc: Add endpoint
278       attribute-set: endpoint
279       dont-validate: [ strict ]
280       flags: [ uns-admin-perm ]
281       do: &add-addr-attrs
282         request:
283           attributes:
284             - addr
285     -
286       name: del-addr
287       doc: Delete endpoint
288       attribute-set: endpoint
289       dont-validate: [ strict ]
290       flags: [ uns-admin-perm ]
291       do: *add-addr-attrs
292     -
293       name: get-addr
294       doc: Get endpoint information
295       attribute-set: endpoint
296       dont-validate: [ strict ]
297       flags: [ uns-admin-perm ]
298       do: &get-addr-attrs
299         request:
300           attributes:
301            - addr
302         reply:
303           attributes:
304            - addr
305       dump:
306         reply:
307          attributes:
308            - addr
309     -
310       name:  flush-addrs
311       doc: flush addresses
312       attribute-set: endpoint
313       dont-validate: [ strict ]
314       flags: [ uns-admin-perm ]
315       do: *add-addr-attrs
316     -
317       name: set-limits
318       doc: Set protocol limits
319       attribute-set: attr
320       dont-validate: [ strict ]
321       flags: [ uns-admin-perm ]
322       do: &mptcp-limits
323         request:
324           attributes:
325             - rcv-add-addrs
326             - subflows
327     -
328       name: get-limits
329       doc: Get protocol limits
330       attribute-set: attr
331       dont-validate: [ strict ]
332       do: &mptcp-get-limits
333         request:
334            attributes:
335             - rcv-add-addrs
336             - subflows
337         reply:
338           attributes:
339             - rcv-add-addrs
340             - subflows
341     -
342       name: set-flags
343       doc: Change endpoint flags
344       attribute-set: attr
345       dont-validate: [ strict ]
346       flags: [ uns-admin-perm ]
347       do: &mptcp-set-flags
348         request:
349           attributes:
350             - addr
351             - token
352             - addr-remote
353     -
354       name: announce
355       doc: announce new sf
356       attribute-set: attr
357       dont-validate: [ strict ]
358       flags: [ uns-admin-perm ]
359       do: &announce-add
360         request:
361           attributes:
362             - addr
363             - token
364     -
365       name: remove
366       doc: announce removal
367       attribute-set: attr
368       dont-validate: [ strict ]
369       flags: [ uns-admin-perm ]
370       do:
371         request:
372          attributes:
373            - token
374            - loc-id
375     -
376       name: subflow-create
377       doc: todo
378       attribute-set: attr
379       dont-validate: [ strict ]
380       flags: [ uns-admin-perm ]
381       do: &sf-create
382         request:
383           attributes:
384             - addr
385             - token
386             - addr-remote
387     -
388       name: subflow-destroy
389       doc: todo
390       attribute-set: attr
391       dont-validate: [ strict ]
392       flags: [ uns-admin-perm ]
393       do: *sf-create