module ovsdb {
    yang-version 1;
    namespace "urn:opendaylight:params:xml:ns:yang:ovsdb";
    prefix "southbound";

    import network-topology {prefix "topo"; revision-date "2013-10-21"; }
    import yang-ext { prefix "ext"; }
    import ietf-inet-types { prefix inet; revision-date 2013-07-15; }
    import overlay { prefix overlay; }
    import ietf-yang-types { prefix yang; revision-date "2013-07-15";}
    import opendaylight-l2-types { prefix ethertype; revision-date "2013-08-27";}

    revision "2015-01-05" {
        description "Initial revision of southbound model";
    }

    typedef ovsdb-termination-point-ref {
        description "A reference to an ovsdb termination point";
        type instance-identifier;
    }

    typedef ovsdb-bridge-ref {
        description "A reference to an ovsdb bridge";
        type instance-identifier;
    }

    typedef ovsdb-node-ref {
        description "A reference to an ovsdb node";
        type instance-identifier;
    }

    typedef flow-node-ref {
        description "A reference to a flow node";
        type instance-identifier;
    }

    typedef ovsdb-qos-ref {
        description "A reference to a ovsdb QoS entry";
        type instance-identifier;
    }

    typedef ovsdb-queue-ref {
        description "A reference to an ovsdb queue entry";
        type instance-identifier;
    }

    typedef ovsdb-bridge-name {
        type string;
    }

    typedef datapath-id {
        type string {
          pattern
            '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){7}';
        }
        description
          "The datapath-d type represents OpenFlow datapath-id .
        The canonical representation uses lowercase characters.

        In the value set and its semantics, this type is similar
        to the MacAddress textual convention of the SMIv2, but with
        16 extra bits";
        reference
          "Openflow 1.3.0 Spec
           IEEE 802: IEEE Standard for Local and Metropolitan Area
                Networks: Overview and Architecture
           RFC 2579: Textual Conventions for SMIv2";
    }

    identity datapath-type-base {
        description "Base identity for all OVSDB datapath types";
    }

    identity datapath-type-system {
        description "Datapath type for the kernel datapath";
        base datapath-type-base;
    }

    identity datapath-type-netdev {
        description "Datapath type for the userspace datapath";
        base datapath-type-base;
    }

    identity ovsdb-bridge-protocol-base {
        description "Base identity for all ovsdb-bridge-protocols";
    }

    identity ovsdb-bridge-protocol-openflow-10 {
        description "Ovsdb bridge protocol OpenFlow 1.0";
        base ovsdb-bridge-protocol-base;
    }

    identity ovsdb-bridge-protocol-openflow-11 {
        description "Ovsdb bridge protocol OpenFlow 1.1";
        base ovsdb-bridge-protocol-base;
    }

    identity ovsdb-bridge-protocol-openflow-12 {
        description "Ovsdb bridge protocol OpenFlow 1.2";
        base ovsdb-bridge-protocol-base;
    }

    identity ovsdb-bridge-protocol-openflow-13 {
        description "Ovsdb bridge protocol OpenFlow 1.3";
        base ovsdb-bridge-protocol-base;
    }

    identity ovsdb-bridge-protocol-openflow-14 {
        description "Ovsdb bridge protocol OpenFlow 1.4";
        base ovsdb-bridge-protocol-base;
    }

    identity ovsdb-bridge-protocol-openflow-15 {
        description "Ovsdb bridge protocol OpenFlow 1.5";
        base ovsdb-bridge-protocol-base;
    }

    identity ovsdb-fail-mode-base {
        description "Base identity for ovsdb-failmode";
    }

    identity ovsdb-fail-mode-standalone {
        description "Identity for ovsdb-failmode standalone";
        base ovsdb-fail-mode-base;
    }

    identity ovsdb-fail-mode-secure {
        description "Identity for ovsdb-failmode standalone";
        base ovsdb-fail-mode-base;
    }

