- description " Output to switch port. ";
+ description " Output to switch port. (both OF v1.0 and v1.3)";
base oft:action;
}
identity copy_ttl_out {
base oft:action;
}
identity copy_ttl_out {
// OF1.0 structures
identity set_vlan_vid {
// OF1.0 structures
identity set_vlan_vid {
+ description "Set the 802.1q VLAN id (OF v1.0).";
base oft:action;
}
identity set_vlan_pcp {
base oft:action;
}
identity set_vlan_pcp {
+ description "Set the 802.1q priority (OF v1.0).";
base oft:action;
}
identity strip_vlan {
base oft:action;
}
identity strip_vlan {
+ description "Strip the 802.1q header (OF v1.0).";
base oft:action;
}
identity set_dl_src {
base oft:action;
}
identity set_dl_src {
+ description "Ethernet source address (OF v1.0).";
base oft:action;
}
identity set_dl_dst {
base oft:action;
}
identity set_dl_dst {
+ description "Ethernet destination address (OF v1.0).";
base oft:action;
}
identity set_nw_src {
base oft:action;
}
identity set_nw_src {
+ description "IP source address (OF v1.0).";
base oft:action;
}
identity set_nw_dst {
base oft:action;
}
identity set_nw_dst {
+ description "IP destination address (OF v1.0).";
base oft:action;
}
identity set_nw_tos {
base oft:action;
}
identity set_nw_tos {
+ description "IP ToS (DSCP field, 6 bits) (OF v1.0).";
base oft:action;
}
identity set_tp_src {
base oft:action;
}
identity set_tp_src {
+ description "TCP/UDP source port (OF v1.0).";
base oft:action;
}
identity set_tp_dst {
base oft:action;
}
identity set_tp_dst {
+ description "TCP/UDP destination port (OF v1.0).";
base oft:action;
}
identity enqueue {
base oft:action;
}
identity enqueue {
+ description "Output to queue (OF v1.0).";
import openflow-extensible-match {prefix oxm;}\r
\r
revision "2013-10-02" {\r
import openflow-extensible-match {prefix oxm;}\r
\r
revision "2013-10-02" {\r
- description "OpenFlow 1.3 - augments model";\r
+ description "OpenFlow 1.3 - augments model. \r
+ Please visit \r
+ https://wiki.opendaylight.org/view/File:OpenFlow_Protocol_Library_-_Project_documentation.pdf\r
+ - Augmentation Tables chapter";\r
}\r
\r
// OFP_MATCH AUGMENTS\r
}\r
\r
// OFP_MATCH AUGMENTS\r
- description "Backward compatibility with NXM";
+ description "Match class for backward compatibility with NXM";
base clazz;
}
identity nxm-1-class {
base clazz;
}
identity nxm-1-class {
- description "Backward compatibility with NXM";
+ description "Match class for backward compatibility with NXM";
base clazz;
}
identity openflow-basic-class {
base clazz;
}
identity openflow-basic-class {
identity in_port {
base match-field;
identity in_port {
base match-field;
- description "Match for Switch input port.";
+ description "OXM field for Switch input port.";
}
identity in_phy_port {
base match-field;
}
identity in_phy_port {
base match-field;
- description "Match for Switch physical input port.";
+ description "OXM field for Switch physical input port.";
}
identity metadata {
base match-field;
}
identity metadata {
base match-field;
- description "Match for Metadata passed between tables.";
+ description "OXM field for Metadata passed between tables.";
}
identity eth_dst {
base match-field;
}
identity eth_dst {
base match-field;
- description "Match for Ethernet destination address.";
+ description "OXM field for Ethernet destination address.";
}
identity eth_src {
base match-field;
}
identity eth_src {
base match-field;
- description "Match for Ethernet source address.";
+ description "OXM field for Ethernet source address.";
}
identity eth_type {
base match-field;
}
identity eth_type {
base match-field;
- description "Match for Ethernet frame type.";
+ description "OXM field for Ethernet frame type.";
}
identity vlan_vid {
base match-field;
}
identity vlan_vid {
base match-field;
- description "Match for VLAN id.";
+ description "OXM field for VLAN id.";
}
identity vlan_pcp {
base match-field;
}
identity vlan_pcp {
base match-field;
- description "Match for VLAN priority.";
+ description "OXM field for VLAN priority.";
}
identity ip_dscp {
base match-field;
}
identity ip_dscp {
base match-field;
- description "Match for IP DSCP (6 bits in ToS field).";
+ description "OXM field for IP DSCP (6 bits in ToS field).";
}
identity ip_ecn {
base match-field;
}
identity ip_ecn {
base match-field;
- description "Match for IP ECN (2 bits in ToS field).";
+ description "OXM field for IP ECN (2 bits in ToS field).";
}
identity ip_proto {
base match-field;
}
identity ip_proto {
base match-field;
- description "Match for IP protocol.";
+ description "OXM field for IP protocol.";
}
identity ipv4_src {
base match-field;
}
identity ipv4_src {
base match-field;
- description "Match for IPv4 source address.";
+ description "OXM field for IPv4 source address.";
}
identity ipv4_dst {
base match-field;
}
identity ipv4_dst {
base match-field;
- description "Match for IPv4 destination address.";
+ description "OXM field for IPv4 destination address.";
}
identity tcp_src {
base match-field;
}
identity tcp_src {
base match-field;
- description "Match for TCP source port.";
+ description "OXM field for TCP source port.";
}
identity tcp_dst {
base match-field;
}
identity tcp_dst {
base match-field;
- description "Match for TCP destination port.";
+ description "OXM field for TCP destination port.";
}
identity udp_src {
base match-field;
}
identity udp_src {
base match-field;
- description "Match for UDP source port.";
+ description "OXM field for UDP source port.";
}
identity udp_dst {
base match-field;
}
identity udp_dst {
base match-field;
- description "Match for UDP destination port.";
+ description "OXM field for UDP destination port.";
}
identity sctp_src {
base match-field;
}
identity sctp_src {
base match-field;
- description "Match for SCTP source port.";
+ description "OXM field for SCTP source port.";
}
identity sctp_dst {
base match-field;
}
identity sctp_dst {
base match-field;
- description "Match for SCTP destination port.";
+ description "OXM field for SCTP destination port.";
}
identity icmpv4_type {
base match-field;
}
identity icmpv4_type {
base match-field;
- description "Match for ICMP type.";
+ description "OXM field for ICMP type.";
}
identity icmpv4_code {
base match-field;
}
identity icmpv4_code {
base match-field;
- description "Match for ICMP code.";
+ description "OXM field for ICMP code.";
}
identity arp_op {
base match-field;
}
identity arp_op {
base match-field;
- description "Match for ARP opcode.";
+ description "OXM field for ARP opcode.";
}
identity arp_spa {
base match-field;
}
identity arp_spa {
base match-field;
- description "Match for ARP source IPv4 address.";
+ description "OXM field for ARP source IPv4 address.";
}
identity arp_tpa {
base match-field;
}
identity arp_tpa {
base match-field;
- description "Match for ARP target IPv4 address.";
+ description "OXM field for ARP target IPv4 address.";
}
identity arp_sha {
base match-field;
}
identity arp_sha {
base match-field;
- description "Match for ARP source hardware address.";
+ description "OXM field for ARP source hardware address.";
}
identity arp_tha {
base match-field;
}
identity arp_tha {
base match-field;
- description "Match for ARP target hardware address.";
+ description "OXM field for ARP target hardware address.";
}
identity ipv6_src {
base match-field;
}
identity ipv6_src {
base match-field;
- description "Match for IPv6 source address.";
+ description "OXM field for IPv6 source address.";
}
identity ipv6_dst {
base match-field;
}
identity ipv6_dst {
base match-field;
- description "Match for IPv6 destination address.";
+ description "OXM field for IPv6 destination address.";
}
identity ipv6_flabel {
base match-field;
}
identity ipv6_flabel {
base match-field;
- description "Match for IPv6 Flow Label";
+ description "OXM field for IPv6 Flow Label";
}
identity icmpv6_type {
base match-field;
}
identity icmpv6_type {
base match-field;
- description "Match for ICMPv6 type.";
+ description "OXM field for ICMPv6 type.";
}
identity icmpv6_code {
base match-field;
}
identity icmpv6_code {
base match-field;
- description "Match for ICMPv6 code.";
+ description "OXM field for ICMPv6 code.";
}
identity ipv6_nd_target {
base match-field;
}
identity ipv6_nd_target {
base match-field;
- description "Match for Target address for ND.";
+ description "OXM field for Target address for ND.";
}
identity ipv6_nd_sll {
base match-field;
}
identity ipv6_nd_sll {
base match-field;
- description "Match for Source link-layer for ND.";
+ description "OXM field for Source link-layer for ND.";
}
identity ipv6_nd_tll {
base match-field;
}
identity ipv6_nd_tll {
base match-field;
- description "Match for Target link-layer for ND.";
+ description "OXM field for Target link-layer for ND.";
}
identity mpls_label {
base match-field;
}
identity mpls_label {
base match-field;
- description "Match for MPLS label.";
+ description "OXM field for MPLS label.";
}
identity mpls_tc {
base match-field;
}
identity mpls_tc {
base match-field;
- description "Match for MPLS TC.";
+ description "OXM field for MPLS TC.";
}
identity mpls_bos {
base match-field;
}
identity mpls_bos {
base match-field;
- description "Match for MPLS BoS bit.";
+ description "OXM field for MPLS BoS bit.";
}
identity pbb_isid {
base match-field;
}
identity pbb_isid {
base match-field;
- description "Match for PBB I-SID.";
+ description "OXM field for PBB I-SID.";
}
identity tunnel_id {
base match-field;
}
identity tunnel_id {
base match-field;
- description "Match for Logical Port Metadata";
+ description "OXM field for Logical Port Metadata";
}
identity ipv6_exthdr {
base match-field;
}
identity ipv6_exthdr {
base match-field;
- description "Match for IPv6 Extension Header pseudo-field";
+ description "OXM field for IPv6 Extension Header pseudo-field";
}
container oxm-container {
}
container oxm-container {
grouping oxm-fields {
list match-entries {
grouping oxm-fields {
list match-entries {
+ description "OXM TLV-structures (Type Length Value)";
key "oxm-class oxm-match-field has-mask";
leaf oxm-class {
type identityref {
key "oxm-class oxm-match-field has-mask";
leaf oxm-class {
type identityref {
// OF1.0 structures
grouping match-v10-grouping {
container match-v10 {
// OF1.0 structures
grouping match-v10-grouping {
container match-v10 {
+ description "OF v1.0 match structure";
+ description "Wildcard fields (only flags).";
type oft:flow-wildcards-v10;
}
leaf nw-src-mask {
type oft:flow-wildcards-v10;
}
leaf nw-src-mask {
+ description "IP source address mask (definition differs from OF v1.0.0 spec to ease
+ understanding, library does the transformation into OF v1.0 spec correct data)";
type uint8;
}
leaf nw-dst-mask {
type uint8;
}
leaf nw-dst-mask {
+ description "IP destination address mask (definition differs from OF v1.0.0 spec to ease
+ understanding, library does the transformation into OF v1.0 spec correct data)";
type uint8;
}
leaf in-port {
type uint8;
}
leaf in-port {
+ description "Input switch port.";
type uint16;
}
leaf dl-src {
type uint16;
}
leaf dl-src {
+ description "Ethernet source address.";
type yang:mac-address;
}
leaf dl-dst {
type yang:mac-address;
}
leaf dl-dst {
+ description "Ethernet destination address.";
type yang:mac-address;
}
leaf dl-vlan {
type yang:mac-address;
}
leaf dl-vlan {
+ description "Input VLAN id.";
type uint16;
}
leaf dl-vlan-pcp {
type uint16;
}
leaf dl-vlan-pcp {
+ description "Input VLAN priority.";
type uint8;
}
leaf dl-type {
type uint8;
}
leaf dl-type {
+ description "Ethernet frame type.";
type uint16;
}
leaf nw-tos {
type uint16;
}
leaf nw-tos {
+ description "IP ToS (actually DSCP field, 6 bits).";
type uint8;
}
leaf nw-proto {
type uint8;
}
leaf nw-proto {
+ description "IP protocol or lower 8 bits of ARP opcode.";
type uint8;
}
leaf nw-src {
type uint8;
}
leaf nw-src {
+ description "IP source address.";
type inet:ipv4-address;
}
leaf nw-dst {
type inet:ipv4-address;
}
leaf nw-dst {
+ description "IP destination address.";
type inet:ipv4-address;
}
leaf tp-src {
type inet:ipv4-address;
}
leaf tp-src {
+ description "TCP/UDP source port.";
type uint16;
}
leaf tp-dst {
type uint16;
}
leaf tp-dst {
+ description "TCP/UDP destination port.";
import openflow-types { prefix oft; }
revision "2013-07-31" {
import openflow-types { prefix oft; }
revision "2013-07-31" {
- // description "OpenFlow 1.3 - instruction model";
+ description "OpenFlow 1.3 - instruction model";
- //description " Setup the next table in the lookup pipeline";
+ description " Setup the next table in the lookup pipeline";
base oft:instruction;
}
identity write_metadata {
base oft:instruction;
}
identity write_metadata {
- //description " Setup the metadata field for use later in pipeline";
+ description " Setup the metadata field for use later in pipeline";
base oft:instruction;
}
identity write_actions {
base oft:instruction;
}
identity write_actions {
\r
// Generic Structures\r
grouping port {\r
\r
// Generic Structures\r
grouping port {\r
- // reference "ofp_port";\r
- leaf port-no { \r
- // reference "ofp_port.port_no"; \r
+ reference "ofp_port";\r
+ leaf port-no {\r
- leaf hw-addr { \r
- // reference "ofp_port.hw_addr"; \r
type yang:mac-address;\r
}\r
type yang:mac-address;\r
}\r
- leaf name { \r
- // reference "ofp_port.name"; \r
- leaf config { \r
- // reference "ofp_port.config"; \r
+ leaf config {\r
+ description "Bitmap of OFPPC_* flags.";\r
type oft:port-config;\r
}\r
type oft:port-config;\r
}\r
- leaf state { \r
- // reference "ofp_port.state"; \r
+ leaf state {\r
+ description "Bitmap of OFPPS_* flags.";\r
type oft:port-state;\r
}\r
type oft:port-state;\r
}\r
- leaf current-features { \r
+ leaf current-features {\r
description "Current features.";\r
description "Current features.";\r
- // reference "ofp_port.curr"; \r
- type oft:port-features; \r
+ type oft:port-features;\r
- leaf advertised-features { \r
+ leaf advertised-features {\r
description "Features being advertised by the port.";\r
description "Features being advertised by the port.";\r
- // reference "ofp_port.advertised"; \r
- type oft:port-features; \r
+ type oft:port-features;\r
- leaf supported-features { \r
+ leaf supported-features {\r
description "Features supported by the port.";\r
description "Features supported by the port.";\r
- // reference "ofp_port.supported"; \r
- type oft:port-features; \r
+ type oft:port-features;\r
- leaf peer-features { \r
description "Features advertised by peer.";\r
description "Features advertised by peer.";\r
- // reference "ofp_port.peer"; \r
type oft:port-features; \r
}\r
type oft:port-features; \r
}\r
description "Current port bitrate in kbps.";\r
description "Current port bitrate in kbps.";\r
- // reference "ofp_port.curr_speed"; \r
- type uint32; \r
description "Max port bitrate in kbps";\r
description "Max port bitrate in kbps";\r
- // reference "ofp_port.max_speed"; \r
- leaf config-v10 { \r
- // reference "ofp_port.config"; \r
type oft:port-config-v10;\r
}\r
leaf state-v10 { \r
type oft:port-config-v10;\r
}\r
leaf state-v10 { \r
- // reference "ofp_port.state"; \r
type oft:port-state-v10;\r
}\r
type oft:port-state-v10;\r
}\r
- leaf current-features-v10 { \r
+ leaf current-features-v10 {\r
description "Current features.";\r
description "Current features.";\r
- // reference "ofp_port.curr"; \r
- type oft:port-features-v10; \r
+ type oft:port-features-v10;\r
- leaf advertised-features-v10 { \r
+ leaf advertised-features-v10 {\r
description "Features being advertised by the port.";\r
description "Features being advertised by the port.";\r
- // reference "ofp_port.advertised"; \r
- type oft:port-features-v10; \r
+ type oft:port-features-v10;\r
- leaf supported-features-v10 { \r
+ leaf supported-features-v10 {\r
description "Features supported by the port.";\r
description "Features supported by the port.";\r
- // reference "ofp_port.supported"; \r
- type oft:port-features-v10; \r
+ type oft:port-features-v10;\r
}\r
leaf peer-features-v10 { \r
description "Features advertised by peer.";\r
}\r
leaf peer-features-v10 { \r
description "Features advertised by peer.";\r
- // reference "ofp_port.peer"; \r
type oft:port-features-v10; \r
}\r
}\r
type oft:port-features-v10; \r
}\r
}\r
grouping match-grouping {\r
container match {\r
grouping match-grouping {\r
container match {\r
+ description "Match structure (OF v1.3)";\r
leaf type {\r
type identityref {\r
base oft:match-type-base;\r
leaf type {\r
type identityref {\r
base oft:match-type-base;\r
+ description "Bucket for use in groups.";\r
+ description "Relative weight of bucket. Only\r
+ defined for select groups.";\r
type uint16;\r
}\r
leaf watch-port {\r
type uint16;\r
}\r
leaf watch-port {\r
+ description "Port whose state affects whether this\r
+ bucket is live. Only required for fast\r
+ failover groups.";\r
type oft:port-number;\r
}\r
leaf watch-group {\r
type oft:port-number;\r
}\r
leaf watch-group {\r
+ description "Group whose state affects whether this\r
+ bucket is live. Only required for fast\r
+ failover groups.";\r
uses ofaction:actions;\r
}\r
\r
uses ofaction:actions;\r
}\r
\r
// # MESSAGE Structures\r
/* Immutable messages. */\r
grouping ofHeader {\r
// # MESSAGE Structures\r
/* Immutable messages. */\r
grouping ofHeader {\r
- //reference "ofpt_header struct in Openflow Switch 1.3 Spec"\r
+ reference "ofp_header struct in Openflow Switch 1.3 Spec";\r
leaf version {\r
type uint8;\r
leaf version {\r
type uint8;\r
- //reference "OpenFlow Header - OFP_VERSION";\r
+ description "OpenFlow version";\r
}\r
leaf xid {\r
type uint32;\r
}\r
leaf xid {\r
type uint32;\r
- //reference "OpenFlow Header - transaction id";\r
+ description "Transaction ID";\r
}\r
}\r
grouping ofHelloElementHeader {\r
}\r
}\r
grouping ofHelloElementHeader {\r
- //reference "ofpt_hello_elem_header struct in Openflow Switch 1.3 Spec"\r
+ reference "ofpt_hello_elem_header struct in Openflow Switch 1.3 Spec";\r
leaf type {\r
type oft:hello-element-type;\r
//reference "OpenFlow Header element type - OFPHET_*";\r
}\r
}\r
grouping hello {\r
leaf type {\r
type oft:hello-element-type;\r
//reference "OpenFlow Header element type - OFPHET_*";\r
}\r
}\r
grouping hello {\r
- // reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_HELLO message in Openflow Switch 1.3 Spec";\r
/* Symmetric message */\r
uses ofHeader;\r
\r
/* Symmetric message */\r
uses ofHeader;\r
\r
}\r
}\r
grouping error {\r
}\r
}\r
grouping error {\r
- // reference "OFPT_ERROR message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_ERROR message in Openflow Switch 1.3 Spec";\r
/* Symmetric message */\r
uses ofHeader;\r
\r
/* Symmetric message */\r
uses ofHeader;\r
\r
}\r
}\r
grouping echo-request {\r
}\r
}\r
grouping echo-request {\r
- // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec";\r
/* Symmetric message */\r
uses ofHeader;\r
\r
/* Symmetric message */\r
uses ofHeader;\r
\r
}\r
}\r
grouping echo-reply {\r
}\r
}\r
grouping echo-reply {\r
- // reference "OFPT_ECHO_REPLY message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_ECHO_REPLY message in Openflow Switch 1.3 Spec";\r
/* Symmetric message */\r
uses ofHeader;\r
\r
/* Symmetric message */\r
uses ofHeader;\r
\r
}\r
}\r
grouping experimenter {\r
}\r
}\r
grouping experimenter {\r
- // reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec";\r
/* Symmetric message */\r
uses ofHeader;\r
\r
/* Symmetric message */\r
uses ofHeader;\r
\r
}\r
/* Switch configuration messages. */\r
grouping features-request {\r
}\r
/* Switch configuration messages. */\r
grouping features-request {\r
- // reference "OFPT_FEATURES_REQUEST message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_FEATURES_REQUEST message in Openflow Switch 1.3 Spec";\r
/* Controller/switch message */\r
uses ofHeader;\r
}\r
grouping features-reply {\r
/* Controller/switch message */\r
uses ofHeader;\r
}\r
grouping features-reply {\r
- // reference "OFPT_FEATURES_REPLY message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_FEATURES_REPLY message in Openflow Switch 1.3 Spec";\r
/* Controller/switch message */\r
uses ofHeader;\r
\r
/* Controller/switch message */\r
uses ofHeader;\r
\r
}\r
}\r
grouping get-config-request {\r
}\r
}\r
grouping get-config-request {\r
- // reference "OFPT_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec";\r
/* Controller/switch message */\r
uses ofHeader;\r
}\r
grouping get-config-reply {\r
/* Controller/switch message */\r
uses ofHeader;\r
}\r
grouping get-config-reply {\r
- // reference "OFPT_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec";\r
/* Controller/switch message */\r
uses ofHeader;\r
\r
/* Controller/switch message */\r
uses ofHeader;\r
\r
}\r
}\r
grouping set-config {\r
}\r
}\r
grouping set-config {\r
- // reference "OFPT_SET_CONFIG message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_SET_CONFIG message in Openflow Switch 1.3 Spec";\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
}\r
/* Asynchronous messages. */\r
grouping packet-in {\r
}\r
/* Asynchronous messages. */\r
grouping packet-in {\r
- // reference "OFPT_PACKET_IN message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_PACKET_IN message in Openflow Switch 1.3 Spec";\r
/* Async message */\r
\r
uses ofHeader;\r
/* Async message */\r
\r
uses ofHeader;\r
type uint64;\r
}\r
uses match-grouping;\r
type uint64;\r
}\r
uses match-grouping;\r
- \r
-// struct ofp_match match; /* Packet metadata. Variable size. */\r
-// /* The variable size and padded match is always followed by:\r
-// * - Exactly 2 all-zero padding bytes, then\r
-// * - An Ethernet frame whose length is inferred from header.length.\r
-// * The padding bytes preceding the Ethernet frame ensure that the IP\r
-// * header (if any) following the Ethernet header is 32-bit aligned.\r
-// */\r
leaf data {\r
type binary;\r
}\r
leaf data {\r
type binary;\r
}\r
}\r
}\r
grouping flow-removed {\r
}\r
}\r
grouping flow-removed {\r
- // reference "OFPT_FLOW_REMOVED message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_FLOW_REMOVED message in Openflow Switch 1.3 Spec";\r
/* Async message */\r
uses ofHeader;\r
\r
/* Async message */\r
uses ofHeader;\r
\r
uses oxm:match-v10-grouping;\r
} \r
grouping port-status {\r
uses oxm:match-v10-grouping;\r
} \r
grouping port-status {\r
- // reference "OFPT_PORT_STATUS message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_PORT_STATUS message in Openflow Switch 1.3 Spec";\r
leaf reason {\r
type oft:port-reason;\r
}\r
leaf reason {\r
type oft:port-reason;\r
}\r
- } /* Async message */\r
/* Controller command messages. */\r
grouping packet-out {\r
/* Controller command messages. */\r
grouping packet-out {\r
- // reference "OFPT_PACKET_OUT message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_PACKET_OUT message in Openflow Switch 1.3 Spec";\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
}\r
} \r
grouping flow-mod {\r
}\r
} \r
grouping flow-mod {\r
- // reference "OFPT_FLOW_MOD message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_FLOW_MOD message in Openflow Switch 1.3 Spec";\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
uses ofaction:actions;\r
} \r
grouping group-mod {\r
uses ofaction:actions;\r
} \r
grouping group-mod {\r
- // reference "OFPT_GROUP_MOD message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_GROUP_MOD message in Openflow Switch 1.3 Spec";\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
}\r
\r
grouping port-mod {\r
}\r
\r
grouping port-mod {\r
- // reference "OFPT_PORT_MOD message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_PORT_MOD message in Openflow Switch 1.3 Spec";\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
}\r
} \r
grouping table-mod {\r
}\r
} \r
grouping table-mod {\r
- // reference "OFPT_TABLE_MOD message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_TABLE_MOD message in Openflow Switch 1.3 Spec";\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
\r
/* Multipart messages. */\r
grouping multipart-request {\r
\r
/* Multipart messages. */\r
grouping multipart-request {\r
- // reference "OFPT_MULTIPART_REQUEST message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_MULTIPART_REQUEST message in Openflow Switch 1.3 Spec";\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
\r
leaf type {\r
type oft:multipart-type;\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
\r
leaf type {\r
type oft:multipart-type;\r
leaf flags {\r
type oft:multipart-request-flags;\r
leaf flags {\r
type oft:multipart-request-flags;\r
choice multipart-request-body {\r
case multipart-request-desc-case {\r
container multipart-request-desc {\r
choice multipart-request-body {\r
case multipart-request-desc-case {\r
container multipart-request-desc {\r
}\r
} \r
grouping multipart-reply {\r
}\r
} \r
grouping multipart-reply {\r
- // reference "OFPT_MULTIPART_REPLY message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_MULTIPART_REPLY message in Openflow Switch 1.3 Spec";\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
} \r
/* Barrier messages. */\r
grouping barrier-request {\r
} \r
/* Barrier messages. */\r
grouping barrier-request {\r
- // reference "OFPT_BARRIER_REQUEST message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_BARRIER_REQUEST message in Openflow Switch 1.3 Spec";\r
/* Controller/switch message */\r
uses ofHeader;\r
} \r
grouping barrier-reply {\r
/* Controller/switch message */\r
uses ofHeader;\r
} \r
grouping barrier-reply {\r
- // reference "OFPT_BARRIER_REPLY message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_BARRIER_REPLY message in Openflow Switch 1.3 Spec";\r
/* Controller/switch message */\r
uses ofHeader;\r
} \r
/* Queue Configuration messages. */\r
grouping queue-get-config-request {\r
/* Controller/switch message */\r
uses ofHeader;\r
} \r
/* Queue Configuration messages. */\r
grouping queue-get-config-request {\r
- // reference "OFPT_QUEUE_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_QUEUE_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec";\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
}\r
} \r
grouping queue-get-config-reply {\r
}\r
} \r
grouping queue-get-config-reply {\r
- // reference "OFPT_QUEUE_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_QUEUE_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec";\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
}\r
/* Controller role change request messages. */\r
grouping role-request {\r
}\r
/* Controller role change request messages. */\r
grouping role-request {\r
- // reference "OFPT_ROLE_REQUEST message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_ROLE_REQUEST message in Openflow Switch 1.3 Spec";\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
}\r
} \r
grouping role-reply {\r
}\r
} \r
grouping role-reply {\r
- // reference "OFPT_ROLE_REPLY message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_ROLE_REPLY message in Openflow Switch 1.3 Spec";\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
} \r
/* Asynchronous message configuration. */\r
grouping get-async-request {\r
} \r
/* Asynchronous message configuration. */\r
grouping get-async-request {\r
- // reference "OFPT_GET_ASYNC_REQUEST message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_GET_ASYNC_REQUEST message in Openflow Switch 1.3 Spec";\r
/* Controller/switch message */\r
\r
uses ofHeader; \r
} \r
grouping get-async-reply {\r
/* Controller/switch message */\r
\r
uses ofHeader; \r
} \r
grouping get-async-reply {\r
- // reference "OFPT_GET_ASYNC_REPLY message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_GET_ASYNC_REPLY message in Openflow Switch 1.3 Spec";\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
uses async-body-grouping;\r
} \r
grouping set-async {\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
uses async-body-grouping;\r
} \r
grouping set-async {\r
- // reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec";\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
}\r
/* Meters and rate limiters configuration messages. */\r
grouping meter-mod {\r
}\r
/* Meters and rate limiters configuration messages. */\r
grouping meter-mod {\r
- // reference "OFPT_METER_MOD message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_METER_MOD message in Openflow Switch 1.3 Spec";\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
/* Controller/switch message */\r
\r
uses ofHeader;\r
/* Immutable messages. */\r
notification hello-message {\r
uses hello;\r
/* Immutable messages. */\r
notification hello-message {\r
uses hello;\r
- // reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_HELLO message in Openflow Switch 1.3 Spec";\r
\r
/* Symmetric message */\r
}\r
notification error-message {\r
uses error;\r
\r
/* Symmetric message */\r
}\r
notification error-message {\r
uses error;\r
- // reference "OFPT_ERROR message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_ERROR message in Openflow Switch 1.3 Spec";\r
\r
/* Symmetric message */\r
}\r
notification echo-request-message {\r
uses echo-request;\r
\r
/* Symmetric message */\r
}\r
notification echo-request-message {\r
uses echo-request;\r
- // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec";\r
\r
/* Symmetric message */\r
}\r
notification experimenter-message {\r
uses experimenter;\r
\r
/* Symmetric message */\r
}\r
notification experimenter-message {\r
uses experimenter;\r
- // reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"\r
+ reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec";\r
// TODO:: does switch send this when understood experimenter msg from lib?\r
/* Symmetric message */\r
}\r
// # Notification and RPCs\r
/* Symmetric RPC. */\r
rpc echo {\r
// TODO:: does switch send this when understood experimenter msg from lib?\r
/* Symmetric message */\r
}\r
// # Notification and RPCs\r
/* Symmetric RPC. */\r
rpc echo {\r
- // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"\r
input {\r
uses echo-request;\r
}\r
input {\r
uses echo-request;\r
}\r
}\r
\r
rpc echo-reply {\r
}\r
\r
rpc echo-reply {\r
- // reference "OFPT_ECHO_REQUEST message in Openflow Switch 1.3 Spec"\r
input {\r
uses echo-reply;\r
}\r
}\r
\r
rpc hello {\r
input {\r
uses echo-reply;\r
}\r
}\r
\r
rpc hello {\r
- // reference "OFPT_HELLO message in Openflow Switch 1.3 Spec"\r
input {\r
uses hello;\r
}\r
}\r
\r
rpc experimenter {\r
input {\r
uses hello;\r
}\r
}\r
\r
rpc experimenter {\r
- // reference "OFPT_EXPERIMENTER message in Openflow Switch 1.3 Spec"\r
input {\r
uses experimenter;\r
}\r
input {\r
uses experimenter;\r
}\r
\r
/* Switch configuration messages. */\r
rpc get-features {\r
\r
/* Switch configuration messages. */\r
rpc get-features {\r
- // reference "OFPT_FEATURES_REQUEST message in Openflow Switch 1.3 Spec"\r
input {\r
uses features-request;\r
}\r
input {\r
uses features-request;\r
}\r
}\r
\r
rpc get-config {\r
}\r
\r
rpc get-config {\r
- // reference "OFPT_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"\r
input {\r
uses get-config-request;\r
}\r
input {\r
uses get-config-request;\r
}\r
}\r
\r
rpc set-config {\r
}\r
\r
rpc set-config {\r
- // reference "OFPT_SET_CONFIG message in Openflow Switch 1.3 Spec"\r
input {\r
uses set-config;\r
} \r
input {\r
uses set-config;\r
} \r
/* Asynchronous messages. */\r
notification packet-in-message {\r
uses packet-in;\r
/* Asynchronous messages. */\r
notification packet-in-message {\r
uses packet-in;\r
- // reference "OFPT_PACKET_IN message in Openflow Switch 1.3 Spec"\r
\r
/* Async message */\r
}\r
notification flow-removed-message {\r
uses flow-removed;\r
\r
/* Async message */\r
}\r
notification flow-removed-message {\r
uses flow-removed;\r
- // reference "OFPT_FLOW_REMOVED message in Openflow Switch 1.3 Spec"\r
\r
/* Async message */\r
} \r
notification port-status-message {\r
uses port-status;\r
\r
/* Async message */\r
} \r
notification port-status-message {\r
uses port-status;\r
- // reference "OFPT_PORT_STATUS message in Openflow Switch 1.3 Spec"\r
\r
} /* Async message */\r
\r
\r
} /* Async message */\r
\r
rpc packet-out {\r
input {\r
uses packet-out;\r
rpc packet-out {\r
input {\r
uses packet-out;\r
- // reference "OFPT_PACKET_OUT message in Openflow Switch 1.3 Spec"\r
}\r
/* Controller/switch message */\r
} \r
rpc flow-mod {\r
input {\r
uses flow-mod;\r
}\r
/* Controller/switch message */\r
} \r
rpc flow-mod {\r
input {\r
uses flow-mod;\r
- // reference "OFPT_FLOW_MOD message in Openflow Switch 1.3 Spec"\r
}\r
/* Controller/switch message */\r
} \r
rpc group-mod {\r
input {\r
uses group-mod;\r
}\r
/* Controller/switch message */\r
} \r
rpc group-mod {\r
input {\r
uses group-mod;\r
- // reference "OFPT_GROUP_MOD message in Openflow Switch 1.3 Spec"\r
}\r
/* Controller/switch message */\r
} \r
rpc port-mod {\r
input {\r
uses port-mod;\r
}\r
/* Controller/switch message */\r
} \r
rpc port-mod {\r
input {\r
uses port-mod;\r
- // reference "OFPT_PORT_MOD message in Openflow Switch 1.3 Spec"\r
}\r
} /* Controller/switch message */\r
\r
rpc table-mod {\r
input {\r
uses table-mod;\r
}\r
} /* Controller/switch message */\r
\r
rpc table-mod {\r
input {\r
uses table-mod;\r
- // reference "OFPT_TABLE_MOD message in Openflow Switch 1.3 Spec"\r
}\r
} /* Controller/switch message */\r
\r
}\r
} /* Controller/switch message */\r
\r
/* Controller/switch message */\r
notification multipart-reply-message {\r
uses multipart-reply;\r
/* Controller/switch message */\r
notification multipart-reply-message {\r
uses multipart-reply;\r
- // reference "OFPT_MULTIPART_REPLY message in Openflow Switch 1.3 Spec"\r
// notification because of multiple following responses\r
} /* Controller/switch message */\r
\r
// notification because of multiple following responses\r
} /* Controller/switch message */\r
\r
rpc barrier {\r
input {\r
uses barrier-request;\r
rpc barrier {\r
input {\r
uses barrier-request;\r
- // reference "OFPT_BARRIER_REQUEST message in Openflow Switch 1.3 Spec"\r
}\r
output {\r
uses barrier-reply;\r
}\r
output {\r
uses barrier-reply;\r
- // reference "OFPT_BARRIER_REPLY message in Openflow Switch 1.3 Spec"\r
}\r
}\r
/* Queue Configuration messages. */\r
rpc get-queue-config {\r
input {\r
uses queue-get-config-request;\r
}\r
}\r
/* Queue Configuration messages. */\r
rpc get-queue-config {\r
input {\r
uses queue-get-config-request;\r
- // reference "OFPT_QUEUE_GET_CONFIG_REQUEST message in Openflow Switch 1.3 Spec"\r
}\r
output {\r
uses queue-get-config-reply;\r
}\r
output {\r
uses queue-get-config-reply;\r
- // reference "OFPT_QUEUE_GET_CONFIG_REPLY message in Openflow Switch 1.3 Spec"\r
rpc role-request {\r
input {\r
uses role-request;\r
rpc role-request {\r
input {\r
uses role-request;\r
- // reference "OFPT_ROLE_REQUEST message in Openflow Switch 1.3 Spec"\r
}\r
output {\r
uses role-reply;\r
}\r
output {\r
uses role-reply;\r
- // reference "OFPT_ROLE_REPLY message in Openflow Switch 1.3 Spec"\r
}\r
} /* Controller/switch message */\r
\r
}\r
} /* Controller/switch message */\r
\r
rpc get-async {\r
input {\r
uses get-async-request;\r
rpc get-async {\r
input {\r
uses get-async-request;\r
- // reference "OFPT_GET_ASYNC_REQUEST message in Openflow Switch 1.3 Spec"\r
}\r
output {\r
uses get-async-reply;\r
}\r
output {\r
uses get-async-reply;\r
- // reference "OFPT_GET_ASYNC_REPLY message in Openflow Switch 1.3 Spec"\r
}\r
} \r
/* Controller/switch message */\r
rpc set-async {\r
input { \r
uses set-async;\r
}\r
} \r
/* Controller/switch message */\r
rpc set-async {\r
input { \r
uses set-async;\r
- // reference "OFPT_SET_ASYNC message in Openflow Switch 1.3 Spec"\r
rpc meter-mod {\r
input {\r
uses meter-mod;\r
rpc meter-mod {\r
input {\r
uses meter-mod;\r
- // reference "OFPT_METER_MOD message in Openflow Switch 1.3 Spec"\r
}\r
} /* Controller/switch message */\r
}
\ No newline at end of file
}\r
} /* Controller/switch message */\r
}
\ No newline at end of file
prefix "oft";
revision "2013-07-31" {
prefix "oft";
revision "2013-07-31" {
- //description "OpenFlow 1.3 - common types model";
+ description "OpenFlow 1.3 - common types model";
+ description "Port numbering. Ports are numbered starting from 1 -
+ supports special / reserved values (in OF v1.3)";
type uint32;
}
typedef port-number-values {
type uint32;
}
typedef port-number-values {
+ description "Reserved OpenFlow Port (fake output \"ports\") (OF v1.3).";
type enumeration {
enum MAX {
type enumeration {
enum MAX {
- value -256; // 0xffffff00
+ description "Maximum number of physical and logical switch ports.";
+ value -256; // 0xffffff00
+ description "Send the packet out the input port. This
+ reserved port must be explicitly used
+ in order to send back out of the input
+ port.";
value -8; // 0xfffffff8
}
enum TABLE {
value -8; // 0xfffffff8
}
enum TABLE {
+ description "Submit the packet to the first flow table
+ NB: This destination port can only be
+ used in packet-out messages.";
value -7; // 0xfffffff9
}
enum NORMAL {
value -7; // 0xfffffff9
}
enum NORMAL {
+ description "Process with normal L2/L3 switching.";
value -6; // 0xfffffffa
}
enum FLOOD {
value -6; // 0xfffffffa
}
enum FLOOD {
+ description "All physical ports in VLAN, except input
+ port and those blocked or link down.";
value -5; // 0xfffffffb
}
enum ALL {
value -5; // 0xfffffffb
}
enum ALL {
+ description "All physical ports except input port.";
value -4; // 0xfffffffc
}
enum CONTROLLER {
value -4; // 0xfffffffc
}
enum CONTROLLER {
+ description "Send to controller.";
value -3; // 0xfffffffd
}
enum LOCAL {
value -3; // 0xfffffffd
}
enum LOCAL {
+ description "Local openflow \"port\".";
value -2; // 0xfffffffe
}
enum ANY {
value -2; // 0xfffffffe
}
enum ANY {
+ description "Wildcard port used only for flow mod
+ (delete) and flow stats requests. Selects
+ all flows regardless of output port
+ (including flows with no output port).";
value -1; // 0xffffffff
}
}
}
typedef port-features {
value -1; // 0xffffffff
}
}
}
typedef port-features {
- ////description "Features of ports available in datapath.";
- //reference "ofp_port_features";
+ description "Features of ports available in datapath.";
type bits {
bit _10mb_hd {
position 0;
type bits {
bit _10mb_hd {
position 0;
- //description "10 Mb half-duplex rate support.";
+ description "10 Mb half-duplex rate support.";
}
bit _10mb-fd {
position 1;
}
bit _10mb-fd {
position 1;
- //description "10 Mb full-duplex rate support.";
+ description "10 Mb full-duplex rate support.";
}
bit _100mb-hd {
position 2;
}
bit _100mb-hd {
position 2;
- //description "100 Mb half-duplex rate support.";
+ description "100 Mb half-duplex rate support.";
}
bit _100mb-fd {
position 3;
}
bit _100mb-fd {
position 3;
- //description "100 Mb full-duplex rate support.";
+ description "100 Mb full-duplex rate support.";
}
bit _1gb-hd {
position 4;
}
bit _1gb-hd {
position 4;
- //description "1 Gb half-duplex rate support.";
+ description "1 Gb half-duplex rate support.";
}
bit _1gb-fd {
position 5;
}
bit _1gb-fd {
position 5;
- //description "1 Gb full-duplex rate support.";
+ description "1 Gb full-duplex rate support.";
}
bit _10gb-fd {
position 6;
}
bit _10gb-fd {
position 6;
- //description "10 Gb full-duplex rate support.";
+ description "10 Gb full-duplex rate support.";
}
bit _40gb-fd {
position 7;
}
bit _40gb-fd {
position 7;
- //description "40 Gb full-duplex rate support.";
+ description "40 Gb full-duplex rate support.";
}
bit _100gb-fd {
position 8;
}
bit _100gb-fd {
position 8;
- //description "100 Gb full-duplex rate support.";
+ description "100 Gb full-duplex rate support.";
}
bit _1tb-fd {
position 9;
}
bit _1tb-fd {
position 9;
- //description "1 Tb full-duplex rate support.";
+ description "1 Tb full-duplex rate support.";
}
bit other {
position 10;
}
bit other {
position 10;
- //description "Other rate, not in the list.";
+ description "Other rate, not in the list.";
}
bit copper {
position 11;
}
bit copper {
position 11;
- //description "Copper medium.";
+ description "Copper medium.";
}
bit fiber {
position 12;
}
bit fiber {
position 12;
- //description "Fiber medium.";
+ description "Fiber medium.";
}
bit autoneg {
position 13;
}
bit autoneg {
position 13;
- //description "Auto-negotiation.";
+ description "Auto-negotiation.";
}
bit pause {
position 14;
}
bit pause {
position 14;
- //description "Pause.";
}
bit pause-asym {
position 15;
}
bit pause-asym {
position 15;
- //description "Asymmetric pause.";
+ description "Asymmetric pause.";
+ description "Base identity for instruction types";
+ description "Base identity for action types";
+ description "Capabilities supported by the datapath.";
type bits {
bit OFPC_FLOW_STATS {
position 0;
type bits {
bit OFPC_FLOW_STATS {
position 0;
}
typedef switch-config-flag {
}
typedef switch-config-flag {
- /* Handling of IP fragments. */
+ description " Handling of IP fragments. ";
type enumeration {
enum FRAG_NORMAL {
value 0;
type enumeration {
enum FRAG_NORMAL {
value 0;
}
typedef flow-removed-reason {
}
typedef flow-removed-reason {
+ description "Why was this flow removed?";
type enumeration {
enum OFPRR_IDLE_TIMEOUT {
value 0;
type enumeration {
enum OFPRR_IDLE_TIMEOUT {
value 0;
+ description "What changed about the physical port";
type enumeration {
enum OFPPR_ADD {
value 0;
type enumeration {
enum OFPPR_ADD {
value 0;
typedef flow-mod-command {
/* ofp_flow_mod_command */
type enumeration {
typedef flow-mod-command {
/* ofp_flow_mod_command */
type enumeration {
- enum OFPFC_ADD {
- value 0;
- description "New flow.";
+ enum OFPFC_ADD {
+ value 0;
+ description "New flow.";
}
enum OFPFC_MODIFY {
value 1;
}
enum OFPFC_MODIFY {
value 1;
type bits {
bit OFPFF_SEND_FLOW_REM {
position 0;
type bits {
bit OFPFF_SEND_FLOW_REM {
position 0;
- /* Send flow removed message when flow expires or is deleted. */
+ description "Send flow removed message when flow expires or is deleted.";
}
bit OFPFF_CHECK_OVERLAP {
position 1;
}
bit OFPFF_CHECK_OVERLAP {
position 1;
- /* Check for overlapping entries first. */
+ description "Check for overlapping entries first.";
}
bit OFPFF_RESET_COUNTS {
position 2;
}
bit OFPFF_RESET_COUNTS {
position 2;
- /* Reset flow packet and byte counts. */
+ description "Reset flow packet and byte counts.";
}
bit OFPFF_NO_PKT_COUNTS {
position 3;
}
bit OFPFF_NO_PKT_COUNTS {
position 3;
- /* Don't keep track of packet count. */
+ description "Don't keep track of packet count.";
}
bit OFPFF_NO_BYT_COUNTS {
position 4;
}
bit OFPFF_NO_BYT_COUNTS {
position 4;
- /* Don't keep track of byte count. */
+ description "Don't keep track of byte count.";
typedef group-mod-command {
/* ofp_group_mod_command */
type enumeration {
typedef group-mod-command {
/* ofp_group_mod_command */
type enumeration {
- enum OFPGC_ADD {
- value 0;
- description "New group.";
+ enum OFPGC_ADD {
+ value 0;
+ description "New group.";
}
enum OFPGC_MODIFY {
value 1;
}
enum OFPGC_MODIFY {
value 1;
value 2;
description "Delete all matching groups.";
}
value 2;
description "Delete all matching groups.";
}
}
}
typedef group-type {
/* ofp_group_type */
type enumeration {
}
}
typedef group-type {
/* ofp_group_type */
type enumeration {
- enum OFPGT_ALL {
- value 0;
- description "All (multicast/broadcast) group.";
+ enum OFPGT_ALL {
+ value 0;
+ description "All (multicast/broadcast) group.";
}
enum OFPGT_SELECT {
value 1;
}
enum OFPGT_SELECT {
value 1;
typedef table-values {
/* ofp_table */
type enumeration {
typedef table-values {
/* ofp_table */
type enumeration {
- enum OFPTT_MAX {
- value 254; // 0xfe
- description "Last usable table number.";
+ enum OFPTT_MAX {
+ value 254; // 0xfe
+ description "Last usable table number.";
}
enum OFPTT_ALL {
value 255; // 0xff
}
enum OFPTT_ALL {
value 255; // 0xff
- typedef group {
- /* ofp_group - Group numbering. Groups can use any number up to OFPG_MAX.*/
- type enumeration {
- enum OFPG_MAX {
- value -256; //0xffffff00
- description "Last usable group number";
- }
-
- /* Fake groups. */
- enum OFPG_ALL {
- value -4; //0xfffffffc
- description "Represents all groups for group delete commands";
- }
- enum OFPG_ANY {
- value -1; //0xffffffff
- description "Wildcard group used only for flow stats requests.
- Selects all flows regardless of group (including flows with no group)";
-
- }
- }
-
- }
-
+ typedef group {
+ /* ofp_group - Group numbering. Groups can use any number up to OFPG_MAX.*/
+ type enumeration {
+ enum OFPG_MAX {
+ value -256; //0xffffff00
+ description "Last usable group number";
+ }
+ /* Fake groups. */
+ enum OFPG_ALL {
+ value -4; //0xfffffffc
+ description "Represents all groups for group delete commands";
+ }
+ enum OFPG_ANY {
+ value -1; //0xffffffff
+ description "Wildcard group used only for flow stats requests.
+ Selects all flows regardless of group (including flows with no group)";
+ }
+ }
+ }
+
typedef multipart-request-flags {
typedef multipart-request-flags {
- description
- "enum ofp_multipart_request_flags ";
+ description "enum ofp_multipart_request_flags ";
type bits {
bit OFPMPF_REQ_MORE {
type bits {
bit OFPMPF_REQ_MORE {
- //description "More requests to follow.";
+ description "More requests to follow.";
position 0;
}
}
}
typedef multipart-type {
position 0;
}
}
}
typedef multipart-type {
- /* ofp_multipart_type */
type enumeration {
enum OFPMP_DESC {
value 0;
type enumeration {
enum OFPMP_DESC {
value 0;
- typedef meter {
- /* ofp_meter - Meter numbering. Flow meters can use any number up to OFPM_MAX*/
- type enumeration {
- enum OFPM_MAX {
- value -65536; //0xffff0000
- description "Last usable meter number";
- }
-
- /* Virtual meters. */
- enum OFPM_SLOWPATH {
- value -3; //0xfffffffd
- description "Meter for slow datapath";
- }
- enum OFPM_CONTROLLER {
- value -2; //0xfffffffe
- description "Meter for controller connection";
- }
- enum OFPM_ALL {
- value -1; //0xffffffff
- description "Represents all meters for stat requests commands";
- }
- }
-
- }
+ typedef meter {
+ description "Meter numbering. Flow meters can use any number up to OFPM_MAX";
+ type enumeration {
+ enum OFPM_MAX {
+ value -65536; //0xffff0000
+ description "Last usable meter number";
+ }
+ /* Virtual meters. */
+ enum OFPM_SLOWPATH {
+ value -3; //0xfffffffd
+ description "Meter for slow datapath";
+ }
+ enum OFPM_CONTROLLER {
+ value -2; //0xfffffffe
+ description "Meter for controller connection";
+ }
+ enum OFPM_ALL {
+ value -1; //0xffffffff
+ description "Represents all meters for stat requests commands";
+ }
+ }
+ }
typedef table-config {
/* ofp_table_config */
typedef table-config {
/* ofp_table_config */
/* ofp_group_type */
type bits {
bit OFPGT_ALL {
/* ofp_group_type */
type bits {
bit OFPGT_ALL {
- /* All (multicast/broadcast) group. */
+ description "All (multicast/broadcast) group.";
position 0;
}
bit OFPGT_SELECT {
position 0;
}
bit OFPGT_SELECT {
+ description "Select group.";
position 1;
}
bit OFPGT_INDIRECT {
position 1;
}
bit OFPGT_INDIRECT {
+ description "Indirect group.";
position 2;
}
bit OFPGT_FF {
position 2;
}
bit OFPGT_FF {
- /* Fast failover group. */
+ description "Fast failover group.";
/* ofp_group_capabilities */
type bits {
bit OFPGFC_SELECT_WEIGHT {
/* ofp_group_capabilities */
type bits {
bit OFPGFC_SELECT_WEIGHT {
- /* Support weight for select groups */
+ description "Support weight for select groups";
position 0;
}
bit OFPGFC_SELECT_LIVENESS {
position 0;
}
bit OFPGFC_SELECT_LIVENESS {
- /* Support liveness for select groups */
+ description "Support liveness for select groups";
position 1;
}
bit OFPGFC_CHAINING {
position 1;
}
bit OFPGFC_CHAINING {
- /* Support chaining groups */
+ description "Support chaining group";
position 2;
}
bit OFPGFC_CHAINING_CHECKS {
position 2;
}
bit OFPGFC_CHAINING_CHECKS {
- /* Check chaining for loops and delete */
+ description "Check chaining for loops and delete";
position 3;
}
}
}
typedef ipv6-exthdr-flags {
position 3;
}
}
}
typedef ipv6-exthdr-flags {
+ description "Bit definitions for IPv6 Extension Header pseudo-field.";
type bits {
bit nonext {
description "<No next header> encountered.";
type bits {
bit nonext {
description "<No next header> encountered.";
}
typedef port-number-values-v10 {
}
typedef port-number-values-v10 {
+ description "Port numbering. Physical ports are numbered starting from 1.";
type enumeration {
enum MAX {
value 65280; // 0xff00
}
enum IN_PORT {
type enumeration {
enum MAX {
value 65280; // 0xff00
}
enum IN_PORT {
+ description "Send the packet out the input port. This
+ virtual port must be explicitly used
+ in order to send back out of the input
+ port.";
value 65528; // 0xfff8
}
enum TABLE {
value 65528; // 0xfff8
}
enum TABLE {
+ description "Perform actions in flow table.
+ NB: This can only be the destination
+ port for packet-out messages.";
value 65529; // 0xfff9
}
enum NORMAL {
value 65529; // 0xfff9
}
enum NORMAL {
+ description "Process with normal L2/L3 switching.";
value 65530; // 0xfffa
}
enum FLOOD {
value 65530; // 0xfffa
}
enum FLOOD {
+ description "All physical ports except input port and
+ those disabled by STP.";
value 65531; // 0xfffb
}
enum ALL {
value 65531; // 0xfffb
}
enum ALL {
+ description "All physical ports except input port.";
value 65532; // 0xfffc
}
enum CONTROLLER {
value 65532; // 0xfffc
}
enum CONTROLLER {
+ description "Send to controller.";
value 65533; // 0xfffd
}
enum LOCAL {
value 65533; // 0xfffd
}
enum LOCAL {
+ description "Local openflow \"port\".";
value 65534; // 0xfffe
}
enum NONE {
value 65534; // 0xfffe
}
enum NONE {
+ description "Not associated with a physical port.";
value 65535; // 0xffff
}
}
value 65535; // 0xffff
}
}
to configure the port's behavior.";
type bits {
bit port-down {
to configure the port's behavior.";
type bits {
bit port-down {
- //description " Port is administratively down.";
+ description " Port is administratively down.";
position 0;
}
bit no-stp {
position 0;
}
bit no-stp {
- //description" Disable 802.1D spanning tree on port.";
+ description" Disable 802.1D spanning tree on port.";
position 1;
}
bit no-recv {
position 1;
}
bit no-recv {
- //description " Drop all packets received by port.";
+ description " Drop all packets received by port.";
position 2;
}
bit no-recv-stp {
position 2;
}
bit no-recv-stp {
- //description " Drop received 802.1D STP packets.";
+ description " Drop received 802.1D STP packets.";
position 3;
}
bit no-flood {
position 3;
}
bit no-flood {
- //description " Do not include this port when flooding.";
+ description " Do not include this port when flooding.";
position 4;
}
bit no-fwd {
position 4;
}
bit no-fwd {
- //description " Drop packets forwarded to port.";
+ description " Drop packets forwarded to port.";
position 5;
}
bit no-packet-in {
position 5;
}
bit no-packet-in {
- //description "Do not send packet-in msgs for port.";
+ description "Do not send packet-in msgs for port.";
position 6;
}
}
}
typedef port-state-v10 {
position 6;
}
}
}
typedef port-state-v10 {
- description
- "Current state of the physical port. These are not configurable from
- the controller.";
+ description "Current state of the physical port. These are not configurable from
+ the controller.";
type bits {
bit link_down {
type bits {
bit link_down {
- //description "No physical link present.";
+ description "No physical link present.";
position 0;
}
bit blocked {
position 0;
}
bit blocked {
- //description "Port is blocked";
+ description "Port is blocked";
- //description "Live for Fast Failover Group.";
+ description "Live for Fast Failover Group.";
position 2;
}
bit stp_listen {
position 2;
}
bit stp_listen {
- //description "Not learning or relaying frames.";
+ description "Not learning or relaying frames.";
- //description "Learning but not relaying frames.";
+ description "Learning but not relaying frames.";
- //description "Learning and relaying frames.";
+ description "Learning and relaying frames.";
- //description "Not part of spanning tree.";
+ description "Not part of spanning tree.";
- //description "Bit mask for OFPPS_STP_* values.";
+ description "Bit mask for OFPPS_STP_* values.";
}
}
}
typedef port-features-v10 {
}
}
}
typedef port-features-v10 {
- ////description "Features of ports available in datapath.";
- //reference "ofp_port_features";
+ description "Features of ports available in datapath.";
+ reference "ofp_port_features";
type bits {
bit _10mb-hd {
position 0;
type bits {
bit _10mb-hd {
position 0;
- //description "10 Mb half-duplex rate support.";
+ description "10 Mb half-duplex rate support.";
}
bit _10mb-fd {
position 1;
}
bit _10mb-fd {
position 1;
- //description "10 Mb full-duplex rate support.";
+ description "10 Mb full-duplex rate support.";
}
bit _100mb-hd {
position 2;
}
bit _100mb-hd {
position 2;
- //description "100 Mb half-duplex rate support.";
+ description "100 Mb half-duplex rate support.";
}
bit _100mb-fd {
position 3;
}
bit _100mb-fd {
position 3;
- //description "100 Mb full-duplex rate support.";
+ description "100 Mb full-duplex rate support.";
}
bit _1gb-hd {
position 4;
}
bit _1gb-hd {
position 4;
- //description "1 Gb half-duplex rate support.";
+ description "1 Gb half-duplex rate support.";
}
bit _1gb-fd {
position 5;
}
bit _1gb-fd {
position 5;
- //description "1 Gb full-duplex rate support.";
+ description "1 Gb full-duplex rate support.";
}
bit _10gb-fd {
position 6;
}
bit _10gb-fd {
position 6;
- //description "10 Gb full-duplex rate support.";
+ description "10 Gb full-duplex rate support.";
}
bit copper {
position 7;
}
bit copper {
position 7;
- //description "Copper medium.";
+ description "Copper medium.";
}
bit fiber {
position 8;
}
bit fiber {
position 8;
- //description "Fiber medium.";
+ description "Fiber medium.";
}
bit autoneg {
position 9;
}
bit autoneg {
position 9;
- //description "Auto-negotiation.";
+ description "Auto-negotiation.";
}
bit pause {
position 10;
}
bit pause {
position 10;
- //description "Pause.";
}
bit pause-asym {
position 11;
}
bit pause-asym {
position 11;
- //description "Asymmetric pause.";
+ description "Asymmetric pause.";
type bits {
bit OFPC_FLOW_STATS {
position 0;
type bits {
bit OFPC_FLOW_STATS {
position 0;
+ description "Flow statistics.";
}
bit OFPC_TABLE_STATS {
position 1;
}
bit OFPC_TABLE_STATS {
position 1;
- /* Table statistics. */
+ description "Table statistics.";
}
bit OFPC_PORT_STATS {
position 2;
}
bit OFPC_PORT_STATS {
position 2;
+ description "Port statistics.";
}
bit OFPC_STP {
position 3;
}
bit OFPC_STP {
position 3;
- /* 802.1d spanning tree. */
+ description "802.1d spanning tree.";
}
bit OFPC_RESERVED {
position 4;
}
bit OFPC_RESERVED {
position 4;
- /* Reserved, must be zero. */
+ description "Reserved, must be zero.";
}
bit OFPC_IP_REASM {
position 5;
}
bit OFPC_IP_REASM {
position 5;
- /* Can reassemble IP fragments. */
+ description "Can reassemble IP fragments.";
}
bit OFPC_QUEUE_STATS {
position 6;
}
bit OFPC_QUEUE_STATS {
position 6;
- /* Queue statistics. */
+ description "Queue statistics.";
}
bit OFPC_ARP_MATCH_IP {
position 8;
}
bit OFPC_ARP_MATCH_IP {
position 8;
- /* Match IP addresses in ARP pkts. */
+ description "Match IP addresses in ARP pkts.";
type bits {
bit OFPFF_SEND_FLOW_REM {
position 0;
type bits {
bit OFPFF_SEND_FLOW_REM {
position 0;
- /* Send flow removed message when flow expires or is deleted. */
+ description "Send flow removed message when flow expires or is deleted.";
}
bit OFPFF_CHECK_OVERLAP {
position 1;
}
bit OFPFF_CHECK_OVERLAP {
position 1;
- /* Check for overlapping entries first. */
+ description "Check for overlapping entries first.";
}
bit OFPFF_EMERG {
position 2;
}
bit OFPFF_EMERG {
position 2;
- /* Reset flow packet and byte counts. */
+ description "Reset flow packet and byte counts.";
type bits {
bit OFPAT_OUTPUT {
position 0;
type bits {
bit OFPAT_OUTPUT {
position 0;
- /* Output to switch port. */
+ description "Output to switch port.";
}
bit OFPAT_SET_VLAN_VID {
position 1;
}
bit OFPAT_SET_VLAN_VID {
position 1;
- /* Set the 802.1q VLAN id. */
+ description "Set the 802.1q VLAN id.";
}
bit OFPAT_SET_VLAN_PCP {
position 2;
}
bit OFPAT_SET_VLAN_PCP {
position 2;
- /* Set the 802.1q priority. */
+ description "Set the 802.1q priority.";
}
bit OFPAT_STRIP_VLAN {
position 3;
}
bit OFPAT_STRIP_VLAN {
position 3;
- /* Strip the 802.1q header. */
+ description "Strip the 802.1q header.";
}
bit OFPAT_SET_DL_SRC {
position 4;
}
bit OFPAT_SET_DL_SRC {
position 4;
- /* Ethernet source address. */
+ description "Ethernet source address.";
}
bit OFPAT_SET_DL_DST {
position 5;
}
bit OFPAT_SET_DL_DST {
position 5;
- /* Ethernet destination address. */
+ description "Ethernet destination address.";
}
bit OFPAT_SET_NW_SRC {
position 6;
}
bit OFPAT_SET_NW_SRC {
position 6;
- /* IP source address. */
+ description "IP source address.";
}
bit OFPAT_SET_NW_DST {
position 7;
}
bit OFPAT_SET_NW_DST {
position 7;
- /* IP destination address. */
+ description "IP destination address.";
}
bit OFPAT_SET_NW_TOS {
position 8;
}
bit OFPAT_SET_NW_TOS {
position 8;
- /* IP ToS (DSCP field, 6 bits). */
+ description "IP ToS (DSCP field, 6 bits).";
}
bit OFPAT_SET_TP_SRC {
position 9;
}
bit OFPAT_SET_TP_SRC {
position 9;
- /* TCP/UDP source port. */
+ description "TCP/UDP source port.";
}
bit OFPAT_SET_TP_DST {
position 10;
}
bit OFPAT_SET_TP_DST {
position 10;
- /* TCP/UDP destination port. */
+ description "TCP/UDP destination port.";
}
bit OFPAT_ENQUEUE {
position 11;
}
bit OFPAT_ENQUEUE {
position 11;
+ description "Output to queue.";
}
bit OFPAT_VENDOR {
position 12;
}
bit OFPAT_VENDOR {
position 12;
- /* Experimenter in later versions */
+ description "Experimenter in later versions.";
}
}
}
typedef flow-wildcards-v10 {
/* ofp_flow_wildcards */
}
}
}
typedef flow-wildcards-v10 {
/* ofp_flow_wildcards */
+ description "Flow wildcards - NW_SRC_MASK & NW_DST_MASK are handled separately";
type bits {
bit IN_PORT {
type bits {
bit IN_PORT {
+ description "Switch input port.";
position 0;
}
bit DL_VLAN {
position 0;
}
bit DL_VLAN {
+ description "VLAN id.";
position 1;
}
bit DL_SRC {
position 1;
}
bit DL_SRC {
+ description "Ethernet source address.";
position 2;
}
bit DL_DST {
position 2;
}
bit DL_DST {
+ description "Ethernet destination address.";
position 3;
}
bit DL_TYPE {
position 3;
}
bit DL_TYPE {
+ description "Ethernet frame type.";
position 4;
}
bit NW_PROTO {
position 4;
}
bit NW_PROTO {
+ description "IP protocol.";
position 5;
}
bit TP_SRC {
position 5;
}
bit TP_SRC {
+ description "TCP/UDP source port.";
position 6;
}
bit TP_DST {
position 6;
}
bit TP_DST {
+ description "TCP/UDP destination port.";
position 7;
}
bit DL_VLAN_PCP {
position 7;
}
bit DL_VLAN_PCP {
+ description "VLAN priority.";
position 20;
}
bit NW_TOS {
position 20;
}
bit NW_TOS {
+ description "IP ToS (DSCP field, 6 bits).";
prefix "ofs";
revision "2013-09-27" {
prefix "ofs";
revision "2013-09-27" {
- //description "Model of system messages used in OpenFlow Protocol Library";
+ description "Model of system messages used in OpenFlow Protocol Library";
}
notification disconnect-event {
}
notification disconnect-event {
+ description "Disconnect notification";
leaf info {
type string;
}
}
notification switch-idle-event {
leaf info {
type string;
}
}
notification switch-idle-event {
+ description "Switch-idle notification";
leaf info {
type string;
}
leaf info {
type string;
}