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        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
269operations:
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
394