Blob Blame History Raw
$schema: http://json-schema.org/draft-04/schema#
type: object
properties:
  capabilities:
    type: array
    items:
      type: string
  interfaces:
    type: array
    items:
      type: object
      required:
        - name
      allOf:
        - $ref: "#/definitions/interface-base/rw"
        - $ref: "#/definitions/interface-base/ro"
        - $ref: "#/definitions/interface-ip/all"
        - $ref: "#/definitions/lldp/rw"
        - $ref: "#/definitions/lldp/ro"
        - oneOf:
            - "$ref": "#/definitions/interface-unknown/rw"
            - "$ref": "#/definitions/interface-ethernet/rw"
            - "$ref": "#/definitions/interface-bond/rw"
            - "$ref": "#/definitions/interface-linux-bridge/all"
            - "$ref": "#/definitions/interface-ovs-bridge/all"
            - "$ref": "#/definitions/interface-ovs-interface/rw"
            - "$ref": "#/definitions/interface-dummy/rw"
            - "$ref": "#/definitions/interface-vlan/rw"
            - "$ref": "#/definitions/interface-vxlan/rw"
            - "$ref": "#/definitions/interface-team/rw"
            - "$ref": "#/definitions/interface-other/rw"
  routes:
    type: object
    properties:
      config:
        type: array
        items:
          $ref: "#/definitions/route"
      running:
        type: array
        items:
          $ref: "#/definitions/route"
  route-rules:
    type: object
    properties:
      config:
        type: array
        items:
          $ref: "#/definitions/route-rule"
  dns-resolver:
    type: object
    properties:
      config:
        items:
          $ref: "#/definitions/dns"
      running:
        items:
          $ref: "#/definitions/dns"

