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