.. SPDX-License-Identifier: GPL-2.0
.. NOTE: This document was auto-generated.


=========================================
Family ``mptcp_pm`` netlink specification
=========================================


.. contents:: :depth: 3


-------
Summary
-------


Multipath TCP.

----------
Operations
----------


.. _mptcp_pm-operation-unspec:

unspec
======
unused

:value: 0


.. _mptcp_pm-operation-add-addr:

add-addr
========
Add endpoint

:attribute-set: :ref:`mptcp_pm-attribute-set-endpoint`
:dont-validate: ['strict']
:flags: [``uns-admin-perm``]
:do:
    **request**
        :attributes: [``addr``]



.. _mptcp_pm-operation-del-addr:

del-addr
========
Delete endpoint

:attribute-set: :ref:`mptcp_pm-attribute-set-endpoint`
:dont-validate: ['strict']
:flags: [``uns-admin-perm``]
:do:
    **request**
        :attributes: [``addr``]



.. _mptcp_pm-operation-get-addr:

get-addr
========
Get endpoint information

:attribute-set: :ref:`mptcp_pm-attribute-set-attr`
:dont-validate: ['strict']
:do:
    **request**
        :attributes: [``addr``, ``token``]

    **reply**
        :attributes: [``addr``]

:dump:
    **reply**
        :attributes: [``addr``]



.. _mptcp_pm-operation-flush-addrs:

flush-addrs
===========
Flush addresses

:attribute-set: :ref:`mptcp_pm-attribute-set-endpoint`
:dont-validate: ['strict']
:flags: [``uns-admin-perm``]
:do:
    **request**
        :attributes: [``addr``]



.. _mptcp_pm-operation-set-limits:

set-limits
==========
Set protocol limits

:attribute-set: :ref:`mptcp_pm-attribute-set-attr`
:dont-validate: ['strict']
:flags: [``uns-admin-perm``]
:do:
    **request**
        :attributes: [``rcv-add-addrs``, ``subflows``]



.. _mptcp_pm-operation-get-limits:

get-limits
==========
Get protocol limits

:attribute-set: :ref:`mptcp_pm-attribute-set-attr`
:dont-validate: ['strict']
:do:
    **request**
        :attributes: [``rcv-add-addrs``, ``subflows``]

    **reply**
        :attributes: [``rcv-add-addrs``, ``subflows``]



.. _mptcp_pm-operation-set-flags:

set-flags
=========
Change endpoint flags

:attribute-set: :ref:`mptcp_pm-attribute-set-attr`
:dont-validate: ['strict']
:flags: [``uns-admin-perm``]
:do:
    **request**
        :attributes: [``addr``, ``token``, ``addr-remote``]



.. _mptcp_pm-operation-announce:

announce
========
Announce new address

:attribute-set: :ref:`mptcp_pm-attribute-set-attr`
:dont-validate: ['strict']
:flags: [``uns-admin-perm``]
:do:
    **request**
        :attributes: [``addr``, ``token``]



.. _mptcp_pm-operation-remove:

remove
======
Announce removal

:attribute-set: :ref:`mptcp_pm-attribute-set-attr`
:dont-validate: ['strict']
:flags: [``uns-admin-perm``]
:do:
    **request**
        :attributes: [``token``, ``loc-id``]



.. _mptcp_pm-operation-subflow-create:

subflow-create
==============
Create subflow

:attribute-set: :ref:`mptcp_pm-attribute-set-attr`
:dont-validate: ['strict']
:flags: [``uns-admin-perm``]
:do:
    **request**
        :attributes: [``addr``, ``token``, ``addr-remote``]



.. _mptcp_pm-operation-subflow-destroy:

subflow-destroy
===============
Destroy subflow

:attribute-set: :ref:`mptcp_pm-attribute-set-attr`
:dont-validate: ['strict']
:flags: [``uns-admin-perm``]
:do:
    **request**
        :attributes: [``addr``, ``token``, ``addr-remote``]




-----------
Definitions
-----------


.. _mptcp_pm-definition-event-type:

event-type
==========
:type: enum
:enum-name: mptcp-event-type
:name-prefix: mptcp-event-


:entries:
    :unspec: unused event
    :created: 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. Attributes: token, family, saddr4 | saddr6, daddr4 | daddr6, sport, dport, server-side.
    :established: A MPTCP connection is established (can start new subflows). Attributes: token, family, saddr4 | saddr6, daddr4 | daddr6, sport, dport, server-side.
    :closed: A MPTCP connection has stopped. Attribute: token.
    :announced: A new address has been announced by the peer. Attributes: token, rem_id, family, daddr4 | daddr6 [, dport].
    :removed: An address has been lost by the peer. Attributes: token, rem_id.
    :sub-established: A new subflow has been established. 'error' should not be set. Attributes: token, family, loc_id, rem_id, saddr4 | saddr6, daddr4 | daddr6, sport, dport, backup, if_idx [, error].
    :sub-closed: A subflow has been closed. An error (copy of sk_err) could be set if an error has been detected for this subflow. Attributes: token, family, loc_id, rem_id, saddr4 | saddr6, daddr4 | daddr6, sport, dport, backup, if_idx [, error].
    :sub-priority: The priority of a subflow has changed. 'error' should not be set. Attributes: token, family, loc_id, rem_id, saddr4 | saddr6, daddr4 | daddr6, sport, dport, backup, if_idx [, error].
    :listener-created: A new PM listener is created. Attributes: family, sport, saddr4 | saddr6.
    :listener-closed: A PM listener is closed. Attributes: family, sport, saddr4 | saddr6.