    grouping ovsdb-bridge-attributes {
        leaf bridge-uuid {
            description "The unique identifier of the bridge";
            type yang:uuid;
        }
        leaf bridge-openflow-node-ref {
            description "A reference to the openflow node";
            type instance-identifier;
        }

        leaf bridge-name {
            description "The name of the bridge";
            type ovsdb-bridge-name;
        }
        list protocol-entry {
            key "protocol";
            leaf protocol {
                description "Protocol bridge should seek to speak to its controller";
                type identityref {
                    base ovsdb-bridge-protocol-base;
                }
            }
        }

        list controller-entry {
            description "Bridge controller info";
            key "target";
            leaf target {
                description "Uri telling bridge how to connect to controller";
                type inet:uri;
            }
            leaf controller-uuid {
                description "The unique identifier of the controller";
                type yang:uuid;
            }
            leaf is-connected {
                type boolean;
            }
            leaf max_backoff {
                description
                    "Maximum  number  of  milliseconds  to  wait between
                connection attempts";
                type uint32 {
                    range "1000..max";
                }
            }
            leaf inactivity_probe {
                description
                    "Maximum number of milliseconds of idle time on connection
                to controller before sending an inactivity probe message.
                A value of 0 disables inactivity probes.";
                type uint32;
            }

        }

        leaf datapath-id {
            description "Datapath-id of the bridge";
            type datapath-id;
        }

        leaf datapath-type {
            description "The datapath type of the bridge";
            type identityref {
                base datapath-type-base;
            }
        }

        leaf fail-mode {
            description "Failmode of the bridge";
            type identityref {
                base ovsdb-fail-mode-base;
            }
        }

        leaf flow-node {
            description "Flow node corresponding to this bridge";
            type flow-node-ref;
        }

        leaf managed-by {
            description "The OVSDB which this bridge belongs to";
            type ovsdb-node-ref;
        }

        leaf stp_enable {
            description
                "Enable spanning tree on the bridge. By default, STP is
                 disabled on bridges";
            type boolean;
        }

        list bridge-external-ids {
            description
               "Key-value pairs for use by external frameworks that integrate
            with Open vSwitch.

            external_ids : bridge-id: optional string

            A unique identifier of the bridge. On Citrix XenServer this
            will commonly be the same as external_ids:xs-network-uuids.

            external_ids : xs-network-uuids: optional string

            Semicolon-delimited set of universally unique identifier(s)
            for the network with which this bridge is associated on a
            Citrix XenServer host. The network identifiers are RFC 4122
            UUIDs as displayed by, e.g., xe network-list.";

            key "bridge-external-id-key";
            leaf bridge-external-id-key {
                description "external-id name/key";
                type string;
                mandatory true;
            }
            leaf bridge-external-id-value {
                description "bridge-external-id value";
                type string;
                mandatory true;
            }
        }

        list bridge-other-configs {
            description
               "Key-value pairs for configuring rarely used features.

            other_config : hwaddr: optional string
               An Ethernet address in the form xx:xx:xx:xx:xx:xx to set the
               hardware address of the local port and influence the datapath
               ID.

            other_config : forward-bpdu: optional string
               either true or false. Option to allow forwarding of BPDU frames when NORMAL
               action is invoked. Frames with reserved Ethernet
               addresses (e.g. STP BPDU) will be forwarded when this option
               is enabled and the switch is not providing that functionality.

            other_config : mac-aging-time: optional string
               containing an integer, at least 1 The maximum number of seconds to retain a
               MAC learning entry for which no packets have been seen. The
               default is currently 300 seconds (5 minutes). The value, if
               specified, is forced into a reasonable range, currently 15
                  to 3600 seconds.

            other_config : mac-table-size: optional string
               containing an integer, at least 1 The maximum number of MAC addresses to
               learn. The default is currently 2048. The value, if
               specified, is forced into a reasonable range, currently 10
               to 1,000,000.

            other_config : datapath-id: optional string
               Exactly 16 hex digits to set the OpenFlow datapath ID to a
               specific value. May not be all-zero.

            other_config : dp-desc: optional string
               Human readable description of datapath. It it a maximum
               256 byte-long free-form string to describe the datapath for
               debugging purposes.

            other_config : disable-in-band: optional string
               either true or false
               If set to true, disable in-band control on the bridge
               regardless of controller and manager settings.

            other_config : in-band-queue: optional string
               containing an integer, in range 0 to 4,294,967,295 A queue ID as a
               nonnegative integer.

             other_config : stp-system-id: optional string
                The bridge's STP identifier (the lower 48 bits of the
                bridge-id) in the form xx:xx:xx:xx:xx:xx. By default, the
                identifier is the MAC address of the bridge.

             other_config : stp-priority: optional string
                containing an integer, in range 0 to 65,535 The bridge's relative priority
                value for determining the root bridge (the upper 16 bits of
                the bridgeid).  A bridge with the lowest bridge-id is elected
                the root. By default, the priority is 0x8000.

             other_config : stp-hello-time: optional string
                containing an integer, in range 1 to 10 The interval between transmissions
                of hello messages by designated ports, in seconds. By default
                the hello interval is 2 seconds.

             other_config : stp-max-age: optional string
                containing an integer, in range 6 to 40 The maximum age of the information
                transmitted by the bridge when it is the root bridge, in
                seconds.  By default, the maximum age is 20 seconds.

             other_config : stp-forward-delay: optional string
                containing an integer, in range 4 to 30 The delay to wait between
                transitioning root and designated ports to forwarding, in
                seconds. By default, the forwarding delay is 15 seconds.

             other_config : mcast-snooping-aging-time: optional string,
                containing an integer, at least 1 The maximum number of
                seconds to retain a multicast snooping entry for which no
                packets have been seen. The default is currently 300
                seconds (5 minutes). The value, if specified, is forced into
                a reasonable range, currently 15 to 3600 seconds.

             other_config : mcast-snooping-table-size: optional string,
                containing an integer, at least 1 The maximum number of
                multicast snooping addresses to learn. The default is
                currently 2048.  The value, if specified, is forced into a
                reasonable range, currently 10 to 1,000,000.

             other_config : mcast-snooping-disable-flood-unregistered:
                optional string, either true or false If set to false,
                unregistered multicast packets are forwarded to all ports.
                If set to true, unregistered multicast packets are forwarded
                to ports connected to multicast routers.";

            key "bridge-other-config-key";
            leaf bridge-other-config-key {
                description "bridge-other-config name/key";
                type string;
            }
            leaf bridge-other-config-value {
                description "bridge-other-config value";
                type string;
            }
        }

