Documentation / netlink / specs / mptcp_pm.yaml


Based on kernel version 6.13. Page generated on 2025-01-21 08:21 EST.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394
# 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: >-
        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.
     -
      name: established
      doc: >-
        A MPTCP connection is established (can start new subflows).
        Attributes: token, family, saddr4 | saddr6, daddr4 | daddr6, sport,
        dport, server-side.
     -
      name: closed
      doc: >-
        A MPTCP connection has stopped.
        Attribute: token.
     -
      name: announced
      value: 6
      doc: >-
        A new address has been announced by the peer.
        Attributes: token, rem_id, family, daddr4 | daddr6 [, dport].
     -
      name: removed
      doc: >-
        An address has been lost by the peer.
        Attributes: token, rem_id.
     -
      name: sub-established
      value: 10
      doc: >-
        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].
     -
      name: sub-closed
      doc: >-
        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].
     -
      name: sub-priority
      value: 13
      doc: >-
        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].
     -
      name: listener-created
      value: 15
      doc: >-
        A new PM listener is created.
        Attributes: family, sport, saddr4 | saddr6.
     -
      name: listener-closed
      doc: >-
        A PM listener is closed.
        Attributes: family, sport, saddr4 | saddr6.

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 ]
      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 address
      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: Create subflow
      attribute-set: attr
      dont-validate: [ strict ]
      flags: [ uns-admin-perm ]
      do: &sf-create
        request:
          attributes:
            - addr
            - token
            - addr-remote
    -
      name: subflow-destroy
      doc: Destroy subflow
      attribute-set: attr
      dont-validate: [ strict ]
      flags: [ uns-admin-perm ]
      do: *sf-create