module opendaylight-match-types { namespace "urn:opendaylight:model:match:types"; prefix "match"; import ietf-inet-types {prefix inet; revision-date "2010-09-24";} import ietf-yang-types {prefix yang; revision-date "2010-09-24";} import opendaylight-l2-types {prefix l2t;revision-date "2013-08-27";} revision "2013-10-26" { description "Initial revision of macth types"; } grouping "mac-address-filter" { leaf address { mandatory true; type yang:mac-address; } leaf mask { type binary; } } grouping "of-metadata" { leaf metadata { type uint64; } leaf metadata-mask { type binary; } } /** Match Groupings **/ grouping "ethernet-match-fields" { container ethernet-source { description "Ethernet source address."; presence "Match field is active and set"; uses mac-address-filter; } container ethernet-destination { description "Ethernet destination address."; presence "Match field is active and set"; uses mac-address-filter; } container ethernet-type { description "Ethernet frame type."; presence "Match field is active and set"; leaf type { mandatory true; type l2t:ether-type; // Needs to define that as general model } leaf mask { type binary; } } } grouping "vlan-match-fields" { container vlan-id { description "VLAN id."; presence "Match field is active and set"; leaf vlan-id { mandatory true; type l2t:vlan-id; } leaf mask { type binary; } } leaf vlan-pcp { description "VLAN priority."; type l2t:vlan-pcp; } } grouping "ip-match-fields" { leaf ip-protocol { description "IP protocol."; type uint8; } leaf ip-dscp { description "IP DSCP (6 bits in ToS field)."; type inet:dscp; } leaf ip-ecn { description "IP ECN (2 bits in ToS field)."; type uint8; } } grouping "ipv4-match-fields" { leaf ipv4-source { description "IPv4 source address."; type inet:ipv4-prefix; } leaf ipv4-destination { description "IPv4 destination address."; type inet:ipv4-prefix; } } grouping "ipv6-match-fields" { leaf ipv6-source { description "IPv6 source address."; type inet:ipv6-prefix; } leaf ipv6-destination { description "IPv6 destination address."; type inet:ipv6-prefix; } leaf ipv6-nd-target { description "IPv6 target address for neighbour discovery message"; type inet:ipv6-address; } container "ipv6-label" { leaf ipv6-flabel { type inet:ipv6-flow-label; } leaf flabel-mask { type binary; } } leaf ipv6-nd-sll { description "Link layer source address for neighbour discovery message"; type yang:mac-address; } leaf ipv6-nd-tll { description "Link layer target address for neighbour discovery message"; type yang:mac-address; } container "ipv6-ext-header" { leaf ipv6-exthdr { description "IPv6 Extension Header field"; type uint16; } leaf ipv6-exthdr-mask { type binary; } } } grouping "udp-match-fields" { leaf udp-source-port { description "UDP source port."; type inet:port-number; } leaf udp-destination-port { description "UDP destination port."; type inet:port-number; } } grouping "protocol-match-fields" { leaf mpls-label { description "Label in the first MPLS shim header"; type uint32; } leaf mpls-tc { description "TC in the first MPLS shim header"; type uint8; } leaf mpls-bos { description "BoS bit in the first MPLS shim header"; type uint8; } container "pbb" { leaf pbb-isid { description "I-SID in the first PBB service instance tag"; type uint32; } leaf pbb-mask { type binary; } } } grouping "tcp-match-fields" { leaf tcp-source-port { description "TCP source port."; type inet:port-number; } leaf tcp-destination-port { description "TCP destination port."; type inet:port-number; } } grouping "sctp-match-fields" { leaf sctp-source-port { description "SCTP source port."; type inet:port-number; } leaf sctp-destination-port { description "SCTP destination port."; type inet:port-number; } } grouping "icmpv4-match-fields" { leaf icmpv4-type { description "ICMP type."; type uint8; // Define ICMP Type } description "ICMP code."; leaf icmpv4-code { type uint8; // Define ICMP Code } } grouping "icmpv6-match-fields" { leaf icmpv6-type { description "ICMP type."; type uint8; // Define ICMP Type } description "ICMP code."; leaf icmpv6-code { type uint8; // Define ICMP Code } } grouping "arp-match-fields" { leaf arp-op { type uint16; } leaf arp-source-transport-address { description "ARP source IPv4 address."; type inet:ipv4-prefix; } leaf arp-target-transport-address { description "ARP target IPv4 address."; type inet:ipv4-prefix; } container arp-source-hardware-address { description "ARP source hardware address."; presence "Match field is active and set"; uses mac-address-filter; } container arp-target-hardware-address { description "ARP target hardware address."; presence "Match field is active and set"; uses mac-address-filter; } } grouping match { leaf in-port { type uint32; } leaf in-phy-port { type uint32; } container "metadata" { uses of-metadata; } container "tunnel" { leaf tunnel-id { description "Metadata associated in the logical port"; type uint64; } leaf tunnel-mask { type binary; } } container "ethernet-match" { uses "ethernet-match-fields"; } container "vlan-match" { uses "vlan-match-fields"; } container "ip-match" { uses "ip-match-fields"; } choice layer-3-match { case "ipv4-match" { uses "ipv4-match-fields"; } case "ipv6-match" { uses "ipv6-match-fields"; } case "arp-match" { uses "arp-match-fields"; } } choice layer-4-match { case "udp-match" { uses "udp-match-fields"; } case "tcp-match" { uses "tcp-match-fields"; } case "sctp-match" { uses "sctp-match-fields"; } } container "icmpv4-match" { uses "icmpv4-match-fields"; } container "icmpv6-match" { uses "icmpv6-match-fields"; } container "protocol-match-fields" { uses "protocol-match-fields"; } } }