# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)

name: rt-addr
protocol: netlink-raw
protonum: 0

doc:
  Address configuration over rtnetlink.

definitions:
  -
    name: ifaddrmsg
    type: struct
    members:
      -
        name: ifa-family
        type: u8
      -
        name: ifa-prefixlen
        type: u8
      -
        name: ifa-flags
        type: u8
        enum: ifa-flags
        enum-as-flags: true
      -
        name: ifa-scope
        type: u8
      -
        name: ifa-index
        type: u32
  -
    name: ifa-cacheinfo
    type: struct
    members:
      -
        name: ifa-prefered
        type: u32
      -
        name: ifa-valid
        type: u32
      -
        name: cstamp
        type: u32
      -
        name: tstamp
        type: u32

  -
    name: ifa-flags
    type: flags
    entries:
      -
        name: secondary
      -
        name: nodad
      -
        name: optimistic
      -
        name: dadfailed
      -
        name: homeaddress
      -
        name: deprecated
      -
        name: tentative
      -
        name: permanent
      -
        name: managetempaddr
      -
        name: noprefixroute
      -
        name: mcautojoin
      -
        name: stable-privacy

attribute-sets:
  -
    name: addr-attrs
    attributes:
      -
        name: ifa-address
        type: binary
        display-hint: ipv4
      -
        name: ifa-local
        type: binary
        display-hint: ipv4
      -
        name: ifa-label
        type: string
      -
        name: ifa-broadcast
        type: binary
        display-hint: ipv4
      -
        name: ifa-anycast
        type: binary
      -
        name: ifa-cacheinfo
        type: binary
        struct: ifa-cacheinfo
      -
        name: ifa-multicast
        type: binary
      -
        name: ifa-flags
        type: u32
        enum: ifa-flags
        enum-as-flags: true
      -
        name: ifa-rt-priority
        type: u32
      -
        name: ifa-target-netnsid
        type: binary
      -
        name: ifa-proto
        type: u8


operations:
  fixed-header: ifaddrmsg
  enum-model: directional
  list:
    -
      name: newaddr
      doc: Add new address
      attribute-set: addr-attrs
      do:
        request:
          value: 20
          attributes: &ifaddr-all
            - ifa-family
            - ifa-flags
            - ifa-prefixlen
            - ifa-scope
            - ifa-index
            - ifa-address
            - ifa-label
            - ifa-local
            - ifa-cacheinfo
    -
      name: deladdr
      doc: Remove address
      attribute-set: addr-attrs
      do:
        request:
          value: 21
          attributes:
            - ifa-family
            - ifa-flags
            - ifa-prefixlen
            - ifa-scope
            - ifa-index
            - ifa-address
            - ifa-local
    -
      name: getaddr
      doc: Dump address information.
      attribute-set: addr-attrs
      dump:
        request:
          value: 22
          attributes:
            - ifa-index
        reply:
          value: 20
          attributes: *ifaddr-all

mcast-groups:
  list:
    -
      name: rtnlgrp-ipv4-ifaddr
      value: 5
    -
      name: rtnlgrp-ipv6-ifaddr
      value: 9