# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
name: mptcp_pm
protocol: genetlink-legacy
doc: Multipath TCP.
c-family-name: mptcp-pm-name
c-version-name: mptcp-pm-ver
max-by-define: true
kernel-policy: per-op
cmd-cnt-name: --mptcp-pm-cmd-after-last
definitions:
-
type: enum
name: event-type
enum-name: mptcp-event-type
name-prefix: mptcp-event-
entries:
-
name: unspec
doc: unused event
-
name: created
doc:
token, family, saddr4 | saddr6, daddr4 | daddr6, sport, dport
A new MPTCP connection has been created. It is the good time to
allocate memory and send ADD_ADDR if needed. Depending on the
traffic-patterns it can take a long time until the
MPTCP_EVENT_ESTABLISHED is sent.
-
name: established
doc:
token, family, saddr4 | saddr6, daddr4 | daddr6, sport, dport
A MPTCP connection is established (can start new subflows).
-
name: closed
doc:
token
A MPTCP connection has stopped.
-
name: announced
value: 6
doc:
token, rem_id, family, daddr4 | daddr6 [, dport]
A new address has been announced by the peer.
-
name: removed
doc:
token, rem_id
An address has been lost by the peer.
-
name: sub-established
value: 10
doc:
token, family, loc_id, rem_id, saddr4 | saddr6, daddr4 | daddr6, sport,
dport, backup, if_idx [, error]
A new subflow has been established. 'error' should not be set.
-
name: sub-closed
doc:
token, family, loc_id, rem_id, saddr4 | saddr6, daddr4 | daddr6, sport,
dport, backup, if_idx [, error]
A subflow has been closed. An error (copy of sk_err) could be set if an
error has been detected for this subflow.
-
name: sub-priority
value: 13
doc:
token, family, loc_id, rem_id, saddr4 | saddr6, daddr4 | daddr6, sport,
dport, backup, if_idx [, error]
The priority of a subflow has changed. 'error' should not be set.
-
name: listener-created
value: 15
doc:
family, sport, saddr4 | saddr6
A new PM listener is created.
-
name: listener-closed
doc:
family, sport, saddr4 | saddr6
A PM listener is closed.
attribute-sets:
-
name: address
name-prefix: mptcp-pm-addr-attr-
attributes:
-
name: unspec
type: unused
value: 0
-
name: family
type: u16
-
name: id
type: u8
-
name: addr4
type: u32
byte-order: big-endian
-
name: addr6
type: binary
checks:
exact-len: 16
-
name: port
type: u16
-
name: flags
type: u32
-
name: if-idx
type: s32
-
name: subflow-attribute
name-prefix: mptcp-subflow-attr-
attributes:
-
name: unspec
type: unused
value: 0
-
name: token-rem
type: u32
-
name: token-loc
type: u32
-
name: relwrite-seq
type: u32
-
name: map-seq
type: u64
-
name: map-sfseq
type: u32
-
name: ssn-offset
type: u32
-
name: map-datalen
type: u16
-
name: flags
type: u32
-
name: id-rem
type: u8
-
name: id-loc
type: u8
-
name: pad
type: pad
-
name: endpoint
name-prefix: mptcp-pm-endpoint-
attributes:
-
name: addr
type: nest
nested-attributes: address
-
name: attr
name-prefix: mptcp-pm-attr-
attr-cnt-name: --mptcp-attr-after-last
attributes:
-
name: unspec
type: unused
value: 0
-
name: addr
type: nest
nested-attributes: address
-
name: rcv-add-addrs
type: u32
-
name: subflows
type: u32
-
name: token
type: u32
-
name: loc-id
type: u8
-
name: addr-remote
type: nest
nested-attributes: address
-
name: event-attr
enum-name: mptcp-event-attr
name-prefix: mptcp-attr-
attributes:
-
name: unspec
type: unused
value: 0
-
name: token
type: u32
-
name: family
type: u16
-
name: loc-id
type: u8
-
name: rem-id
type: u8
-
name: saddr4
type: u32
byte-order: big-endian
-
name: saddr6
type: binary
checks:
min-len: 16
-
name: daddr4
type: u32
byte-order: big-endian
-
name: daddr6
type: binary
checks:
min-len: 16
-
name: sport
type: u16
byte-order: big-endian
-
name: dport
type: u16
byte-order: big-endian
-
name: backup
type: u8
-
name: error
type: u8
-
name: flags
type: u16
-
name: timeout
type: u32
-
name: if_idx
type: u32
-
name: reset-reason
type: u32
-
name: reset-flags
type: u32
-
name: server-side
type: u8
operations:
list:
-
name: unspec
doc: unused
value: 0
-
name: add-addr
doc: Add endpoint
attribute-set: endpoint
dont-validate: [ strict ]
flags: [ uns-admin-perm ]
do: &add-addr-attrs
request:
attributes:
- addr
-
name: del-addr
doc: Delete endpoint
attribute-set: endpoint
dont-validate: [ strict ]
flags: [ uns-admin-perm ]
do: *add-addr-attrs
-
name: get-addr
doc: Get endpoint information
attribute-set: attr
dont-validate: [ strict ]
flags: [ uns-admin-perm ]
do: &get-addr-attrs
request:
attributes:
- addr
- token
reply:
attributes:
- addr
dump:
reply:
attributes:
- addr
-
name: flush-addrs
doc: flush addresses
attribute-set: endpoint
dont-validate: [ strict ]
flags: [ uns-admin-perm ]
do: *add-addr-attrs
-
name: set-limits
doc: Set protocol limits
attribute-set: attr
dont-validate: [ strict ]
flags: [ uns-admin-perm ]
do: &mptcp-limits
request:
attributes:
- rcv-add-addrs
- subflows
-
name: get-limits
doc: Get protocol limits
attribute-set: attr
dont-validate: [ strict ]
do: &mptcp-get-limits
request:
attributes:
- rcv-add-addrs
- subflows
reply:
attributes:
- rcv-add-addrs
- subflows
-
name: set-flags
doc: Change endpoint flags
attribute-set: attr
dont-validate: [ strict ]
flags: [ uns-admin-perm ]
do: &mptcp-set-flags
request:
attributes:
- addr
- token
- addr-remote
-
name: announce
doc: announce new sf
attribute-set: attr
dont-validate: [ strict ]
flags: [ uns-admin-perm ]
do: &announce-add
request:
attributes:
- addr
- token
-
name: remove
doc: announce removal
attribute-set: attr
dont-validate: [ strict ]
flags: [ uns-admin-perm ]
do:
request:
attributes:
- token
- loc-id
-
name: subflow-create
doc: todo
attribute-set: attr
dont-validate: [ strict ]
flags: [ uns-admin-perm ]
do: &sf-create
request:
attributes:
- addr
- token
- addr-remote
-
name: subflow-destroy
doc: todo
attribute-set: attr
dont-validate: [ strict ]
flags: [ uns-admin-perm ]
do: *sf-create