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


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


.. contents::


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


Multipath TCP.

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



unspec
======
unused

:value: 0



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

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




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

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




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

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

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

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




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

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




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

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




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

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

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




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

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




announce
========
announce new sf

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




remove
======
announce removal

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




subflow-create
==============
todo

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




subflow-destroy
===============
todo

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




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



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


:entries:
    :unspec: unused event
    :created: 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.
    :established: token, family, saddr4 | saddr6, daddr4 | daddr6, sport, dport A MPTCP connection is established (can start new subflows).
    :closed: token A MPTCP connection has stopped.
    :announced: token, rem_id, family, daddr4 | daddr6 [, dport] A new address has been announced by the peer.
    :removed: token, rem_id An address has been lost by the peer.
    :sub-established: 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.
    :sub-closed: 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.
    :sub-priority: 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.
    :listener-created: family, sport, saddr4 | saddr6 A new PM listener is created.
    :listener-closed: family, sport, saddr4 | saddr6 A PM listener is closed.



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



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


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


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


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


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


**port** (``u16``)
~~~~~~~~~~~~~~~~~~
        :byte-order: big-endian


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


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



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``)
~~~~~~~~~~~~~~~~~



endpoint
========
**addr** (``nest``)
~~~~~~~~~~~~~~~~~~~
        :nested-attributes: address



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


**addr** (``nest``)
~~~~~~~~~~~~~~~~~~~
        :nested-attributes: address


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


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


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


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


**addr-remote** (``nest``)
~~~~~~~~~~~~~~~~~~~~~~~~~~
        :nested-attributes: address



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``)
~~~~~~~~~~~~~~~~~~~~~~~~