        leaf auto-attach {
            description "The unique identifier of the auto_attach entry for this bridge.";
            type yang:uuid;
        }
    }

    grouping ovsdb-connection-info-attributes {
          leaf remote-ip {
            type inet:ip-address;
            description "Ovsdb Connection Remote IP";
          }
          leaf remote-port {
            type inet:port-number;
            description "Ovsdb Connection Remote Port Number";
          }
          leaf local-ip {
            type inet:ip-address;
            description "Ovsdb Connection Local IP";
          }
          leaf local-port {
            type inet:port-number;
            description "Ovsdb Connection Local Port Number IP";
          }
    }

    grouping ovsdb-node-attributes {
        description "Plugin will not allow multiple connections to the same device.
        If an application attempts to make more than one connection to the device by
        putting multiple entries in the config data store, then it is the responsibility
        of the application to clean the config data store";
        container connection-info{
            uses ovsdb-connection-info-attributes;
        }

        leaf db-version {
            description "The database schema version";
            type string;
        }

        leaf ovs-version {
            description "The Open_vSwitch version number";
            type string;
        }

        list managed-node-entry {
            key "bridge-ref";
            leaf bridge-ref {
                type ovsdb-bridge-ref;
            }
        }

        list datapath-type-entry {
            key "datapath-type";
            leaf datapath-type {
                description "Datapath types supported by OVSDB node";
                type identityref {
                    base datapath-type-base;
                }
            }
        }

        list interface-type-entry {
            key "interface-type";
            leaf interface-type {
                description "Interface types supported by OVSDB node";
                type identityref {
                    base interface-type-base;
                }
            }
        }

        list openvswitch-external-ids {
            description "Key-value pairs for use by external frameworks that integrate
                  with Open vSwitch.

            external_ids : system-id: optional string
               A unique identifier for the Open vSwitch's physical host.
               The form of the identifier depends on the type of the host.
               On a Citrix XenServer, this will likely be the same as
               external_ids:xs-system-uuid.

           external_ids : xs-system-uuid: optional string
               The Citrix XenServer universally unique identifier for the
                physical host as displayed by xe-host-list.";

            key "external-id-key";
            leaf external-id-key {
                description "external-id name/key";
                type string;
                mandatory true;
            }
            leaf external-id-value {
                description "external-id value";
                type string;
                mandatory true;
            }
        }

        list openvswitch-other-configs {
            description "Key-value pairs for configuring rarely used features.

            other_config : stats-update-interval: optional string
               This option will affect the update of the statistics column
               in the following tables: Port, Interface , Mirror.

            other_config : flow-restore-wait: optional string
               either true or false When ovs-vswitchd starts up, it has an empty flow
               table and therefore it handles all arriving packets in its
               default fashion according to its configuration, by
               dropping them or sending them to an OpenFlow controller or
               switching them as a standalone switch.

            other_config : flow-limit: optional string
               containing an integer, at least 0. The maximum number of flows allowed in
               the datapath flow table.

            other_config : n-dpdk-rxqs: optional string
               containing an integer, at least 1 Specifies the number of rx queues to be
               created for each dpdk interface. If not specified or
               specified to 0, one rx queue will be created for each dpdk
               interface by default.

            other_config : pmd-cpu-mask: optional string
               Specifies CPU mask for setting the cpu affinity of
               PMD (Poll Mode Driver) threads. Value should be in the form
               of hex string, similar to the dpdk EAL '-c COREMASK' option
               input or the 'taskset' mask input.

            other_config : n-handler-threads: optional string
               containing an integer, at least 1 Specifies the number of threads for
               software datapaths to use for handling new flows. The default
               the number of online CPU cores minus the number of
               revalidators.

            other_config : n-revalidator-threads: optional string,
               containing an integer, at least 1 Specifies the number of
               threads for software datapaths to use for revalidating flows
               in the datapath.

             other_config : enable-statistics: optional string
                either ture or false. Set this value to true to enable populating the
                statistics column or to false to explicitly disable it.";

            key "other-config-key";
            leaf other-config-key {
                description "other-config name/key";
                type string;
            }
            leaf other-config-value {
                description "other-config value";
                type string;
            }
         }

         list manager-entry {
            description "Node managers info";
            config false;
            key "target";
            leaf target {
                description "Uri that user set to connect to the controller";
                type inet:uri;
            }
            leaf connected {
                type boolean;
            }
            leaf number_of_connections {
                type uint32;
            }
        }

        list qos-entries {
            key "qos-id";
            leaf qos-id {
                description "An identifier used for QoS entries in the MD-SAL.";
                type inet:uri;
            }
            leaf qos-uuid {
                description "The unique identifier of the QoS.";
                type yang:uuid;
            }
            leaf qos-type {
                type identityref {
                    base qos-type-base;
                }
            }
            list queue-list {
                description "The list of queues used by the QoS";
                key "queue-number";
                leaf queue-number {
                    description "The queue number of the record in the QoS entry";
                    type uint32;
                }

                leaf queue-ref {
                    description "Instance identifier to a Queue in the MD-SAL.";
                    type ovsdb-queue-ref;
                }

            }
            list qos-external-ids {
                key "qos-external-id-key";
                leaf qos-external-id-key {
                    description "qos external-id name/key";
                    type string;
                    mandatory true;
                }
                leaf qos-external-id-value {
                    description "qos-external-id value";
                    type string;
                    mandatory true;
                }
            }
            list qos-other-config {
                description "
                    other_config : max-rate
                        optional string, containing an integer.";

                key "other-config-key";
                leaf other-config-key {
                    description "qos-other-config name/key";
                    type string;
                }
                leaf other-config-value {
                    description "qos-other-config value";
                    type string;
                }
            }
        }

        list queues {
            key "queue-id";
            leaf queue-id {
                description "An identifier used for Queue entries in the MD-SAL.";
                type inet:uri;
            }
            leaf queue-uuid {
                description "The unique identifier of the queue.";
                type yang:uuid;
            }
            leaf dscp {
                type uint8;
            }
            list queues-external-ids {
                key "queues-external-id-key";
                leaf queues-external-id-key {
                    description "queues external-id name/key";
                    type string;
                    mandatory true;
                }
                leaf queues-external-id-value {
                    description "queues-external-id value";
                    type string;
                    mandatory true;
                }
            }
            list queues-other-config {
                description "
                Configuration for linux-htb QoS:

                other_config : min-rate optional string
                    containing an integer, at least 1.
                    Minimum guaranteed bandwidth, in bit/s.

                other_config : max-rate optional string
                    containing an integer, at least 1.
                    Maximum allowed bandwidth, in bit/s. Optional. If specified, the queue's rate will not be allowed
                    to exceed the specified value, even if excess bandwidth is available. If unspecified, defaults to no
                    limit.

                other_config : burst optional string
                    containing an integer, at least 1.
                    Burst size, in bits. This is the maximum amount of ''credits'' that a queue can accumulate while it
                    is idle. Optional. Details of the linux-htb implementation require a minimum burst size, so a
                    too-small burst will be silently ignored.

                other_config : priority optional string.
                    containing an integer, in range 0 to 4,294,967,295.
                    A queue with a smaller priority will receive all the excess bandwidth that it can use before a
                    queue with a larger value receives any. Specific priority values are unimportant; only relative
                    ordering matters. Defaults to 0 if unspecified.

                Configuration for linux-htb QoS:

                other_config : min-rate optional string
                    containing an integer, at least 1.
                    Minimum guaranteed bandwidth, in bit/s.

                other_config : max-rate optional string
                    containing an integer, at least 1.
                    Maximum allowed bandwidth, in bit/s. Optional. If specified, the queue's rate will not be allowed
                    to exceed the specified value, even if excess bandwidth is available. If unspecified, defaults to no
                    limit..";

                key "queue-other-config-key";
                leaf queue-other-config-key {
                    type string;
                }
                leaf queue-other-config-value {
                    type string;
                }
            }
        }

        list autoattach {
            key "autoattach-id";
            leaf autoattach-id {
                description "An identifier used for AutoAttach table in the MD-SAL.";
                type inet:uri;
            }
            leaf bridge-id {
                description "Node-id of the Bridge table from where Autoattach table can be referenced.";
                type inet:uri;
            }
            leaf autoattach-uuid {
                description "The unique identifier of the autoattach table.";
                type yang:uuid;
            }
            leaf system-name {
                type string;
                description "The  system_name string is exported in LLDP messages.
                    It should uniquely identify the bridge in the network.";
            }
            leaf system-description {
                type string;
                description "The system_description string is exported in LLDP messages.
                    It should describe the type of software and hardware.";
            }
            list mappings {
                description "Map  of integer-integer pairs, key in range 0 to 16,777,215,
                    value in range 0 to 4,095. A mapping from SPB network Individual Service
                    Identifier  (ISID) to VLAN id.";
                key "mappings-key";
                leaf mappings-key {
                    type uint32 {
                        range "0..16777215";
                    }
                }
                leaf mappings-value {
                    type uint16 {
                        range "0..4095";
                    }
                }
            }
            list autoattach-external-ids {
                description
                   "Key-value pairs for use by external frameworks that integrate with
                    Open vSwitch, rather than by Open vSwitch itself.";

                key "autoattach-external-id-key";
                leaf autoattach-external-id-key {
                    description "external-id name/key";
                    type string;
                    mandatory true;
                }
                leaf autoattach-external-id-value {
                    description "autoattach-external-id value";
                    type string;
                    mandatory true;
                }
            }
        }
     }

    identity interface-type-base {
        description "Base identity for all OVSDB interface types";
    }

    identity interface-type-system {
        description "Interface type for system interfaces";
        base interface-type-base;
    }

    identity interface-type-internal {
        description "Interface type for internal interfaces";
        base interface-type-base;
    }

    identity interface-type-vxlan {
        description "Interface type for vxlan interfaces";
        base interface-type-base;
    }

    identity interface-type-vxlan-gpe {
        description "Interface type for vxlan gpe interfaces";
        base interface-type-base;
    }

    identity interface-type-patch {
        description "Interface type for patch interfaces";
        base interface-type-base;
    }

    identity interface-type-tap {
        description "Interface type for tun/tap interfaces";
        base interface-type-base;
    }

    identity interface-type-geneve {
        description "Interface type for geneve interfaces";
        base interface-type-base;
    }

    identity interface-type-gre {
        description "Interface type for gre interfaces";
        base interface-type-base;
    }

    identity interface-type-ipsec-gre {
        description "Interface type for ipsec-gre interfaces";
        base interface-type-base;
    }

    identity interface-type-gre64 {
        description "Interface type for gre64 interfaces";
        base interface-type-base;
    }

    identity interface-type-ipsec-gre64 {
        description "Interface type for ipsec-gre64 interfaces";
        base interface-type-base;
    }

    identity interface-type-lisp {
        description "Interface type for lisp interfaces";
        base interface-type-base;
    }

    identity interface-type-dpdk {
        description "Interface type for dpdk interfaces";
        base interface-type-base;
    }

    identity interface-type-dpdkr {
        description "Interface type for dpdk ring interfaces";
        base interface-type-base;
    }

    identity interface-type-dpdkvhost {
        description "Interface type for dpdkvhost interfaces";
        base interface-type-base;
    }

    identity interface-type-dpdkvhostuser {
        description "Interface type for dpdkvhostuser interfaces";
        base interface-type-base;
    }

    identity interface-type-dpdkvhostuserclient {
        description "Interface type for dpdkvhostuserclient interfaces";
        base interface-type-base;
    }

    identity interface-type-stt {
        description "Interface type for stt interfaces";
        base interface-type-base;
    }

    identity qos-type-base {
        description "the base identity for qos";
    }

    identity qos-type-linux-htb {
        description "linux hierarchy token bucket classifier";
        base qos-type-base;
    }

    identity qos-type-linux-hfsc {
        description "linux hierarchical fair service curve classifier";
        base qos-type-base;
    }

    identity qos-type-linux-sfq {
        description "linux stochastic fairness queueing classifier";
        base qos-type-base;
    }

    identity qos-type-linux-codel {
        description "linux controlled delay classifier";
        base qos-type-base;
    }

    identity qos-type-linux-fq-codel {
        description "linux fair queueing controlled delay classifier";
        base qos-type-base;
    }

    identity qos-type-egress-policer {
        description "DPDK user space egress policer";
        base qos-type-base;
    }

    grouping ovsdb-port-interface-attributes {
        leaf port-uuid {
            description "The unique identifier of the OVSDB port";
            type yang:uuid;
        }

        leaf interface-uuid {
            description "The unique identifier of the OVSDB interface";
            type yang:uuid;
        }

        leaf name {
            description "The name of the OVSDB port/interface";
            type string;
        }

        leaf ifindex {
            description "The ifindex is useful for seamless integration with protocols such as SNMP and sFlow.
                It is a positive interface index as defined for SNMP MIB-II in RFCs 1213 and 2863 if the interface
                has one, otherwise 0. It is a read-only column and an integer in the range 0 to 4,294,967,295";
            type uint32;
            config false;
        }

        leaf mac {
            description "Ethernet address to use for this interface. If unset, the default is used";
            type yang:mac-address;
        }

        leaf mac-in-use {
            description "The MAC address in use by this interface";
            type yang:mac-address;
            config false;
        }

        leaf interface-type {
            description "The type of the OVSDB interface";
            type identityref {
                base interface-type-base;
            }
        }

        list options {
            description "Port/Interface related optional input values";
            key "option";
            leaf option {
                description "Option name";
                type string;
            }
            leaf value {
                description "Option value";
                type string;
            }
        }

        leaf ofport {
            description "Port/Interface related optional ofport";
            type uint32;
        }

        leaf ofport_request {
            description "Port/Interface related optional ofport_request, in range 1 to 65279";
            type uint16 {
                range "1..65279";
            }
        }

        leaf vlan-tag {
            description "The VLAN tag of the termination point.";
            type ethertype:vlan-id;
        }

        list trunks {
            description "Represents the trunks of a termination point.";
            leaf trunk {
                type ethertype:vlan-id;
            }
        }

        leaf vlan-mode {
            description "The VLAN mode of the termination point.";
            type enumeration {
                enum "access" {
                    value 1;
                    description
                        "The VLAN mode access.";
                }
                enum "native-tagged" {
                    value 2;
                    description
                        "The VLAN mode native-tagged.";
                }
                enum "native-untagged" {
                    value 3;
                    description
                        "The VLAN mode native-untagged.";
                }
                enum "trunk" {
                    value 4;
                    description
                        "The VLAN mode trunk.";
                }
            }
        }

        list port-other-configs {
            description "Other config attributes for Ports

            other_config : priority-tags: optional string
               either true or false An 802.1Q header contains two important pieces of
               information: a VLAN ID and a priority.

            other_config : bond-hash-basis: optional string
               containing an integer An integer hashed along with flows when choosing output
               slaves in load balanced bonds. When changed, all flows will be
               assigned different hash values possibly causing slave selection
               decisions to change.

            other_config : bond-detect-mode: optional string
               either miimon or carrier The means used to detect link failures. Defaults to
               carrier which uses each interface's carrier to detect failures.
               When set to miimon, will check for failures by polling each
               interface's MII.

            other_config : bond-miimon-interval: optional string
               containing an integer The interval, in milliseconds, between successive
               attempts to poll each interface's MII. Relevant only when
               other_config:bond-detect-mode is miimon

            other_config : lacp-system-id: optional string
               The LACP system ID of this Port. The system ID of a LACP bond
               is used to identify itself to its partners. Must be a nonzero
               MAC address. Defaults to the bridge Ethernet address if unset.

            other_config : lacp-system-priority: optional string
               containing an integer, in range 1 to 65,535 The LACP system priority of this
               Port. In LACP negotiations, link status decisions are made by
               the system with the numerically lower priority.

            other_config : lacp-time: optional string
                either slow or fast. The LACP timing which should be used on this Port. By default
                slow is used. When configured to be fast LACP heartbeats are
                requested at a rate of once per second causing connectivity
                problems to be detected more quickly. In slow mode, heartbeats
                are requested at a rate of once every 30 seconds.

            other_config : lacp-fallback-ab: optional string
                either true or false Determines the behavior of openvswitch bond in LACP mode.
                If the partner switch does not support LACP, setting this
                option to true allows openvswitch to fallback to active-backup.
                If the option is set to false, the bond will be disabled.
                In both the cases, once the partner switch is configured
                to LACP mode, the bond will use LACP.

            other_config : bond-rebalance-interval: optional string,
                containing an integer, in range 0 to 10,000 For a load
                balanced bonded port, the number of milliseconds between
                successive attempts to rebalance the bond, that is, to move
                flows from one interface on the bond to another in an attempt
                to keep usage of each interface roughly equal. If zero, load
                balancing is disabled on the bond (link failure still cause
                flows to move). If less than 1000ms, the rebalance interval
                will be 1000ms.

            other_config : stp-enable: optional string
               either true or false. If spanning tree is enabled on the bridge, member ports are
               enabled by default (with the exception of bond, internal, and
               mirror ports which do not work with STP). If this column's
               value is false spanning tree is disabled on the port.

            other_config : stp-port-num: optional string
               containing an integer, in range 1 to 255 The port number used for the lower 8
               bits of the port-id. By default, the numbers will be assigned
               automatically. If any port's number is manually configured on
               a bridge, then they must all be.

            other_config : stp-port-priority: optional string
               containing an integer, in range 0 to 255 The port's relative priority value
               for determining the root port (the upper 8 bits of the port-id).

            other_config : stp-path-cost: optional string
                containing an integer, in range 0 to 65,535 Spanning tree path cost for the
                port. A lower number indicates a faster link. By default, the
                cost is based on the maximum speed of the link.

             other_config : rstp-enable: optional string
                 either true or false
                 If rapid spanning tree is enabled on the bridge, member ports
                 are enabled by default (with the exception of bond, internal,
                 and mirror ports which do not work with RSTP). If this
                 column's value is false rapid spanning tree is disabled on
                 the port.

             other_config : rstp-port-priority: optional string
                 containing an integer, in range 0 to 240 The port's relative priority value
                 for determining the root port, in multiples of 16. By default,
                 the port priority is 0x80 (128).

             other_config : rstp-port-num: optional string
                 containing an integer, in range 1 to 4,095 The local RSTP port number, used
                 as the lower 12 bits of the port-id.

             other_config : rstp-port-path-cost: optional string
                 containing an integer The port path cost. The Port's contribution, when it
                 is the Root Port, to the Root Path Cost for the Bridge.

             other_config : rstp-port-admin-edge: optional string
                 either true or false

             other_config : rstp-port-auto-edge: optional string
                 either true or false The auto edge port parameter for the Port. Default
                 is true.

             other_config : rstp-port-mcheck: optional string
                 either true or false The mcheck port parameter for the Port. Default is false.

              other_config : mcast-snooping-flood: optional string
                  either true or false If set to true, multicast packets are
                  unconditionally forwarded to the specific port";

            key "other-config-key";
            leaf other-config-key {
                description "port-other-config name/key";
                type string;
            }
            leaf other-config-value {
                description "port-other-config value";
                type string;
            }
        }

        list interface-other-configs {
            description "Other config attributes for Interfaces

            other_config : enable-vlan-splinters: optional string
               either true or false. Set to true to enable VLAN splinters on this
               interface. Defaults to false.";

            key "other-config-key";
            leaf other-config-key {
                description "interface-other-config name/key";
                type string;
            }
            leaf other-config-value {
                description "interface-other-config value";
                type string;
            }
        }

        list port-external-ids {
            description "Port external ids

            external_ids : fake-bridge-id-*: optional string
               External IDs for a fake bridge (see the fake_bridge column) are defined by
               prefixing a Bridge external_ids key with
               fake-bridge-, e.g. fake-bridge-xs-network-uuids.";

            key "external-id-key";
            leaf external-id-key {
                description "external-id name/key";
                type string;
                mandatory true;
            }
            leaf external-id-value {
                description "external-id value";
                type string;
                mandatory true;
            }
        }

        list interface-external-ids {
            description "Interface external ids

            external_ids : attached-mac: optional string.
               The MAC address programmed into the ''virtual hardware'' for this interface, in
               the form xx:xx:xx:xx:xx:xx. For Citrix XenServer, this is the
               value of the MAC field in the VIF record for this interface.

            external_ids : iface-id: optional string.
               A system-unique identifier for the interface. On XenServer, this will commonly
               be the same as external_ids:xs-vif-uuid.

            external_ids : iface-status: optional string
               either active or inactive Hypervisors may sometimes have more than one interface
               associated with a given external_ids:iface-id, only one of
               which is actually in use at a given time.

            external_ids : xs-vif-uuid: optional string.
               The virtual interface associated with this interface.

            external_ids : xs-network-uuid: optional string.
               The virtual network to which this interface is attached.

            external_ids : vm-id: optional string.
               The VM to which this interface belongs. On XenServer, this will be the same as
               external_ids:xsvm-uuid.

            external_ids : xs-vm-uuid: optional string.
               The VM to which this interface belongs";

            key "external-id-key";
            leaf external-id-key {
                description "external-id name/key";
                type string;
                mandatory true;
            }
            leaf external-id-value {
                description "external-id value";
                type string;
                mandatory true;
            }
        }

        list interface-lldp {
            description "Auto Attach configuration for a particular interface.
                If LLDP is enabled on an interface, the interface processes received
                LLDP packets and never passes them to OpenFlow or forwards them.

                lldp : enable: optional string, either true or false
                       True to enable LLDP on this Interface. If not specified, LLDP
                       will be disabled by default.";

            key "lldp-key";
            leaf lldp-key {
                description "lldp name/key";
                type string;
            }
            leaf lldp-value {
                description "lldp value";
                type string;
            }
        }

        list interface-bfd {
            description "BFD configuration for a particular interface.
                BFD, defined in RFC 5880 and RFC 5881, allows point-to-point
                detection of connectivity failures by occasional transmission of
                BFD control messages.

                bfd : enable: optional string, either true or false
                       True to enable BFD on this Interface. If not specified, BFD
                       will be disabled by default.

                bfd : min_rx: optional string
                       containing an integer, at least 1.
                       The shortest interval, in milliseconds, at which this BFD session
                       offers to receive BFD control messages.  The remote endpoint may
                       choose to send messages at a slower rate.  Defaults to 1000.

                bfd : min_tx: optional string
                       containing an integer, at least 1.
                       The shortest interval, in milliseconds, at which this BFD session is
                       willing to transmit BFD control messages.  Messages will actually be
                       transmitted at a slower rate if the remote endpoint is not willing to
                       receive as quickly as specified.  Defaults to 100.

                bfd : decay_min_rx: optional string
                       containing an integer
                       An alternate receive interval, in milliseconds, that must be greater
                       than or equal to bfd:min_rx.  The implementation switches from
                       bfd:min_rx to bfd:decay_min_rx when there is no obvious incoming
                       data traffic at the interface, to reduce the CPU and bandwidth cost
                       of monitoring an idle interface.  This feature may be disabled by
                       setting a value of 0. This feature is reset whenever bfd:decay_min_rx
                       bfd:min_rx changes.

                bfd : forwarding_if_rx: optional string, either true or false
                       When true, traffic received on the Interface is used to
                       indicate the capability of packet I/O. BFD control packets are
                       still transmitted and received.  At least one BFD control
                       packet must be received every 100 * bfd:min_rx amount of time.
                       Otherwise, even if traffic are received, the bfd-status:forwarding
                       will be false.

                bfd : cpath_down: optional string, either true or false
                       Set to true to notify the remote endpoint that traffic should not be
                       forwarded to this system for some reason other than a connectivity
                       failure on the interface being monitored.  The typical underlying
                       reason is concatenated path down, that is, that connectivity
                       beyond the local system is down.  Defaults to false.

                bfd : cpath_down: optional string, either true or false
                       Set to true to notify the remote endpoint that traffic should not be
                       forwarded to this system for some reason other than a connectivity
                       failure on the interface being monitored.  The typical underlying
                       reason is concatenated path down, that is, that connectivity
                       beyond the local system is down.  Defaults to false.

                bfd : check_tnl_key: optional string, either true or false
                       Set to true to make BFD accept only control messages with a tunnel
                       key of zero.  By default, BFD accepts control messages with any
                       tunnel key.

                bfd : bfd_local_dst_mac: optional string, mac address
                       Set to an Ethernet address in the form xx:xx:xx:xx:xx:xx
                       to set the MAC used as destination for transmitted BFD packets. The
                       default is 00:23:20:00:00:01

                bfd : bfd_remote_dst_mac: optional string, mac address
                       Set to an Ethernet address in the form xx:xx:xx:xx:xx:xx
                       to set the MAC used for checking the destination of received BFD packets.
                       Packets with different destination MAC will not be considered as BFD packets.
                       If not specified the destination MAC address of received BFD packets
                       are not checked.

                bfd : bfd_src_ip: optional string, ip address
                       Set to an IPv4 address to set the IP address used as source
                       for transmitted BFD packets.  The default is 169.254.1.1

                bfd : bfd_dst_ip: optional string, ip address
                       Set to an IPv4 address to set the IP address used as destination
                       for transmitted BFD packets.  The default is 169.254.1.0";

            key "bfd-key";
            leaf bfd-key {
                description "bfd name/key";
                type string;
            }
            leaf bfd-value {
                description "bfd value";
                type string;
            }
        }

        list interface-bfd-status {
            description "BFD status for a particular interface.
                The switch sets key-value pairs in the bfd_status column to
                report the status of BFD on this interface.  When BFD is not
                enabled, with bfd:enable, the switch clears all key-value
                pairs from bfd_status.

                bfd_status : state: optional string, one of [admin_down, down, init, up]
                       Reports the state of the BFD session.  The BFD session is fully
                       healthy and negotiated if UP.

                bfd_status : forwarding: optional string, true or false
                       Reports whether the BFD session believes this Interface
                       may be used to forward traffic.  Typically this means
                       the local session is signaling UP, and the remote
                       system isn't signaling a problem such as concatenated path down.

                bfd_status : diagnostic: optional string
                       A diagnostic code specifying the local system's reason for the
                       last change in session state. The error messages are defined in
                       section 4.1 of [RFC 5880].

                bfd_status : remote_state: optional string, one of [admin_down, down, init, up]
                       Reports the state of the remote endpoint's BFD session.

                bfd_status : remote_diagnostic: optional string
                       A diagnostic code specifying the remote system's reason for the
                       last change in session state. The error messages are defined in
                       section 4.1 of [RFC 5880].

                bfd_status : flap_count: optional string,
                       containing an integer, minimum 0
                       Counts the number of bfd_status:forwarding flaps since start.
                       A flap is considered as a change of the bfd_status:forwarding value.";

            key "bfd-status-key";
            leaf bfd-status-key {
                description "bfd-status name/key";
                type string;
            }
            leaf bfd-status-value {
                description "bfd-status value";
                type string;
            }
        }

        list qos-entry {
            key "qos-key";
            max-elements 1;
            leaf qos-key {
                description "Fixed key to reference the QoS entry in MD-SAL.";
                type uint32 {
                    range "1..1";
                }
                mandatory true;
            }
            leaf qos-ref {
                description "Instance identifier of a QoS entry in the MD-SAL.";
                type ovsdb-qos-ref;
                mandatory true;
            }
        }

        leaf ingress-policing-rate {
            description "Maximum rate for data received on this interface in kbps.
                Data received faster than this rate is dropped.  Set to 0 (default)
                to disable policing";
            type uint32;
        }

        leaf ingress-policing-burst {
            description "Maximum burst size for data received on this interface in kb.
                The default burst size if set to 0 is 1000 kb.  This value has no
                effect if ingress-policing-rate is 0.";
            type uint32;
        }
    }

    augment "/topo:network-topology/topo:topology/topo:node" {
        description "Augmentation for bridge nodes managed by ovsdb";
        ext:augment-identifier "ovsdb-bridge-augmentation";
        uses ovsdb-bridge-attributes;
    }

    augment "/topo:network-topology/topo:topology/topo:node" {
        description "Augment topology node for an ovsdb node";
        ext:augment-identifier "ovsdb-node-augmentation";
        uses ovsdb-node-attributes;
    }

    augment "/topo:network-topology/topo:topology/topo:node/topo:termination-point" {
        description "Augment topology node termination-point for an ovsdb port/interface";
        ext:augment-identifier "ovsdb-termination-point-augmentation";
        uses ovsdb-port-interface-attributes;
    }
}