$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