definitions:
  types:
    status:
      type: string
      enum:
        - up
        - down
    mac-address:
      type: string
      pattern: "^([a-fA-F0-9]{2}:){3,31}[a-fA-F0-9]{2}$"
    bridge-vlan-tag:
      type: integer
      minimum: 0
      maximum: 4095

  # Interface types
  interface-base:
    all:
      allOf:
      - $ref: "#/definitions/interface-base/rw"
      - $ref: "#/definitions/interface-base/ro"
    rw:
      properties:
        description:
          type: string
        name:
          type: string
        state:
          type: string
          enum:
            - absent
            - up
            - down
        mac-address:
          $ref: "#/definitions/types/mac-address"
        mtu:
          type: integer
          minimum: 0
    ro:
      properties:
        if-index:
          type: integer
          minimum: 0
        admin-status:
          $ref: "#/definitions/types/status"
        link-status:
          $ref: "#/definitions/types/status"
        phys-address:
          $ref: "#/definitions/types/mac-address"
        higher-layer-if:
          type: string
        lower-layer-if:
          type: string
        statistics:
          properties:
            in-broadcast-pkts:
              type: integer
              minimum: 0
            in-discards:
              type: integer
              minimum: 0
            in-errors:
              type: integer
              minimum: 0
            in-multicast-pkts:
              type: integer
              minimum: 0
            in-octets:
              type: integer
              minimum: 0
            in-unicast-pkts:
              type: integer
              minimum: 0
            out-broadcast-pkts:
              type: integer
              minimum: 0
            out-discards:
              type: integer
              minimum: 0
            out-errors:
              type: integer
              minimum: 0
            out-multicast-pkts:
              type: integer
              minimum: 0
            out-octets:
              type: integer
              minimum: 0
            out-unicast-pkts:
              type: integer
              minimum: 0
  interface-unknown:
    rw:
      properties:
        type:
          type: string
          enum:
            - unknown
  interface-ethernet:
    rw:
      properties:
        type:
          type: string
          enum:
          - ethernet
        auto-negotiation:
          type: boolean
        duplex:
          type: string
          enum:
            - full
            - half
        speed:
          type: integer
          minimum: 0
        flow-control:
          type: boolean
        sr-iov:
          type: object
          properties:
            total-vfs:
              type: integer
              minimum: 0
            vfs:
              type: array
              items:
                type: object
                properties:
                  id:
                    type: integer
                    minimum: 0
                  mac-address:
                    $ref: "#/definitions/types/mac-address"
                  spoof-check:
                    type: boolean
                  trust:
                    type: boolean
                  min-tx-rate:
                    type: integer
                    minimum: 0
                  max-tx-rate:
                    type: integer
                    minimum: 0
                required:
                  - id
  interface-vlan:
    rw:
      properties:
        type:
          type: string
          enum:
            - vlan
        vlan:
          type: object
          properties:
            id:
              type: integer
              minimum: 0
              maximum: 4095
            base-iface:
              type: string
          required:
            - id
            - base-iface
  interface-vxlan:
    rw:
      properties:
        type:
          type: string
          enum:
            - vxlan
        vxlan:
          type: object
          properties:
            id:
              type: integer
              minimum: 0
              maximum: 16777215
            remote:
              type: string
            destination-port:
              type: integer
            base-iface:
              type: string

  interface-bond:
    rw:
      properties:
        type:
          type: string
          enum:
            - bond
        link-aggregation:
          type: object
          properties:
            mode:
              type: string
            slaves:
              type: array
              items:
                type: string
            options:
              type: object
  interface-linux-bridge:
    all:
      allOf:
        - $ref: "#/definitions/interface-linux-bridge/rw"
        - $ref: "#/definitions/interface-linux-bridge/ro"
    ro:
      properties:
        bridge:
          type: object
          properties:
            options:
              type: object
              properties:
                gc-timer:
                  type: integer
                hello-timer:
                  type: integer
    rw:
      properties:
        type:
          type: string
          enum:
          - linux-bridge
        bridge:
          type: object
          properties:
            port:
              type: array
              items:
                type: object
                properties:
                  name:
                    type: string
                  stp-priority:
                    type: integer
                  stp-path-cost:
                    type: integer
                  stp-hairpin-mode:
                    type: boolean
                  vlan:
                    type: object
                    properties:
                      mode:
                        type: string
                        enum:
                          - trunk
                          - access
                      trunk-tags:
                        type: array
                        items:
                          $ref: "#/definitions/bridge-port-vlan"
                      tag:
                        $ref: "#/definitions/types/bridge-vlan-tag"
                      enable-native:
                        type: boolean
            options:
              type: object
              properties:
                mac-ageing-time:
                  type: integer
                group-forward-mask:
                  type: integer
                group-addr:
                  $ref: "#/definitions/types/mac-address"
                hash-max:
                  type: integer
                multicast-snooping:
                  type: boolean
                multicast-router:
                  type: integer
                multicast-last-member-count:
                  type: integer
                multicast-last-member-interval:
                  type: integer
                multicast-membership-interval:
                  type: integer
                multicast-querier:
                  type: boolean
                multicast-querier-interval:
                  type: integer
                multicast-query-use-ifaddr:
                  type: boolean
                multicast-query-interval:
                  type: integer
                multicast-query-response-interval:
                  type: integer
                multicast-router:
                  type: integer
                multicast-startup-query-count:
                  type: integer
                multicast-startup-query-interval:
                  type: integer
                stp:
                  type: object
                  properties:
                    enabled:
                      type: boolean
                    priority:
                      type: integer
                    forward-delay:
                      type: integer
                    hello-time:
                      type: integer
                    max-age:
                      type: integer
  interface-ovs-bridge:
    all:
      allOf:
        - $ref: "#/definitions/interface-ovs-bridge/rw"
        - $ref: "#/definitions/interface-ovs-bridge/ro"
    rw:
      properties:
        type:
          type: string
          enum:
          - ovs-bridge
        ovs-db:
          type: object
        bridge:
          type: object
          properties:
            port:
              type: array
              items:
                type: object
                properties:
                  name:
                    type: string
                  vlan:
                    type: object
                    properties:
                      mode:
                        type: string
                        enum:
                          - trunk
                          - access
                      trunk-tags:
                        type: array
                        items:
                          $ref: "#/definitions/bridge-port-vlan"
                      tag:
                        $ref: "#/definitions/types/bridge-vlan-tag"
                      enable-native:
                        type: boolean
                  link-aggregation:
                    type: object
                    properties:
                      mode:
                        type: string
                      slaves:
                        type: array
                        items:
                          type: object
                          properties:
                            name:
                              type: string
            options:
              type: object
              properties:
                stp:
                  type: boolean
                rstp:
                  type: boolean
                fail-mode:
                  type: string
                mcast-snooping-enable:
                  type: boolean
    ro:
      properties:
        bridge:
          type: object
          properties:
            port:
              type: array
              items:
                type: object
                properties:
                  learned-mac-address:
                    type: array
                    items:
                      $ref: "#/definitions/types/mac-address"
  interface-ovs-interface:
    rw:
      properties:
        type:
          type: string
          enum:
          - ovs-interface
        ovs-db:
          type: object
        patch:
          type: object
          properties:
            peer:
              type: string
  interface-dummy:
    rw:
      properties:
        type:
          type: string
          enum:
          - dummy
  interface-ip:
    all:
      allOf:
      - $ref: "#/definitions/interface-ip/rw"
      - $ref: "#/definitions/interface-ip/ro"
    rw:
      properties:
        ipv4:
          type: object
          properties:
            enabled:
              type: boolean
            dhcp:
              type: boolean
            auto-routes:
              type: boolean
            auto-gateway:
              type: boolean
            auto-dns:
              type: boolean
            address:
              type: array
              items:
                type: object
                properties:
                  ip:
                    type: string
                  prefix-length:
                    type: integer
                  netmask:
                    type: string
            neighbor:
              type: array
              items:
                type: object
                properties:
                  ip:
                    type: string
                  link-layer-address:
                    type: string
            forwarding:
              type: boolean
        ipv6:
          type: object
          properties:
            enabled:
              type: boolean
            autoconf:
              type: boolean
            dhcp:
              type: boolean
            auto-routes:
              type: boolean
            auto-gateway:
              type: boolean
            auto-dns:
              type: boolean
            address:
              type: array
              items:
                type: object
                properties:
                  ip:
                    type: string
                  prefix-length:
                    type: integer
            neighbor:
              type: array
              items:
                type: object
                properties:
                  ip:
                    type: string
                  link-layer-address:
                    type: string
            forwarding:
              type: boolean
            dup-addr-detect-transmits:
              type: integer
    ro:
      properties:
        ipv4:
          type: object
          properties:
            address:
              type: array
              items:
                type: object
                properties:
                  origin:
                    type: string
            neighbor:
              type: array
              items:
                type: object
                properties:
                  origin:
                    type: string
        ipv6:
          type: object
          properties:
            address:
              type: array
              items:
                type: object
                properties:
                  origin:
                    type: string
                  status:
                    type: string
            neighbor:
              type: array
              items:
                type: object
                properties:
                  origin:
                    type: string
                  is-router:
                    type: boolean
                  state:
                    type: string
  interface-team:
    rw:
      properties:
        type:
          type: string
          enum:
          - team
        team:
          type: object
          properties:
            ports:
              type: array
              items:
                type: object
                properties:
                  name:
                    type: string
            runner:
              type: object
              properties:
                name:
                  type: string

  interface-other:
    rw:
      properties:
        type:
          type: string
          enum:
          - other
  route:
    type: object
    properties:
      state:
        type: string
        enum:
          - absent
      table-id:
        type: integer
      metric:
        type: integer
      destination:
        type: string
      next-hop-interface:
        type: string
      next-hop-address:
        type: string
  dns:
    type: object
    properties:
      server:
        type: array
        items:
          type: string
      search:
        type: array
        items:
          type: string
  bridge-port-vlan:
    type: object
    properties:
      id:
        $ref: "#/definitions/types/bridge-vlan-tag"
      id-range:
        type: object
        properties:
          min:
            $ref: "#/definitions/types/bridge-vlan-tag"
          max:
            $ref: "#/definitions/types/bridge-vlan-tag"
  route-rule:
    type: object
    properties:
      from:
        type: string
      to:
        type: string
      priority:
        type: integer
      route-table:
        type: integer
  lldp:
    ro:
      properties:
        neighbors:
          type: array
          items:
            type: object
    rw:
      properties:
        enabled:
          type: boolean