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