linux/Documentation/netlink/specs/mptcp_pm.yaml

# 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