--------------
Attribute sets
--------------


.. _mptcp_pm-attribute-set-address:

address
=======
unspec (``unused``)
~~~~~~~~~~~~~~~~~~~
:value: 0


family (``u16``)
~~~~~~~~~~~~~~~~


id (``u8``)
~~~~~~~~~~~


addr4 (``u32``)
~~~~~~~~~~~~~~~
:byte-order: big-endian


addr6 (``binary``)
~~~~~~~~~~~~~~~~~~


port (``u16``)
~~~~~~~~~~~~~~


flags (``u32``)
~~~~~~~~~~~~~~~


if-idx (``s32``)
~~~~~~~~~~~~~~~~


.. _mptcp_pm-attribute-set-subflow-attribute:

subflow-attribute
=================
unspec (``unused``)
~~~~~~~~~~~~~~~~~~~
:value: 0


token-rem (``u32``)
~~~~~~~~~~~~~~~~~~~


token-loc (``u32``)
~~~~~~~~~~~~~~~~~~~


relwrite-seq (``u32``)
~~~~~~~~~~~~~~~~~~~~~~


map-seq (``u64``)
~~~~~~~~~~~~~~~~~


map-sfseq (``u32``)
~~~~~~~~~~~~~~~~~~~


ssn-offset (``u32``)
~~~~~~~~~~~~~~~~~~~~


map-datalen (``u16``)
~~~~~~~~~~~~~~~~~~~~~


flags (``u32``)
~~~~~~~~~~~~~~~


id-rem (``u8``)
~~~~~~~~~~~~~~~


id-loc (``u8``)
~~~~~~~~~~~~~~~


pad (``pad``)
~~~~~~~~~~~~~


.. _mptcp_pm-attribute-set-endpoint:

endpoint
========
addr (``nest``)
~~~~~~~~~~~~~~~
:nested-attributes: :ref:`mptcp_pm-attribute-set-address`


.. _mptcp_pm-attribute-set-attr:

attr
====
unspec (``unused``)
~~~~~~~~~~~~~~~~~~~
:value: 0


addr (``nest``)
~~~~~~~~~~~~~~~
:nested-attributes: :ref:`mptcp_pm-attribute-set-address`


rcv-add-addrs (``u32``)
~~~~~~~~~~~~~~~~~~~~~~~


subflows (``u32``)
~~~~~~~~~~~~~~~~~~


token (``u32``)
~~~~~~~~~~~~~~~


loc-id (``u8``)
~~~~~~~~~~~~~~~


addr-remote (``nest``)
~~~~~~~~~~~~~~~~~~~~~~
:nested-attributes: :ref:`mptcp_pm-attribute-set-address`


.. _mptcp_pm-attribute-set-event-attr:

event-attr
==========
unspec (``unused``)
~~~~~~~~~~~~~~~~~~~
:value: 0


token (``u32``)
~~~~~~~~~~~~~~~


family (``u16``)
~~~~~~~~~~~~~~~~


loc-id (``u8``)
~~~~~~~~~~~~~~~


rem-id (``u8``)
~~~~~~~~~~~~~~~


saddr4 (``u32``)
~~~~~~~~~~~~~~~~
:byte-order: big-endian


saddr6 (``binary``)
~~~~~~~~~~~~~~~~~~~


daddr4 (``u32``)
~~~~~~~~~~~~~~~~
:byte-order: big-endian


daddr6 (``binary``)
~~~~~~~~~~~~~~~~~~~


sport (``u16``)
~~~~~~~~~~~~~~~
:byte-order: big-endian


dport (``u16``)
~~~~~~~~~~~~~~~
:byte-order: big-endian


backup (``u8``)
~~~~~~~~~~~~~~~


error (``u8``)
~~~~~~~~~~~~~~


flags (``u16``)
~~~~~~~~~~~~~~~


timeout (``u32``)
~~~~~~~~~~~~~~~~~


if_idx (``u32``)
~~~~~~~~~~~~~~~~


reset-reason (``u32``)
~~~~~~~~~~~~~~~~~~~~~~


reset-flags (``u32``)
~~~~~~~~~~~~~~~~~~~~~


server-side (``u8``)
~~~~~~~~~~~~~~~~~~~~

