xref: /linux/Documentation/netlink/specs/mptcp_pm.yaml (revision fcb3ad4366b9c810cbb9da34c076a9a52d8aa1e0)
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        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
85attribute-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      -
113        name: flags
114        type: u32
115      -
116        name: if-idx
117        type: s32
118  -
119    name: subflow-attribute
120    name-prefix: mptcp-subflow-attr-
121    attributes:
122      -
123        name: unspec
124        type: unused
125        value: 0
126      -
127        name: token-rem
128        type: u32
129      -
130        name: token-loc
131        type: u32
132      -
133        name: relwrite-seq
134        type: u32
135      -
136        name: map-seq
137        type: u64
138      -
139        name: map-sfseq
140        type: u32
141      -
142        name: ssn-offset
143        type: u32
144      -
145        name: map-datalen
146        type: u16
147      -
148        name: flags
149        type: u32
150      -
151        name: id-rem
152        type: u8
153      -
154        name: id-loc
155        type: u8
156      -
157        name: pad
158        type: pad
159  -
160    name: endpoint
161    name-prefix: mptcp-pm-endpoint-
162    attributes:
163      -
164        name: addr
165        type: nest
166        nested-attributes: address
167  -
168    name: attr
169    name-prefix: mptcp-pm-attr-
170    attr-cnt-name: --mptcp-attr-after-last
171    attributes:
172      -
173        name: unspec
174        type: unused
175        value: 0
176      -
177        name: addr
178        type: nest
179        nested-attributes: address
180      -
181        name: rcv-add-addrs
182        type: u32
183      -
184        name: subflows
185        type: u32
186      -
187        name: token
188        type: u32
189      -
190        name: loc-id
191        type: u8
192      -
193        name: addr-remote
194        type: nest
195        nested-attributes: address
196  -
197    name: event-attr
198    enum-name: mptcp-event-attr
199    name-prefix: mptcp-attr-
200    attributes:
201      -
202        name: unspec
203        type: unused
204        value: 0
205      -
206        name: token
207        type: u32
208      -
209        name: family
210        type: u16
211      -
212        name: loc-id
213        type: u8
214      -
215        name: rem-id
216        type: u8
217      -
218        name: saddr4
219        type: u32
220        byte-order: big-endian
221      -
222        name: saddr6
223        type: binary
224        checks:
225          min-len: 16
226      -
227        name: daddr4
228        type: u32
229        byte-order: big-endian
230      -
231        name: daddr6
232        type: binary
233        checks:
234          min-len: 16
235      -
236        name: sport
237        type: u16
238        byte-order: big-endian
239      -
240        name: dport
241        type: u16
242        byte-order: big-endian
243      -
244        name: backup
245        type: u8
246      -
247        name: error
248        type: u8
249      -
250        name: flags
251        type: u16
252      -
253        name: timeout
254        type: u32
255      -
256        name: if_idx
257        type: u32
258      -
259        name: reset-reason
260        type: u32
261      -
262        name: reset-flags
263        type: u32
264      -
265        name: server-side
266        type: u8
267
268operations:
269  list:
270    -
271      name: unspec
272      doc: unused
273      value: 0
274    -
275      name: add-addr
276      doc: Add endpoint
277      attribute-set: endpoint
278      dont-validate: [ strict ]
279      flags: [ uns-admin-perm ]
280      do: &add-addr-attrs
281        request:
282          attributes:
283            - addr
284    -
285      name: del-addr
286      doc: Delete endpoint
287      attribute-set: endpoint
288      dont-validate: [ strict ]
289      flags: [ uns-admin-perm ]
290      do: *add-addr-attrs
291    -
292      name: get-addr
293      doc: Get endpoint information
294      attribute-set: attr
295      dont-validate: [ strict ]
296      do: &get-addr-attrs
297        request:
298          attributes:
299           - addr
300           - token
301        reply:
302          attributes:
303           - addr
304      dump:
305        reply:
306         attributes:
307           - addr
308    -
309      name:  flush-addrs
310      doc: flush addresses
311      attribute-set: endpoint
312      dont-validate: [ strict ]
313      flags: [ uns-admin-perm ]
314      do: *add-addr-attrs
315    -
316      name: set-limits
317      doc: Set protocol limits
318      attribute-set: attr
319      dont-validate: [ strict ]
320      flags: [ uns-admin-perm ]
321      do: &mptcp-limits
322        request:
323          attributes:
324            - rcv-add-addrs
325            - subflows
326    -
327      name: get-limits
328      doc: Get protocol limits
329      attribute-set: attr
330      dont-validate: [ strict ]
331      do: &mptcp-get-limits
332        request:
333           attributes:
334            - rcv-add-addrs
335            - subflows
336        reply:
337          attributes:
338            - rcv-add-addrs
339            - subflows
340    -
341      name: set-flags
342      doc: Change endpoint flags
343      attribute-set: attr
344      dont-validate: [ strict ]
345      flags: [ uns-admin-perm ]
346      do: &mptcp-set-flags
347        request:
348          attributes:
349            - addr
350            - token
351            - addr-remote
352    -
353      name: announce
354      doc: announce new sf
355      attribute-set: attr
356      dont-validate: [ strict ]
357      flags: [ uns-admin-perm ]
358      do: &announce-add
359        request:
360          attributes:
361            - addr
362            - token
363    -
364      name: remove
365      doc: announce removal
366      attribute-set: attr
367      dont-validate: [ strict ]
368      flags: [ uns-admin-perm ]
369      do:
370        request:
371         attributes:
372           - token
373           - loc-id
374    -
375      name: subflow-create
376      doc: todo
377      attribute-set: attr
378      dont-validate: [ strict ]
379      flags: [ uns-admin-perm ]
380      do: &sf-create
381        request:
382          attributes:
383            - addr
384            - token
385            - addr-remote
386    -
387      name: subflow-destroy
388      doc: todo
389      attribute-set: attr
390      dont-validate: [ strict ]
391      flags: [ uns-admin-perm ]
392      do: *sf-create
393