diff options
Diffstat (limited to 'v3po/api/src/main/yang/vpp-vlan.yang')
-rw-r--r-- | v3po/api/src/main/yang/vpp-vlan.yang | 267 |
1 files changed, 267 insertions, 0 deletions
diff --git a/v3po/api/src/main/yang/vpp-vlan.yang b/v3po/api/src/main/yang/vpp-vlan.yang new file mode 100644 index 000000000..a0ce5f91f --- /dev/null +++ b/v3po/api/src/main/yang/vpp-vlan.yang @@ -0,0 +1,267 @@ +module vpp-vlan { + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:vpp:vlan"; + prefix "vpp-vlan"; + + revision "2015-05-27" { + description + "Initial revision of vlan model for VPP. + Reuses some concepts from draft-wilton-netmod-intf-vlan-yang-02 model."; + } + + import ietf-interfaces { + prefix "if"; + } + import ietf-yang-types { + prefix "yang"; + } + import yang-ext { + prefix "ext"; + } + import dot1q-types { + prefix dot1q; + } + import v3po { + prefix v3po; + } + + typedef sub-interface-status { + type enumeration { + enum "up"; + enum "down"; + } + } + + grouping match-attributes { + choice match-type { + mandatory true; + description "Provides a choice of how the frames may be matched"; + + case default { + description "Default match"; + leaf default { + type empty; + description + "Default match. Matches all traffic not matched to any + other peer sub-interface by a more specific + encapsulation."; + } // leaf default + } // case default + + case untagged { + description "Match untagged Ethernet frames only"; + leaf untagged { + type empty; + description + "Untagged match. Matches all untagged traffic."; + } // leaf untagged + } // case untagged + + case vlan-tagged { + container vlan-tagged { + description "Matches VLAN tagged frames"; + list tag { + key "index"; + min-elements 1; + max-elements 2; + description "The tags to match, with the outermost tag to + match assigned index 0"; + leaf index { + type uint8 { + range "0..1"; + } + + must "index = 0 or + count(../../tag[index = 0]/index) > 0" { + error-message "An inner tag can only be matched on + when also matching on an outer tag"; + description "Only allow matching on an inner tag, if + also matching on the outer tags at the + same time"; + } + description + "The index into the tag stack, outermost tag first"; + } + + uses dot1q:dot1q-tag-or-any; + } + + leaf match-exact-tags { + type boolean; + default true; + description + "If set, indicates that all 802.1Q VLAN tags in the + Ethernet frame header must be explicitly matched, i.e. + the EtherType following the matched tags must not be a + 802.1Q tag EtherType. If unset then extra 802.1Q VLAN + tags are allowed."; + } + } // container vlan-tagged + } // case vlan-tagged + } + } + + // TODO VPP does not allow to change subinterface nor delete it (except for tag-rewrite operation) + grouping sub-interface-base-attributes { + container tags { + list tag { + key "index"; + max-elements 2; + + description "The VLAN tags to use by locally sourced traffic"; + + leaf index { + type uint8 { + range "0..1"; + } + + /* + * Only allow a push of an inner tag if an outer tag is also + * being pushed. + */ + must "index != 0 or + count(../../push-tags[index = 0]/index) > 0" { + error-message "An inner tag can only be pushed if an outer + tag is also specified"; + description "Only allow a push of an inner tag if an outer + tag is also being pushed"; + } + description "The index into the tag stack"; + } + + uses dot1q:dot1q-tag; + + } + } + + container match { + description + "The match used to classify frames to this interface"; + uses match-attributes; + } + + container l2 { + uses v3po:l2-base-attributes; + container rewrite { + uses tag-rewrite; + } + } + } + + grouping sub-interface-config-attributes { + leaf enabled { + type boolean; + default "false"; + description + "Contains the configured, desired state of the sub-interface. + To enable sub-interface, the super inerface needs to be enabled"; + } + } + + grouping sub-interface-operational-attributes { + leaf admin-status { + type sub-interface-status; + mandatory true; + } + leaf oper-status { + type sub-interface-status; + mandatory true; + } + leaf if-index { + type int32 { + range "1..2147483647"; + } + mandatory true; + } + leaf phys-address { + type yang:phys-address; + description + "The sub-interface's Media Access Control (MAC) address."; + } + leaf speed { + type yang:gauge64; + units "bits/second"; + } + } + + /* + * Only symetrical rewrite is supported + */ + grouping tag-rewrite { + description "Flexible rewrite"; + leaf pop-tags { + type uint8 { + range 1..2; + } + description "The number of tags to pop (or translate if used in + conjunction with push-tags)"; + } + + list push-tags { + key "index"; + max-elements 2; + description "The number of tags to push (or translate if used + in conjunction with pop-tags)"; + /* + * Server should order by increasing index. + */ + leaf index { + type uint8 { + range 0..1; + } + + /* + * Only allow a push of an inner tag if an outer tag is also + * being pushed. + */ + must "index != 0 or + count(../../push-tags[index = 0]/index) > 0" { + error-message "An inner tag can only be pushed if an outer + tag is also specified"; + description "Only allow a push of an inner tag if an outer + tag is also being pushed"; + } + } + + uses dot1q:dot1q-tag; + } + } + + augment /if:interfaces/if:interface { + ext:augment-identifier "subinterface-augmentation"; + + container sub-interfaces { + description "L2 vlan subinterfaces"; + + + list sub-interface { + key "identifier"; + leaf identifier { + type uint32; + } + + uses sub-interface-base-attributes; + uses sub-interface-config-attributes; + } + } + } + + augment /if:interfaces-state/if:interface { + ext:augment-identifier "subinterface-state-augmentation"; + + container sub-interfaces { + description "L2 vlan subinterfaces"; + + list sub-interface { + key "identifier"; + leaf identifier { + type uint32; + } + + uses sub-interface-base-attributes; + uses sub-interface-operational-attributes; + } + } + } + +} |