blob: 3b15ebf12ca9333ab2ba5483cacd9a9e34c5480a [file] [log] [blame]
module voltha {
namespace "urn:opencord:params:xml:ns:voltha:voltha";
prefix voltha;
organization "CORD";
contact
" Any name";
description
"";
revision "2016-11-15" {
description "Initial revision.";
reference "reference";
}
grouping DeviceGroup {
description
"";
leaf id {
type string;
description
"";
}
list logical_devices {
key "id";
uses LogicalDevice;
description
"";
}
list devices {
key "id";
uses Device;
description
"";
}
}
grouping DeviceGroups {
description
"";
list items {
key "id";
uses DeviceGroup;
description
"";
}
}
typedef AlarmFilterRuleKey {
type enumeration {
enum id {
description "";
}
enum type {
description "";
}
enum severity {
description "";
}
enum resource_id {
description "";
}
enum category {
description "";
}
enum device_id {
description "";
}
}
description
"";
}
grouping AlarmFilterRule {
description
"";
leaf key {
type AlarmFilterRuleKey;
description
"";
}
leaf value {
type string;
description
"";
}
}
grouping AlarmFilter {
description
"";
leaf id {
type string;
description
"";
}
list rules {
key "key";
uses AlarmFilterRule;
description
"";
}
}
grouping AlarmFilters {
description
"";
list filters {
key "id";
uses AlarmFilter;
description
"";
}
}
container VolthaInstance {
description
"Top-level (root) node for a Voltha Instance";
leaf instance_id {
type string;
description
"";
}
leaf version {
type string;
description
"";
}
leaf log_level {
type LogLevel;
description
"";
}
container health {
uses HealthStatus;
description
"";
}
list adapters {
key "id";
uses Adapter;
description
"";
}
list logical_devices {
key "id";
uses LogicalDevice;
description
"";
}
list devices {
key "id";
uses Device;
description
"";
}
list device_types {
key "id";
uses DeviceType;
description
"";
}
list device_groups {
key "id";
uses DeviceGroup;
description
"";
}
list alarm_filters {
key "id";
uses AlarmFilter;
description
"";
}
}
container VolthaInstances {
description
"";
list items {
key "items";
leaf items {
type string;
description
"";
}
description
"";
}
}
container Voltha {
description
"Voltha representing the entire Voltha cluster";
leaf version {
type string;
description
"";
}
leaf log_level {
type LogLevel;
description
"";
}
list instances {
key "instance_id";
uses VolthaInstance_grouping;
description
"";
}
list adapters {
key "id";
uses Adapter;
description
"";
}
list logical_devices {
key "id";
uses LogicalDevice;
description
"";
}
list devices {
key "id";
uses Device;
description
"";
}
list device_groups {
key "id";
uses DeviceGroup;
description
"";
}
}
grouping VolthaInstance_grouping {
description
"Top-level (root) node for a Voltha Instance";
leaf instance_id {
type string;
description
"";
}
leaf version {
type string;
description
"";
}
leaf log_level {
type LogLevel;
description
"";
}
container health {
uses HealthStatus;
description
"";
}
list adapters {
key "id";
uses Adapter;
description
"";
}
list logical_devices {
key "id";
uses LogicalDevice;
description
"";
}
list devices {
key "id";
uses Device;
description
"";
}
list device_types {
key "id";
uses DeviceType;
description
"";
}
list device_groups {
key "id";
uses DeviceGroup;
description
"";
}
list alarm_filters {
key "id";
uses AlarmFilter;
description
"";
}
}
grouping VolthaInstances_grouping {
description
"";
list items {
key "items";
leaf items {
type string;
description
"";
}
description
"";
}
}
grouping Voltha_grouping {
description
"Voltha representing the entire Voltha cluster";
leaf version {
type string;
description
"";
}
leaf log_level {
type LogLevel;
description
"";
}
list instances {
key "instance_id";
uses VolthaInstance_grouping;
description
"";
}
list adapters {
key "id";
uses Adapter;
description
"";
}
list logical_devices {
key "id";
uses LogicalDevice;
description
"";
}
list devices {
key "id";
uses Device;
description
"";
}
list device_groups {
key "id";
uses DeviceGroup;
description
"";
}
}
grouping AdapterConfig {
description
"";
leaf log_level {
type LogLevel;
description
"Common adapter config attributes here";
}
container additional_config {
uses Any;
description
"Custom (vendor-specific) configuration attributes";
}
}
grouping Adapter {
description
"Adapter (software plugin)";
leaf id {
type string;
description
"Unique name of adapter, matching the python packate name under
voltha adapters.";
}
leaf vendor {
type string;
description
"";
}
leaf version {
type string;
description
"";
}
container config {
uses AdapterConfig;
description
"Adapter configuration";
}
container additional_description {
uses Any;
description
"Custom descriptors and custom configuration";
}
list logical_device_ids {
key "logical_device_ids";
leaf logical_device_ids {
type string;
description
"Logical devices owned ";
}
description
"Logical devices owned ";
}
}
grouping Adapters {
description
"";
list items {
key "id";
uses Adapter;
description
"";
}
}
grouping Any {
description
"`Any` contains an arbitrary serialized protocol buffer message along with a
URL that describes the type of the serialized message.
Protobuf library provides support to pack unpack Any values in the form
of utility functions or additional generated methods of the Any type.
Example 1: Pack and unpack a message in C++.
Foo foo = ...;
Any any;
any.PackFrom(foo);
...
if (any.UnpackTo(&foo))
...
Example 2: Pack and unpack a message in Java.
Foo foo = ...;
Any any = Any.pack(foo);
...
if (any.is(Foo.class))
foo = any.unpack(Foo.class);
Example 3: Pack and unpack a message in Python.
foo = Foo(...)
any = Any()
any.Pack(foo)
...
if any.Is(Foo.DESCRIPTOR):
any.Unpack(foo)
...
The pack methods provided by protobuf library will by default use
'type.googleapis.com full.type.name' as the type URL and the unpack
methods only use the fully qualified type name after the last ' '
in the type URL, for example foo.bar.com x y.z will yield type
name y.z .
JSON
====
The JSON representation of an `Any` value uses the regular
representation of the deserialized, embedded message, with an
additional field `@type` which contains the type URL. Example:
package google.profile;
message Person
string first_name = 1;
string last_name = 2;
@type : type.googleapis.com google.profile.Person ,
firstName : string ,
lastName : string
If the embedded message type is well-known and has a custom JSON
representation, that representation will be embedded adding a field
`value` which holds the custom JSON in addition to the `@type`
field. Example (for message google.protobuf.Duration ):
@type : type.googleapis.com google.protobuf.Duration ,
value : 1.212s
";
leaf type_url {
type string;
description
"A URL resource name whose content describes the type of the
serialized protocol buffer message.
For URLs which use the scheme `http`, `https`, or no scheme, the
following restrictions and interpretations apply:
If no scheme is provided, `https` is assumed.
The last segment of the URL's path must represent the fully
qualified name of the type (as in `path google.protobuf.Duration`).
The name should be in a canonical form (e.g., leading . is
not accepted).
An HTTP GET on the URL must yield a google.protobuf.Type
value in binary format, or produce an error.
Applications are allowed to cache lookup results based on the
URL, or have them precompiled into a binary to avoid any
lookup. Therefore, binary compatibility needs to be preserved
on changes to types. (Use versioned type names to manage
breaking changes.)
Schemes other than `http`, `https` (or the empty scheme) might be
used with implementation specific semantics.";
}
leaf value {
type binary;
description
"Must be a valid serialized protocol buffer of the above specified type.";
}
}
typedef LogLevel {
type enumeration {
enum DEBUG {
description "";
}
enum INFO {
description "";
}
enum WARNING {
description "";
}
enum ERROR {
description "";
}
enum CRITICAL {
description "";
}
}
description
"Logging verbosity level";
}
typedef AdminState {
type enumeration {
enum UNKNOWN {
description "";
}
enum PREPROVISIONED {
description "";
}
enum ENABLED {
description "";
}
enum DISABLED {
description "";
}
}
description
"Administrative State";
}
typedef OperStatus {
type enumeration {
enum UNKNOWN {
description "";
}
enum DISCOVERED {
description "";
}
enum ACTIVATING {
description "";
}
enum TESTING {
description "";
}
enum ACTIVE {
description "";
}
enum FAILED {
description "";
}
}
description
"Operational Status";
}
typedef ConnectStatus {
type enumeration {
enum UNKNOWN {
description "";
}
enum UNREACHABLE {
description "";
}
enum REACHABLE {
description "";
}
}
description
"Connectivity Status";
}
grouping ID {
description
"Convey a resource identifier";
leaf id {
type string;
description
"";
}
}
typedef PortType {
type enumeration {
enum UNKNOWN {
description "";
}
enum ETHERNET_NNI {
description "";
}
enum ETHERNET_UNI {
description "";
}
enum PON_OLT {
description "";
}
enum PON_ONU {
description "";
}
}
description
"";
}
grouping DeviceType {
description
"A Device Type";
leaf id {
type string;
description
"Unique name for the device type";
}
leaf adapter {
type string;
description
"Name of the adapter that handles device type";
}
leaf accepts_bulk_flow_update {
type boolean;
description
"Capabilitities";
}
leaf accepts_add_remove_flow_updates {
type boolean;
description
"";
}
}
grouping DeviceTypes {
description
"A plurality of device types";
list items {
key "id";
uses DeviceType;
description
"";
}
}
grouping PmConfig {
description
"";
leaf name {
type string;
description
"";
}
leaf type {
type PmType;
description
"";
}
leaf enabled {
type boolean;
description
"Whether or not this metric makes it to Kafka";
}
leaf sample_freq {
type uint32;
description
"Sample rate in 10ths of a second";
}
typedef PmType {
type enumeration {
enum COUNTER {
description "";
}
enum GUAGE {
description "";
}
enum STATE {
description "";
}
}
description
"";
}
}
grouping PmGroupConfig {
description
"";
leaf group_name {
type string;
description
"";
}
leaf group_freq {
type uint32;
description
"Frequency applicable to the grop";
}
leaf enabled {
type boolean;
description
"Enable disable group level only";
}
list metrics {
key "name";
uses PmConfig;
description
"";
}
}
grouping PmConfigs {
description
"";
leaf id {
type string;
description
"To work around a chameleon POST bug";
}
leaf default_freq {
type uint32;
description
"Default sample rate";
}
leaf grouped {
type boolean;
description
"Forces group names and group semantics";
}
leaf freq_override {
type boolean;
description
"Allows Pm to set an individual sample frequency";
}
list groups {
key "group_name";
uses PmGroupConfig;
description
"The groups if grouped is true";
}
list metrics {
key "name";
uses PmConfig;
description
"The metrics themselves if grouped is false.";
}
}
grouping PeerPort {
description
"";
leaf device_id {
type string;
description
"";
}
leaf port_no {
type uint32;
description
"";
}
}
grouping Port {
description
"";
leaf port_no {
type uint32;
description
"Device-unique port number";
}
leaf label {
type string;
description
"Arbitrary port label";
}
leaf type {
type PortType;
description
"Type of port";
}
leaf admin_state {
type AdminState;
description
"";
}
leaf oper_status {
type OperStatus;
description
"";
}
leaf device_id {
type string;
description
"Unique .id of device that owns this port";
}
list peers {
key "device_id";
uses PeerPort;
description
"";
}
}
grouping Ports {
description
"";
list items {
key "port_no";
uses Port;
description
"";
}
}
grouping ProxyAddress {
description
"";
leaf device_id {
type string;
description
"Which device to use as proxy to this device";
}
leaf channel_id {
type uint32;
description
"Sub-address within proxy";
}
leaf onu_id {
type uint32;
description
"onu identifier; optional";
}
leaf onu_session_id {
type uint32;
description
"session identifier for the ONU; optional";
}
}
grouping Device {
description
"A Physical Device instance";
leaf id {
type string;
description
"Voltha's device identifier";
}
leaf type {
type string;
description
"Device type, refers to one of the registered device types";
}
leaf root {
type boolean;
description
"Is this device a root device. Each logical switch has one root
device that is associated with the logical flow switch.";
}
leaf parent_id {
type string;
description
"Parent device id, in the device tree (for a root device, the parent_id
is the logical_device.id)";
}
leaf parent_port_no {
type uint32;
description
"";
}
leaf vendor {
type string;
description
"Vendor, version, serial number, etc.";
}
leaf model {
type string;
description
"";
}
leaf hardware_version {
type string;
description
"";
}
leaf firmware_version {
type string;
description
"";
}
leaf software_version {
type string;
description
"";
}
leaf serial_number {
type string;
description
"";
}
leaf adapter {
type string;
description
"Addapter that takes care of device";
}
leaf vlan {
type uint32;
description
"Device contact on vlan (if 0, no vlan)";
}
container proxy_address {
uses ProxyAddress;
description
"";
}
leaf admin_state {
type AdminState;
description
"";
}
leaf oper_status {
type OperStatus;
description
"";
}
leaf reason {
type string;
description
"Used in FAILED state";
}
leaf connect_status {
type ConnectStatus;
description
"";
}
container custom {
uses Any;
description
"Device type specific attributes
TODO additional common attribute here";
}
list ports {
key "port_no";
uses Port;
description
"";
}
container flows {
uses Flows;
description
"";
}
container flow_groups {
uses FlowGroups;
description
"";
}
container pm_configs {
uses PmConfigs;
description
"PmConfigs will eventually converted to a child node of the
device to falicitata callbacks and to simplify manipulation.";
}
choice choice_0 {
case mac_address {
leaf mac_address {
type string;
description
"Device contact MAC address (format: xx:xx:xx:xx:xx:xx )";
}
}
case ipv4_address {
leaf ipv4_address {
type string;
description
"Device contact IPv4 address (format: a.b.c.d or can use hostname too)";
}
}
case ipv6_address {
leaf ipv6_address {
type string;
description
"Device contact IPv6 address using the canonical string form
( xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx )";
}
}
case host_and_port {
leaf host_and_port {
type string;
description
"";
}
}
}
}
grouping Devices {
description
"";
list items {
key "id";
uses Device;
description
"";
}
}
grouping Empty {
description
"A generic empty message that you can re-use to avoid defining duplicated
empty messages in your APIs. A typical example is to use it as the request
or the response type of an API method. For instance:
service Foo
rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
The JSON representation for `Empty` is empty JSON object ` `.";
}
grouping HealthStatus {
description
"Encode health status of a Voltha instance";
leaf state {
type HealthState;
description
"Current state of health of this Voltha instance";
}
typedef HealthState {
type enumeration {
enum HEALTHY {
description "";
}
enum OVERLOADED {
description "";
}
enum DYING {
description "";
}
}
description
"Health states";
}
}
grouping LogicalPort {
description
"";
leaf id {
type string;
description
"";
}
container ofp_port {
uses ofp_port;
description
"";
}
leaf device_id {
type string;
description
"";
}
leaf device_port_no {
type uint32;
description
"";
}
leaf root_port {
type boolean;
description
"";
}
}
grouping LogicalPorts {
description
"";
list items {
key "id";
uses LogicalPort;
description
"";
}
}
grouping LogicalDevice {
description
"";
leaf id {
type string;
description
"unique id of logical device";
}
leaf datapath_id {
type uint64;
description
"unique datapath id for the logical device (used by the SDN controller)";
}
container desc {
uses ofp_desc;
description
"device description";
}
container switch_features {
uses ofp_switch_features;
description
"device features";
}
leaf root_device_id {
type string;
description
"name of the root device anchoring logical device";
}
list ports {
key "id";
uses LogicalPort;
description
"logical device ports";
}
container flows {
uses Flows;
description
"flows configured on the logical device";
}
container flow_groups {
uses FlowGroups;
description
"flow groups configured on the logical device";
}
}
grouping LogicalDevices {
description
"";
list items {
key "id";
uses LogicalDevice;
description
"";
}
}
typedef Access {
type enumeration {
enum CONFIG {
description "";
}
enum READ_ONLY {
description "";
}
enum REAL_TIME {
description "";
}
}
description
"";
}
container ChildNode {
description
"";
leaf key {
type string;
description
"";
}
}
typedef ofp_port_no {
type enumeration {
enum OFPP_INVALID {
description "";
}
enum OFPP_MAX {
description "";
}
enum OFPP_IN_PORT {
description "";
}
enum OFPP_TABLE {
description "";
}
enum OFPP_NORMAL {
description "";
}
enum OFPP_FLOOD {
description "";
}
enum OFPP_ALL {
description "";
}
enum OFPP_CONTROLLER {
description "";
}
enum OFPP_LOCAL {
description "";
}
enum OFPP_ANY {
description "";
}
}
description
"Port numbering. Ports are numbered starting from 1.Version number:
OpenFlow versions released: 0x01 = 1.0 ; 0x02 = 1.1 ; 0x03 = 1.2
0x04 = 1.3
The most significant bit in the version field is reserved and must
be set to zero.
#define OFP_VERSION 0x04
#define PIPELINE_TABLES 64
#define OFP_MAX_TABLE_NAME_LEN 32
#define OFP_MAX_PORT_NAME_LEN 16
Official IANA registered port for OpenFlow.#define OFP_TCP_PORT 6653
#define OFP_SSL_PORT 6653
#define OFP_ETH_ALEN 6 Bytes in an Ethernet address. ";
}
typedef ofp_type {
type enumeration {
enum OFPT_HELLO {
description "";
}
enum OFPT_ERROR {
description "";
}
enum OFPT_ECHO_REQUEST {
description "";
}
enum OFPT_ECHO_REPLY {
description "";
}
enum OFPT_EXPERIMENTER {
description "";
}
enum OFPT_FEATURES_REQUEST {
description "";
}
enum OFPT_FEATURES_REPLY {
description "";
}
enum OFPT_GET_CONFIG_REQUEST {
description "";
}
enum OFPT_GET_CONFIG_REPLY {
description "";
}
enum OFPT_SET_CONFIG {
description "";
}
enum OFPT_PACKET_IN {
description "";
}
enum OFPT_FLOW_REMOVED {
description "";
}
enum OFPT_PORT_STATUS {
description "";
}
enum OFPT_PACKET_OUT {
description "";
}
enum OFPT_FLOW_MOD {
description "";
}
enum OFPT_GROUP_MOD {
description "";
}
enum OFPT_PORT_MOD {
description "";
}
enum OFPT_TABLE_MOD {
description "";
}
enum OFPT_MULTIPART_REQUEST {
description "";
}
enum OFPT_MULTIPART_REPLY {
description "";
}
enum OFPT_BARRIER_REQUEST {
description "";
}
enum OFPT_BARRIER_REPLY {
description "";
}
enum OFPT_QUEUE_GET_CONFIG_REQUEST {
description "";
}
enum OFPT_QUEUE_GET_CONFIG_REPLY {
description "";
}
enum OFPT_ROLE_REQUEST {
description "";
}
enum OFPT_ROLE_REPLY {
description "";
}
enum OFPT_GET_ASYNC_REQUEST {
description "";
}
enum OFPT_GET_ASYNC_REPLY {
description "";
}
enum OFPT_SET_ASYNC {
description "";
}
enum OFPT_METER_MOD {
description "";
}
}
description
"";
}
typedef ofp_hello_elem_type {
type enumeration {
enum OFPHET_INVALID {
description "";
}
enum OFPHET_VERSIONBITMAP {
description "";
}
}
description
"Hello elements types.";
}
typedef ofp_config_flags {
type enumeration {
enum OFPC_FRAG_NORMAL {
description "";
}
enum OFPC_FRAG_DROP {
description "";
}
enum OFPC_FRAG_REASM {
description "";
}
enum OFPC_FRAG_MASK {
description "";
}
}
description
"#define OFP_DEFAULT_MISS_SEND_LEN 128";
}
typedef ofp_table_config {
type enumeration {
enum OFPTC_INVALID {
description "";
}
enum OFPTC_DEPRECATED_MASK {
description "";
}
}
description
"Flags to configure the table. Reserved for future use.";
}
typedef ofp_table {
type enumeration {
enum OFPTT_INVALID {
description "";
}
enum OFPTT_MAX {
description "";
}
enum OFPTT_ALL {
description "";
}
}
description
"Table numbering. Tables can use any number up to OFPT_MAX.";
}
typedef ofp_capabilities {
type enumeration {
enum OFPC_INVALID {
description "";
}
enum OFPC_FLOW_STATS {
description "";
}
enum OFPC_TABLE_STATS {
description "";
}
enum OFPC_PORT_STATS {
description "";
}
enum OFPC_GROUP_STATS {
description "";
}
enum OFPC_IP_REASM {
description "";
}
enum OFPC_QUEUE_STATS {
description "";
}
enum OFPC_PORT_BLOCKED {
description "";
}
}
description
"Capabilities supported by the datapath.";
}
typedef ofp_port_config {
type enumeration {
enum OFPPC_INVALID {
description "";
}
enum OFPPC_PORT_DOWN {
description "";
}
enum OFPPC_NO_RECV {
description "";
}
enum OFPPC_NO_FWD {
description "";
}
enum OFPPC_NO_PACKET_IN {
description "";
}
}
description
"Flags to indicate behavior of the physical port. These flags are
used in ofp_port to describe the current configuration. They are
used in the ofp_port_mod message to configure the port's behavior.";
}
typedef ofp_port_state {
type enumeration {
enum OFPPS_INVALID {
description "";
}
enum OFPPS_LINK_DOWN {
description "";
}
enum OFPPS_BLOCKED {
description "";
}
enum OFPPS_LIVE {
description "";
}
}
description
"Current state of the physical port. These are not configurable from
the controller.";
}
typedef ofp_port_features {
type enumeration {
enum OFPPF_INVALID {
description "";
}
enum OFPPF_10MB_HD {
description "";
}
enum OFPPF_10MB_FD {
description "";
}
enum OFPPF_100MB_HD {
description "";
}
enum OFPPF_100MB_FD {
description "";
}
enum OFPPF_1GB_HD {
description "";
}
enum OFPPF_1GB_FD {
description "";
}
enum OFPPF_10GB_FD {
description "";
}
enum OFPPF_40GB_FD {
description "";
}
enum OFPPF_100GB_FD {
description "";
}
enum OFPPF_1TB_FD {
description "";
}
enum OFPPF_OTHER {
description "";
}
enum OFPPF_COPPER {
description "";
}
enum OFPPF_FIBER {
description "";
}
enum OFPPF_AUTONEG {
description "";
}
enum OFPPF_PAUSE {
description "";
}
enum OFPPF_PAUSE_ASYM {
description "";
}
}
description
"Features of ports available in a datapath.";
}
typedef ofp_port_reason {
type enumeration {
enum OFPPR_ADD {
description "";
}
enum OFPPR_DELETE {
description "";
}
enum OFPPR_MODIFY {
description "";
}
}
description
"What changed about the physical port";
}
typedef ofp_match_type {
type enumeration {
enum OFPMT_STANDARD {
description "";
}
enum OFPMT_OXM {
description "";
}
}
description
"The match type indicates the match structure (set of fields that compose the
match) in use. The match type is placed in the type field at the beginning
of all match structures. The OpenFlow Extensible Match type corresponds
to OXM TLV format described below and must be supported by all OpenFlow
switches. Extensions that define other match types may be published on the
ONF wiki. Support for extensions is optional.
## -------------------------- #### OpenFlow Extensible Match. #### -------------------------- ##";
}
typedef ofp_oxm_class {
type enumeration {
enum OFPXMC_NXM_0 {
description "";
}
enum OFPXMC_NXM_1 {
description "";
}
enum OFPXMC_OPENFLOW_BASIC {
description "";
}
enum OFPXMC_EXPERIMENTER {
description "";
}
}
description
"OXM Class IDs.
The high order bit differentiate reserved classes from member classes.
Classes 0x0000 to 0x7FFF are member classes, allocated by ONF.
Classes 0x8000 to 0xFFFE are reserved classes, reserved for standardisation.
Components of a OXM TLV header.
Those macros are not valid for the experimenter class, macros for the
experimenter class will depend on the experimenter header used.#define OXM_HEADER__(CLASS, FIELD, HASMASK, LENGTH)
(((CLASS) 16) | ((FIELD) 9) | ((HASMASK) 8) | (LENGTH))
#define OXM_HEADER(CLASS, FIELD, LENGTH)
OXM_HEADER__(CLASS, FIELD, 0, LENGTH)
#define OXM_HEADER_W(CLASS, FIELD, LENGTH)
OXM_HEADER__(CLASS, FIELD, 1, (LENGTH) 2)
#define OXM_CLASS(HEADER) ((HEADER) 16)
#define OXM_FIELD(HEADER) (((HEADER) 9) & 0x7f)
#define OXM_TYPE(HEADER) (((HEADER) 9) & 0x7fffff)
#define OXM_HASMASK(HEADER) (((HEADER) 8) & 1)
#define OXM_LENGTH(HEADER) ((HEADER) & 0xff)
#define OXM_MAKE_WILD_HEADER(HEADER)
OXM_HEADER_W(OXM_CLASS(HEADER), OXM_FIELD(HEADER), OXM_LENGTH(HEADER))";
}
typedef oxm_ofb_field_types {
type enumeration {
enum OFPXMT_OFB_IN_PORT {
description "";
}
enum OFPXMT_OFB_IN_PHY_PORT {
description "";
}
enum OFPXMT_OFB_METADATA {
description "";
}
enum OFPXMT_OFB_ETH_DST {
description "";
}
enum OFPXMT_OFB_ETH_SRC {
description "";
}
enum OFPXMT_OFB_ETH_TYPE {
description "";
}
enum OFPXMT_OFB_VLAN_VID {
description "";
}
enum OFPXMT_OFB_VLAN_PCP {
description "";
}
enum OFPXMT_OFB_IP_DSCP {
description "";
}
enum OFPXMT_OFB_IP_ECN {
description "";
}
enum OFPXMT_OFB_IP_PROTO {
description "";
}
enum OFPXMT_OFB_IPV4_SRC {
description "";
}
enum OFPXMT_OFB_IPV4_DST {
description "";
}
enum OFPXMT_OFB_TCP_SRC {
description "";
}
enum OFPXMT_OFB_TCP_DST {
description "";
}
enum OFPXMT_OFB_UDP_SRC {
description "";
}
enum OFPXMT_OFB_UDP_DST {
description "";
}
enum OFPXMT_OFB_SCTP_SRC {
description "";
}
enum OFPXMT_OFB_SCTP_DST {
description "";
}
enum OFPXMT_OFB_ICMPV4_TYPE {
description "";
}
enum OFPXMT_OFB_ICMPV4_CODE {
description "";
}
enum OFPXMT_OFB_ARP_OP {
description "";
}
enum OFPXMT_OFB_ARP_SPA {
description "";
}
enum OFPXMT_OFB_ARP_TPA {
description "";
}
enum OFPXMT_OFB_ARP_SHA {
description "";
}
enum OFPXMT_OFB_ARP_THA {
description "";
}
enum OFPXMT_OFB_IPV6_SRC {
description "";
}
enum OFPXMT_OFB_IPV6_DST {
description "";
}
enum OFPXMT_OFB_IPV6_FLABEL {
description "";
}
enum OFPXMT_OFB_ICMPV6_TYPE {
description "";
}
enum OFPXMT_OFB_ICMPV6_CODE {
description "";
}
enum OFPXMT_OFB_IPV6_ND_TARGET {
description "";
}
enum OFPXMT_OFB_IPV6_ND_SLL {
description "";
}
enum OFPXMT_OFB_IPV6_ND_TLL {
description "";
}
enum OFPXMT_OFB_MPLS_LABEL {
description "";
}
enum OFPXMT_OFB_MPLS_TC {
description "";
}
enum OFPXMT_OFB_MPLS_BOS {
description "";
}
enum OFPXMT_OFB_PBB_ISID {
description "";
}
enum OFPXMT_OFB_TUNNEL_ID {
description "";
}
enum OFPXMT_OFB_IPV6_EXTHDR {
description "";
}
}
description
"OXM Flow field types for OpenFlow basic class.";
}
typedef ofp_vlan_id {
type enumeration {
enum OFPVID_NONE {
description "";
}
enum OFPVID_PRESENT {
description "";
}
}
description
"The VLAN id is 12-bits, so we can use the entire 16 bits to indicate
special conditions.";
}
typedef ofp_ipv6exthdr_flags {
type enumeration {
enum OFPIEH_INVALID {
description "";
}
enum OFPIEH_NONEXT {
description "";
}
enum OFPIEH_ESP {
description "";
}
enum OFPIEH_AUTH {
description "";
}
enum OFPIEH_DEST {
description "";
}
enum OFPIEH_FRAG {
description "";
}
enum OFPIEH_ROUTER {
description "";
}
enum OFPIEH_HOP {
description "";
}
enum OFPIEH_UNREP {
description "";
}
enum OFPIEH_UNSEQ {
description "";
}
}
description
"Bit definitions for IPv6 Extension Header pseudo-field.#define OFP_VLAN_NONE OFPVID_NONE";
}
typedef ofp_action_type {
type enumeration {
enum OFPAT_OUTPUT {
description "";
}
enum OFPAT_COPY_TTL_OUT {
description "";
}
enum OFPAT_COPY_TTL_IN {
description "";
}
enum OFPAT_SET_MPLS_TTL {
description "";
}
enum OFPAT_DEC_MPLS_TTL {
description "";
}
enum OFPAT_PUSH_VLAN {
description "";
}
enum OFPAT_POP_VLAN {
description "";
}
enum OFPAT_PUSH_MPLS {
description "";
}
enum OFPAT_POP_MPLS {
description "";
}
enum OFPAT_SET_QUEUE {
description "";
}
enum OFPAT_GROUP {
description "";
}
enum OFPAT_SET_NW_TTL {
description "";
}
enum OFPAT_DEC_NW_TTL {
description "";
}
enum OFPAT_SET_FIELD {
description "";
}
enum OFPAT_PUSH_PBB {
description "";
}
enum OFPAT_POP_PBB {
description "";
}
enum OFPAT_EXPERIMENTER {
description "";
}
}
description
"## ----------------- #### OpenFlow Actions. #### ----------------- ##";
}
typedef ofp_controller_max_len {
type enumeration {
enum OFPCML_INVALID {
description "";
}
enum OFPCML_MAX {
description "";
}
enum OFPCML_NO_BUFFER {
description "";
}
}
description
"";
}
typedef ofp_instruction_type {
type enumeration {
enum OFPIT_INVALID {
description "";
}
enum OFPIT_GOTO_TABLE {
description "";
}
enum OFPIT_WRITE_METADATA {
description "";
}
enum OFPIT_WRITE_ACTIONS {
description "";
}
enum OFPIT_APPLY_ACTIONS {
description "";
}
enum OFPIT_CLEAR_ACTIONS {
description "";
}
enum OFPIT_METER {
description "";
}
enum OFPIT_EXPERIMENTER {
description "";
}
}
description
"## ---------------------- #### OpenFlow Instructions. #### ---------------------- ##";
}
typedef ofp_flow_mod_command {
type enumeration {
enum OFPFC_ADD {
description "";
}
enum OFPFC_MODIFY {
description "";
}
enum OFPFC_MODIFY_STRICT {
description "";
}
enum OFPFC_DELETE {
description "";
}
enum OFPFC_DELETE_STRICT {
description "";
}
}
description
"## --------------------------- #### OpenFlow Flow Modification. #### --------------------------- ##";
}
typedef ofp_flow_mod_flags {
type enumeration {
enum OFPFF_INVALID {
description "";
}
enum OFPFF_SEND_FLOW_REM {
description "";
}
enum OFPFF_CHECK_OVERLAP {
description "";
}
enum OFPFF_RESET_COUNTS {
description "";
}
enum OFPFF_NO_PKT_COUNTS {
description "";
}
enum OFPFF_NO_BYT_COUNTS {
description "";
}
}
description
"Value used in idle_timeout and hard_timeout to indicate that the entry
is permanent.#define OFP_FLOW_PERMANENT 0
By default, choose a priority in the middle.#define OFP_DEFAULT_PRIORITY 0x8000";
}
typedef ofp_group {
type enumeration {
enum OFPG_INVALID {
description "";
}
enum OFPG_MAX {
description "";
}
enum OFPG_ALL {
description "";
}
enum OFPG_ANY {
description "";
}
}
description
"Group numbering. Groups can use any number up to OFPG_MAX.";
}
typedef ofp_group_mod_command {
type enumeration {
enum OFPGC_ADD {
description "";
}
enum OFPGC_MODIFY {
description "";
}
enum OFPGC_DELETE {
description "";
}
}
description
"Group commands";
}
typedef ofp_group_type {
type enumeration {
enum OFPGT_ALL {
description "";
}
enum OFPGT_SELECT {
description "";
}
enum OFPGT_INDIRECT {
description "";
}
enum OFPGT_FF {
description "";
}
}
description
"Group types. Values in the range 128; 255 are reserved for experimental
use.";
}
typedef ofp_packet_in_reason {
type enumeration {
enum OFPR_NO_MATCH {
description "";
}
enum OFPR_ACTION {
description "";
}
enum OFPR_INVALID_TTL {
description "";
}
}
description
"Why is this packet being sent to the controller?";
}
typedef ofp_flow_removed_reason {
type enumeration {
enum OFPRR_IDLE_TIMEOUT {
description "";
}
enum OFPRR_HARD_TIMEOUT {
description "";
}
enum OFPRR_DELETE {
description "";
}
enum OFPRR_GROUP_DELETE {
description "";
}
enum OFPRR_METER_DELETE {
description "";
}
}
description
"Why was this flow removed?";
}
typedef ofp_meter {
type enumeration {
enum OFPM_ZERO {
description "";
}
enum OFPM_MAX {
description "";
}
enum OFPM_SLOWPATH {
description "";
}
enum OFPM_CONTROLLER {
description "";
}
enum OFPM_ALL {
description "";
}
}
description
"Meter numbering. Flow meters can use any number up to OFPM_MAX.";
}
typedef ofp_meter_band_type {
type enumeration {
enum OFPMBT_INVALID {
description "";
}
enum OFPMBT_DROP {
description "";
}
enum OFPMBT_DSCP_REMARK {
description "";
}
enum OFPMBT_EXPERIMENTER {
description "";
}
}
description
"Meter band types";
}
typedef ofp_meter_mod_command {
type enumeration {
enum OFPMC_ADD {
description "";
}
enum OFPMC_MODIFY {
description "";
}
enum OFPMC_DELETE {
description "";
}
}
description
"Meter commands";
}
typedef ofp_meter_flags {
type enumeration {
enum OFPMF_INVALID {
description "";
}
enum OFPMF_KBPS {
description "";
}
enum OFPMF_PKTPS {
description "";
}
enum OFPMF_BURST {
description "";
}
enum OFPMF_STATS {
description "";
}
}
description
"Meter configuration flags";
}
typedef ofp_error_type {
type enumeration {
enum OFPET_HELLO_FAILED {
description "";
}
enum OFPET_BAD_REQUEST {
description "";
}
enum OFPET_BAD_ACTION {
description "";
}
enum OFPET_BAD_INSTRUCTION {
description "";
}
enum OFPET_BAD_MATCH {
description "";
}
enum OFPET_FLOW_MOD_FAILED {
description "";
}
enum OFPET_GROUP_MOD_FAILED {
description "";
}
enum OFPET_PORT_MOD_FAILED {
description "";
}
enum OFPET_TABLE_MOD_FAILED {
description "";
}
enum OFPET_QUEUE_OP_FAILED {
description "";
}
enum OFPET_SWITCH_CONFIG_FAILED {
description "";
}
enum OFPET_ROLE_REQUEST_FAILED {
description "";
}
enum OFPET_METER_MOD_FAILED {
description "";
}
enum OFPET_TABLE_FEATURES_FAILED {
description "";
}
enum OFPET_EXPERIMENTER {
description "";
}
}
description
"Values for 'type' in ofp_error_message. These values are immutable: they
will not change in future versions of the protocol (although new values may
be added).";
}
typedef ofp_hello_failed_code {
type enumeration {
enum OFPHFC_INCOMPATIBLE {
description "";
}
enum OFPHFC_EPERM {
description "";
}
}
description
"ofp_error_msg 'code' values for OFPET_HELLO_FAILED. 'data' contains an
ASCII text string that may give failure details.";
}
typedef ofp_bad_request_code {
type enumeration {
enum OFPBRC_BAD_VERSION {
description "";
}
enum OFPBRC_BAD_TYPE {
description "";
}
enum OFPBRC_BAD_MULTIPART {
description "";
}
enum OFPBRC_BAD_EXPERIMENTER {
description "";
}
enum OFPBRC_BAD_EXP_TYPE {
description "";
}
enum OFPBRC_EPERM {
description "";
}
enum OFPBRC_BAD_LEN {
description "";
}
enum OFPBRC_BUFFER_EMPTY {
description "";
}
enum OFPBRC_BUFFER_UNKNOWN {
description "";
}
enum OFPBRC_BAD_TABLE_ID {
description "";
}
enum OFPBRC_IS_SLAVE {
description "";
}
enum OFPBRC_BAD_PORT {
description "";
}
enum OFPBRC_BAD_PACKET {
description "";
}
enum OFPBRC_MULTIPART_BUFFER_OVERFLOW {
description "";
}
}
description
"ofp_error_msg 'code' values for OFPET_BAD_REQUEST. 'data' contains at least
the first 64 bytes of the failed request.";
}
typedef ofp_bad_action_code {
type enumeration {
enum OFPBAC_BAD_TYPE {
description "";
}
enum OFPBAC_BAD_LEN {
description "";
}
enum OFPBAC_BAD_EXPERIMENTER {
description "";
}
enum OFPBAC_BAD_EXP_TYPE {
description "";
}
enum OFPBAC_BAD_OUT_PORT {
description "";
}
enum OFPBAC_BAD_ARGUMENT {
description "";
}
enum OFPBAC_EPERM {
description "";
}
enum OFPBAC_TOO_MANY {
description "";
}
enum OFPBAC_BAD_QUEUE {
description "";
}
enum OFPBAC_BAD_OUT_GROUP {
description "";
}
enum OFPBAC_MATCH_INCONSISTENT {
description "";
}
enum OFPBAC_UNSUPPORTED_ORDER {
description "";
}
enum OFPBAC_BAD_TAG {
description "";
}
enum OFPBAC_BAD_SET_TYPE {
description "";
}
enum OFPBAC_BAD_SET_LEN {
description "";
}
enum OFPBAC_BAD_SET_ARGUMENT {
description "";
}
}
description
"ofp_error_msg 'code' values for OFPET_BAD_ACTION. 'data' contains at least
the first 64 bytes of the failed request.";
}
typedef ofp_bad_instruction_code {
type enumeration {
enum OFPBIC_UNKNOWN_INST {
description "";
}
enum OFPBIC_UNSUP_INST {
description "";
}
enum OFPBIC_BAD_TABLE_ID {
description "";
}
enum OFPBIC_UNSUP_METADATA {
description "";
}
enum OFPBIC_UNSUP_METADATA_MASK {
description "";
}
enum OFPBIC_BAD_EXPERIMENTER {
description "";
}
enum OFPBIC_BAD_EXP_TYPE {
description "";
}
enum OFPBIC_BAD_LEN {
description "";
}
enum OFPBIC_EPERM {
description "";
}
}
description
"ofp_error_msg 'code' values for OFPET_BAD_INSTRUCTION. 'data' contains at
least the first 64 bytes of the failed request.";
}
typedef ofp_bad_match_code {
type enumeration {
enum OFPBMC_BAD_TYPE {
description "";
}
enum OFPBMC_BAD_LEN {
description "";
}
enum OFPBMC_BAD_TAG {
description "";
}
enum OFPBMC_BAD_DL_ADDR_MASK {
description "";
}
enum OFPBMC_BAD_NW_ADDR_MASK {
description "";
}
enum OFPBMC_BAD_WILDCARDS {
description "";
}
enum OFPBMC_BAD_FIELD {
description "";
}
enum OFPBMC_BAD_VALUE {
description "";
}
enum OFPBMC_BAD_MASK {
description "";
}
enum OFPBMC_BAD_PREREQ {
description "";
}
enum OFPBMC_DUP_FIELD {
description "";
}
enum OFPBMC_EPERM {
description "";
}
}
description
"ofp_error_msg 'code' values for OFPET_BAD_MATCH. 'data' contains at least
the first 64 bytes of the failed request.";
}
typedef ofp_flow_mod_failed_code {
type enumeration {
enum OFPFMFC_UNKNOWN {
description "";
}
enum OFPFMFC_TABLE_FULL {
description "";
}
enum OFPFMFC_BAD_TABLE_ID {
description "";
}
enum OFPFMFC_OVERLAP {
description "";
}
enum OFPFMFC_EPERM {
description "";
}
enum OFPFMFC_BAD_TIMEOUT {
description "";
}
enum OFPFMFC_BAD_COMMAND {
description "";
}
enum OFPFMFC_BAD_FLAGS {
description "";
}
}
description
"ofp_error_msg 'code' values for OFPET_FLOW_MOD_FAILED. 'data' contains
at least the first 64 bytes of the failed request.";
}
typedef ofp_group_mod_failed_code {
type enumeration {
enum OFPGMFC_GROUP_EXISTS {
description "";
}
enum OFPGMFC_INVALID_GROUP {
description "";
}
enum OFPGMFC_WEIGHT_UNSUPPORTED {
description "";
}
enum OFPGMFC_OUT_OF_GROUPS {
description "";
}
enum OFPGMFC_OUT_OF_BUCKETS {
description "";
}
enum OFPGMFC_CHAINING_UNSUPPORTED {
description "";
}
enum OFPGMFC_WATCH_UNSUPPORTED {
description "";
}
enum OFPGMFC_LOOP {
description "";
}
enum OFPGMFC_UNKNOWN_GROUP {
description "";
}
enum OFPGMFC_CHAINED_GROUP {
description "";
}
enum OFPGMFC_BAD_TYPE {
description "";
}
enum OFPGMFC_BAD_COMMAND {
description "";
}
enum OFPGMFC_BAD_BUCKET {
description "";
}
enum OFPGMFC_BAD_WATCH {
description "";
}
enum OFPGMFC_EPERM {
description "";
}
}
description
"ofp_error_msg 'code' values for OFPET_GROUP_MOD_FAILED. 'data' contains
at least the first 64 bytes of the failed request.";
}
typedef ofp_port_mod_failed_code {
type enumeration {
enum OFPPMFC_BAD_PORT {
description "";
}
enum OFPPMFC_BAD_HW_ADDR {
description "";
}
enum OFPPMFC_BAD_CONFIG {
description "";
}
enum OFPPMFC_BAD_ADVERTISE {
description "";
}
enum OFPPMFC_EPERM {
description "";
}
}
description
"ofp_error_msg 'code' values for OFPET_PORT_MOD_FAILED. 'data' contains
at least the first 64 bytes of the failed request.";
}
typedef ofp_table_mod_failed_code {
type enumeration {
enum OFPTMFC_BAD_TABLE {
description "";
}
enum OFPTMFC_BAD_CONFIG {
description "";
}
enum OFPTMFC_EPERM {
description "";
}
}
description
"ofp_error_msg 'code' values for OFPET_TABLE_MOD_FAILED. 'data' contains
at least the first 64 bytes of the failed request.";
}
typedef ofp_queue_op_failed_code {
type enumeration {
enum OFPQOFC_BAD_PORT {
description "";
}
enum OFPQOFC_BAD_QUEUE {
description "";
}
enum OFPQOFC_EPERM {
description "";
}
}
description
"ofp_error msg 'code' values for OFPET_QUEUE_OP_FAILED. 'data' contains
at least the first 64 bytes of the failed request";
}
typedef ofp_switch_config_failed_code {
type enumeration {
enum OFPSCFC_BAD_FLAGS {
description "";
}
enum OFPSCFC_BAD_LEN {
description "";
}
enum OFPSCFC_EPERM {
description "";
}
}
description
"ofp_error_msg 'code' values for OFPET_SWITCH_CONFIG_FAILED. 'data' contains
at least the first 64 bytes of the failed request.";
}
typedef ofp_role_request_failed_code {
type enumeration {
enum OFPRRFC_STALE {
description "";
}
enum OFPRRFC_UNSUP {
description "";
}
enum OFPRRFC_BAD_ROLE {
description "";
}
}
description
"ofp_error_msg 'code' values for OFPET_ROLE_REQUEST_FAILED. 'data' contains
at least the first 64 bytes of the failed request.";
}
typedef ofp_meter_mod_failed_code {
type enumeration {
enum OFPMMFC_UNKNOWN {
description "";
}
enum OFPMMFC_METER_EXISTS {
description "";
}
enum OFPMMFC_INVALID_METER {
description "";
}
enum OFPMMFC_UNKNOWN_METER {
description "";
}
enum OFPMMFC_BAD_COMMAND {
description "";
}
enum OFPMMFC_BAD_FLAGS {
description "";
}
enum OFPMMFC_BAD_RATE {
description "";
}
enum OFPMMFC_BAD_BURST {
description "";
}
enum OFPMMFC_BAD_BAND {
description "";
}
enum OFPMMFC_BAD_BAND_VALUE {
description "";
}
enum OFPMMFC_OUT_OF_METERS {
description "";
}
enum OFPMMFC_OUT_OF_BANDS {
description "";
}
}
description
"ofp_error_msg 'code' values for OFPET_METER_MOD_FAILED. 'data' contains
at least the first 64 bytes of the failed request.";
}
typedef ofp_table_features_failed_code {
type enumeration {
enum OFPTFFC_BAD_TABLE {
description "";
}
enum OFPTFFC_BAD_METADATA {
description "";
}
enum OFPTFFC_BAD_TYPE {
description "";
}
enum OFPTFFC_BAD_LEN {
description "";
}
enum OFPTFFC_BAD_ARGUMENT {
description "";
}
enum OFPTFFC_EPERM {
description "";
}
}
description
"ofp_error_msg 'code' values for OFPET_TABLE_FEATURES_FAILED. 'data' contains
at least the first 64 bytes of the failed request.";
}
typedef ofp_multipart_type {
type enumeration {
enum OFPMP_DESC {
description "";
}
enum OFPMP_FLOW {
description "";
}
enum OFPMP_AGGREGATE {
description "";
}
enum OFPMP_TABLE {
description "";
}
enum OFPMP_PORT_STATS {
description "";
}
enum OFPMP_QUEUE {
description "";
}
enum OFPMP_GROUP {
description "";
}
enum OFPMP_GROUP_DESC {
description "";
}
enum OFPMP_GROUP_FEATURES {
description "";
}
enum OFPMP_METER {
description "";
}
enum OFPMP_METER_CONFIG {
description "";
}
enum OFPMP_METER_FEATURES {
description "";
}
enum OFPMP_TABLE_FEATURES {
description "";
}
enum OFPMP_PORT_DESC {
description "";
}
enum OFPMP_EXPERIMENTER {
description "";
}
}
description
"";
}
typedef ofp_multipart_request_flags {
type enumeration {
enum OFPMPF_REQ_INVALID {
description "";
}
enum OFPMPF_REQ_MORE {
description "";
}
}
description
"Backward compatibility with 1.3.1 - avoid breaking the API.#define ofp_multipart_types ofp_multipart_type";
}
typedef ofp_multipart_reply_flags {
type enumeration {
enum OFPMPF_REPLY_INVALID {
description "";
}
enum OFPMPF_REPLY_MORE {
description "";
}
}
description
"";
}
typedef ofp_table_feature_prop_type {
type enumeration {
enum OFPTFPT_INSTRUCTIONS {
description "";
}
enum OFPTFPT_INSTRUCTIONS_MISS {
description "";
}
enum OFPTFPT_NEXT_TABLES {
description "";
}
enum OFPTFPT_NEXT_TABLES_MISS {
description "";
}
enum OFPTFPT_WRITE_ACTIONS {
description "";
}
enum OFPTFPT_WRITE_ACTIONS_MISS {
description "";
}
enum OFPTFPT_APPLY_ACTIONS {
description "";
}
enum OFPTFPT_APPLY_ACTIONS_MISS {
description "";
}
enum OFPTFPT_MATCH {
description "";
}
enum OFPTFPT_WILDCARDS {
description "";
}
enum OFPTFPT_WRITE_SETFIELD {
description "";
}
enum OFPTFPT_WRITE_SETFIELD_MISS {
description "";
}
enum OFPTFPT_APPLY_SETFIELD {
description "";
}
enum OFPTFPT_APPLY_SETFIELD_MISS {
description "";
}
enum OFPTFPT_EXPERIMENTER {
description "";
}
enum OFPTFPT_EXPERIMENTER_MISS {
description "";
}
}
description
"Table Feature property types.
Low order bit cleared indicates a property for a regular Flow Entry.
Low order bit set indicates a property for the Table-Miss Flow Entry.";
}
typedef ofp_group_capabilities {
type enumeration {
enum OFPGFC_INVALID {
description "";
}
enum OFPGFC_SELECT_WEIGHT {
description "";
}
enum OFPGFC_SELECT_LIVENESS {
description "";
}
enum OFPGFC_CHAINING {
description "";
}
enum OFPGFC_CHAINING_CHECKS {
description "";
}
}
description
"Group configuration flagsBackward compatibility with 1.3.1 - avoid breaking the API.#define ofp_group_desc_stats ofp_group_desc";
}
typedef ofp_queue_properties {
type enumeration {
enum OFPQT_INVALID {
description "";
}
enum OFPQT_MIN_RATE {
description "";
}
enum OFPQT_MAX_RATE {
description "";
}
enum OFPQT_EXPERIMENTER {
description "";
}
}
description
"All ones is used to indicate all queues in a port (for stats retrieval).#define OFPQ_ALL 0xffffffff
Min rate 1000 means not configured.#define OFPQ_MIN_RATE_UNCFG 0xffff
Max rate 1000 means not configured.#define OFPQ_MAX_RATE_UNCFG 0xffff";
}
typedef ofp_controller_role {
type enumeration {
enum OFPCR_ROLE_NOCHANGE {
description "";
}
enum OFPCR_ROLE_EQUAL {
description "";
}
enum OFPCR_ROLE_MASTER {
description "";
}
enum OFPCR_ROLE_SLAVE {
description "";
}
}
description
"Controller roles.Configures the role of the sending controller. The default role is:
- Equal (OFPCR_ROLE_EQUAL), which allows the controller access to all
OpenFlow features. All controllers have equal responsibility.
The other possible roles are a related pair:
- Master (OFPCR_ROLE_MASTER) is equivalent to Equal, except that there
may be at most one Master controller at a time: when a controller
configures itself as Master, any existing Master is demoted to the
Slave role.
- Slave (OFPCR_ROLE_SLAVE) allows the controller read-only access to
OpenFlow features. In particular attempts to modify the flow table
will be rejected with an OFPBRC_EPERM error.
Slave controllers do not receive OFPT_PACKET_IN or OFPT_FLOW_REMOVED
messages, but they do receive OFPT_PORT_STATUS messages.";
}
container ofp_header {
description
"Header on all OpenFlow packets.";
leaf version {
type uint32;
description
"OFP_VERSION.";
}
leaf type {
type ofp_type;
description
"One of the OFPT_ constants.";
}
leaf xid {
type uint32;
description
"Transaction id associated with this packet.
Replies use the same id as was in the request
to facilitate pairing.";
}
}
grouping ofp_hello_elem_header {
description
"Common header for all Hello Elements";
leaf type {
type ofp_hello_elem_type;
description
"One of OFPHET_ .";
}
choice choice_0 {
case versionbitmap {
container versionbitmap {
uses ofp_hello_elem_versionbitmap;
description
"";
}
}
}
}
grouping ofp_hello_elem_versionbitmap {
description
"Version bitmap Hello Element";
list bitmaps {
key "bitmaps";
leaf bitmaps {
type uint32;
description
"List of bitmaps - supported versions";
}
description
"List of bitmaps - supported versions";
}
}
container ofp_hello {
description
"OFPT_HELLO. This message includes zero or more hello elements having
variable size. Unknown elements types must be ignored skipped, to allow
for future extensions.ofp_header header;";
list elements {
key "type";
uses ofp_hello_elem_header;
description
"Hello element list0 or more";
}
}
container ofp_switch_config {
description
"Switch configuration.";
leaf flags {
type uint32;
description
"ofp_header header;
Bitmap of OFPC_ flags.";
}
leaf miss_send_len {
type uint32;
description
"Max bytes of packet that datapath
should send to the controller. See
ofp_controller_max_len for valid values.";
}
}
container ofp_table_mod {
description
"Configure Modify behavior of a flow table";
leaf table_id {
type uint32;
description
"ofp_header header;
ID of the table, OFPTT_ALL indicates all tables";
}
leaf config {
type uint32;
description
"Bitmap of OFPTC_ flags";
}
}
grouping ofp_port {
description
"Description of a port";
leaf port_no {
type uint32;
description
"";
}
list hw_addr {
key "hw_addr";
leaf hw_addr {
type uint32;
description
" OFP_ETH_ALEN ;";
}
description
" OFP_ETH_ALEN ;";
}
leaf name {
type string;
description
"Null-terminated";
}
leaf config {
type uint32;
description
"Bitmap of OFPPC_ flags.";
}
leaf state {
type uint32;
description
"Bitmap of OFPPS_ flags.";
}
leaf curr {
type uint32;
description
"Bitmaps of OFPPF_ that describe features. All bits zeroed if
unsupported or unavailable.Current features.";
}
leaf advertised {
type uint32;
description
"Features being advertised by the port.";
}
leaf supported {
type uint32;
description
"Features supported by the port.";
}
leaf peer {
type uint32;
description
"Features advertised by peer.";
}
leaf curr_speed {
type uint32;
description
"Current port bitrate in kbps.";
}
leaf max_speed {
type uint32;
description
"Max port bitrate in kbps";
}
}
grouping ofp_switch_features {
description
"Switch features.";
leaf datapath_id {
type uint64;
description
"ofp_header header;
Datapath unique ID. The lower 48-bits are for
a MAC address, while the upper 16-bits are
implementer-defined.";
}
leaf n_buffers {
type uint32;
description
"Max packets buffered at once.";
}
leaf n_tables {
type uint32;
description
"Number of tables supported by datapath.";
}
leaf auxiliary_id {
type uint32;
description
"Identify auxiliary connections";
}
leaf capabilities {
type uint32;
description
"Features.Bitmap of support ofp_capabilities .";
}
}
grouping ofp_port_status {
description
"A physical port has changed in the datapath";
leaf reason {
type ofp_port_reason;
description
"ofp_header header;
One of OFPPR_ .";
}
container desc {
uses ofp_port;
description
"";
}
}
container ofp_port_mod {
description
"Modify behavior of the physical port";
leaf port_no {
type uint32;
description
"ofp_header header;";
}
list hw_addr {
key "hw_addr";
leaf hw_addr {
type uint32;
description
" OFP_ETH_ALEN ;";
}
description
" OFP_ETH_ALEN ;";
}
leaf config {
type uint32;
description
"The hardware address is not
configurable. This is used to
sanity-check the request, so it must
be the same as returned in an
ofp_port struct.Bitmap of OFPPC_ flags.";
}
leaf mask {
type uint32;
description
"Bitmap of OFPPC_ flags to be changed.";
}
leaf advertise {
type uint32;
description
"Bitmap of OFPPF_ . Zero all bits to prevent
any action taking place.";
}
}
grouping ofp_match {
description
"Fields to match against flows";
leaf type {
type ofp_match_type;
description
"One of OFPMT_ ";
}
list oxm_fields {
key "oxm_class";
uses ofp_oxm_field;
description
"0 or more";
}
}
grouping ofp_oxm_field {
description
"OXM Flow match fields";
leaf oxm_class {
type ofp_oxm_class;
description
"";
}
choice choice_0 {
case ofb_field {
container ofb_field {
uses ofp_oxm_ofb_field;
description
"2 and 3 reserved for NXM_0 and NXM-1 OXM classes";
}
}
case experimenter_field {
container experimenter_field {
uses ofp_oxm_experimenter_field;
description
"";
}
}
}
}
grouping ofp_oxm_ofb_field {
description
"OXM OpenFlow Basic Match Field";
leaf type {
type oxm_ofb_field_types;
description
"";
}
leaf has_mask {
type boolean;
description
"";
}
choice choice_0 {
case port {
leaf port {
type uint32;
description
"#define OXM_OF_IN_PORT OXM_HEADER (0x8000, OFPXMT_OFB_IN_PORT, 4)
Used for OFPXMT_OFB_IN_PORTOpenFlow port on which the packet was received.
May be a physical port, a logical port, or the reserved port OFPP_LOCAL
Prereqs: None.
Format: 32-bit integer in network byte order.
Masking: Not maskable.";
}
}
case physical_port {
leaf physical_port {
type uint32;
description
"#define OXM_OF_IN_PHY_PORT OXM_HEADER (0x8000, OFPXMT_OFB_IN_PHY_PORT, 4)
Used for OFPXMT_OF_IN_PHY_PORTPhysical port on which the packet was received.
Consider a packet received on a tunnel interface defined over a link
aggregation group (LAG) with two physical port members. If the tunnel
interface is the logical port bound to OpenFlow. In this case,
OFPXMT_OF_IN_PORT is the tunnel's port number and OFPXMT_OF_IN_PHY_PORT is
the physical port number of the LAG on which the tunnel is configured.
When a packet is received directly on a physical port and not processed by a
logical port, OFPXMT_OF_IN_PORT and OFPXMT_OF_IN_PHY_PORT have the same
value.
This field is usually not available in a regular match and only available
in ofp_packet_in messages when it's different from OXM_OF_IN_PORT.
Prereqs: OXM_OF_IN_PORT must be present.
Format: 32-bit integer in network byte order.
Masking: Not maskable.";
}
}
case table_metadata {
leaf table_metadata {
type uint64;
description
"#define OXM_OF_METADATA OXM_HEADER (0x8000, OFPXMT_OFB_METADATA, 8)
#define OXM_OF_METADATA_W OXM_HEADER_W(0x8000, OFPXMT_OFB_METADATA, 8)
Used for OFPXMT_OFB_METADATATable metadata.
Prereqs: None.
Format: 64-bit integer in network byte order.
Masking: Arbitrary masks.";
}
}
case eth_dst {
leaf eth_dst {
type binary;
description
"#define OXM_OF_ETH_DST OXM_HEADER (0x8000, OFPXMT_OFB_ETH_DST, 6)
#define OXM_OF_ETH_DST_W OXM_HEADER_W(0x8000, OFPXMT_OFB_ETH_DST, 6)
#define OXM_OF_ETH_SRC OXM_HEADER (0x8000, OFPXMT_OFB_ETH_SRC, 6)
#define OXM_OF_ETH_SRC_W OXM_HEADER_W(0x8000, OFPXMT_OFB_ETH_SRC, 6)
Used for OFPXMT_OFB_ETH_DST (exactly 6 bytes)Source or destination address in Ethernet header.
Prereqs: None.
Format: 48-bit Ethernet MAC address.
Masking: Arbitrary masks.";
}
}
case eth_src {
leaf eth_src {
type binary;
description
"Used for OFPXMT_OFB_ETH_SRC (exactly 6 bytes)";
}
}
case eth_type {
leaf eth_type {
type uint32;
description
"#define OXM_OF_ETH_TYPE OXM_HEADER (0x8000, OFPXMT_OFB_ETH_TYPE,2)
Used for OFPXMT_OFB_ETH_TYPEPacket's Ethernet type.
Prereqs: None.
Format: 16-bit integer in network byte order.
Masking: Not maskable.";
}
}
case vlan_vid {
leaf vlan_vid {
type uint32;
description
"#define OXM_OF_VLAN_VID OXM_HEADER (0x8000, OFPXMT_OFB_VLAN_VID, 2)
#define OXM_OF_VLAN_VID_W OXM_HEADER_W(0x8000, OFPXMT_OFB_VLAN_VID, 2)
Used for OFPXMT_OFB_VLAN_VID802.1Q VID.
For a packet with an 802.1Q header, this is the VLAN-ID (VID) from the
outermost tag, with the CFI bit forced to 1. For a packet with no 802.1Q
header, this has value OFPVID_NONE.
Prereqs: None.
Format: 16-bit integer in network byte order with bit 13 indicating
presence of VLAN header and 3 most-significant bits forced to 0.
Only the lower 13 bits have meaning.
Masking: Arbitrary masks.
This field can be used in various ways:
- If it is not constrained at all, the nx_match matches packets without
an 802.1Q header or with an 802.1Q header that has any VID value.
- Testing for an exact match with 0x0 matches only packets without
an 802.1Q header.
- Testing for an exact match with a VID value with CFI=1 matches packets
that have an 802.1Q header with a specified VID.
- Testing for an exact match with a nonzero VID value with CFI=0 does
not make sense. The switch may reject this combination.
- Testing with nxm_value=0, nxm_mask=0x0fff matches packets with no 802.1Q
header or with an 802.1Q header with a VID of 0.
- Testing with nxm_value=0x1000, nxm_mask=0x1000 matches packets with
an 802.1Q header that has any VID value.";
}
}
case vlan_pcp {
leaf vlan_pcp {
type uint32;
description
"#define OXM_OF_VLAN_PCP OXM_HEADER (0x8000, OFPXMT_OFB_VLAN_PCP, 1)
Used for OFPXMT_OFB_VLAN_PCP802.1Q PCP.
For a packet with an 802.1Q header, this is the VLAN-PCP from the
outermost tag. For a packet with no 802.1Q header, this has value
0.
Prereqs: OXM_OF_VLAN_VID must be different from OFPVID_NONE.
Format: 8-bit integer with 5 most-significant bits forced to 0.
Only the lower 3 bits have meaning.
Masking: Not maskable.";
}
}
case ip_dscp {
leaf ip_dscp {
type uint32;
description
"#define OXM_OF_IP_DSCP OXM_HEADER (0x8000, OFPXMT_OFB_IP_DSCP, 1)
Used for OFPXMT_OFB_IP_DSCPThe Diff Serv Code Point (DSCP) bits of the IP header.
Part of the IPv4 ToS field or the IPv6 Traffic Class field.
Prereqs: OXM_OF_ETH_TYPE must be either 0x0800 or 0x86dd.
Format: 8-bit integer with 2 most-significant bits forced to 0.
Only the lower 6 bits have meaning.
Masking: Not maskable.";
}
}
case ip_ecn {
leaf ip_ecn {
type uint32;
description
"#define OXM_OF_IP_ECN OXM_HEADER (0x8000, OFPXMT_OFB_IP_ECN, 1)
Used for OFPXMT_OFB_IP_ECNThe ECN bits of the IP header.
Part of the IPv4 ToS field or the IPv6 Traffic Class field.
Prereqs: OXM_OF_ETH_TYPE must be either 0x0800 or 0x86dd.
Format: 8-bit integer with 6 most-significant bits forced to 0.
Only the lower 2 bits have meaning.
Masking: Not maskable.";
}
}
case ip_proto {
leaf ip_proto {
type uint32;
description
"#define OXM_OF_IP_PROTO OXM_HEADER (0x8000, OFPXMT_OFB_IP_PROTO, 1)
Used for OFPXMT_OFB_IP_PROTOThe protocol byte in the IP header.
Prereqs: OXM_OF_ETH_TYPE must be either 0x0800 or 0x86dd.
Format: 8-bit integer.
Masking: Not maskable.";
}
}
case ipv4_src {
leaf ipv4_src {
type uint32;
description
"#define OXM_OF_IPV4_SRC OXM_HEADER (0x8000, OFPXMT_OFB_IPV4_SRC, 4)
#define OXM_OF_IPV4_SRC_W OXM_HEADER_W(0x8000, OFPXMT_OFB_IPV4_SRC, 4)
#define OXM_OF_IPV4_DST OXM_HEADER (0x8000, OFPXMT_OFB_IPV4_DST, 4)
#define OXM_OF_IPV4_DST_W OXM_HEADER_W(0x8000, OFPXMT_OFB_IPV4_DST, 4)
Used for OFPXMT_OFB_IPV4_SRCThe source or destination address in the IP header.
Prereqs: OXM_OF_ETH_TYPE must match 0x0800 exactly.
Format: 32-bit integer in network byte order.
Masking: Arbitrary masks.";
}
}
case ipv4_dst {
leaf ipv4_dst {
type uint32;
description
"Used for OFPXMT_OFB_IPV4_DST";
}
}
case tcp_src {
leaf tcp_src {
type uint32;
description
"#define OXM_OF_TCP_SRC OXM_HEADER (0x8000, OFPXMT_OFB_TCP_SRC, 2)
#define OXM_OF_TCP_DST OXM_HEADER (0x8000, OFPXMT_OFB_TCP_DST, 2)
Used for OFPXMT_OFB_TCP_SRCThe source or destination port in the TCP header.
Prereqs:
OXM_OF_ETH_TYPE must be either 0x0800 or 0x86dd.
OXM_OF_IP_PROTO must match 6 exactly.
Format: 16-bit integer in network byte order.
Masking: Not maskable.";
}
}
case tcp_dst {
leaf tcp_dst {
type uint32;
description
"Used for OFPXMT_OFB_TCP_DST";
}
}
case udp_src {
leaf udp_src {
type uint32;
description
"#define OXM_OF_UDP_SRC OXM_HEADER (0x8000, OFPXMT_OFB_UDP_SRC, 2)
#define OXM_OF_UDP_DST OXM_HEADER (0x8000, OFPXMT_OFB_UDP_DST, 2)
Used for OFPXMT_OFB_UDP_SRCThe source or destination port in the UDP header.
Prereqs:
OXM_OF_ETH_TYPE must match either 0x0800 or 0x86dd.
OXM_OF_IP_PROTO must match 17 exactly.
Format: 16-bit integer in network byte order.
Masking: Not maskable.";
}
}
case udp_dst {
leaf udp_dst {
type uint32;
description
"Used for OFPXMT_OFB_UDP_DST";
}
}
case sctp_src {
leaf sctp_src {
type uint32;
description
"#define OXM_OF_SCTP_SRC OXM_HEADER (0x8000, OFPXMT_OFB_SCTP_SRC, 2)
#define OXM_OF_SCTP_DST OXM_HEADER (0x8000, OFPXMT_OFB_SCTP_DST, 2)
Used for OFPXMT_OFB_SCTP_SRCThe source or destination port in the SCTP header.
Prereqs:
OXM_OF_ETH_TYPE must match either 0x0800 or 0x86dd.
OXM_OF_IP_PROTO must match 132 exactly.
Format: 16-bit integer in network byte order.
Masking: Not maskable.";
}
}
case sctp_dst {
leaf sctp_dst {
type uint32;
description
"Used for OFPXMT_OFB_SCTP_DST";
}
}
case icmpv4_type {
leaf icmpv4_type {
type uint32;
description
"#define OXM_OF_ICMPV4_TYPE OXM_HEADER (0x8000, OFPXMT_OFB_ICMPV4_TYPE, 1)
#define OXM_OF_ICMPV4_CODE OXM_HEADER (0x8000, OFPXMT_OFB_ICMPV4_CODE, 1)
Used for OFPXMT_OFB_ICMPV4_TYPEThe type or code in the ICMP header.
Prereqs:
OXM_OF_ETH_TYPE must match 0x0800 exactly.
OXM_OF_IP_PROTO must match 1 exactly.
Format: 8-bit integer.
Masking: Not maskable.";
}
}
case icmpv4_code {
leaf icmpv4_code {
type uint32;
description
"Used for OFPXMT_OFB_ICMPV4_CODE";
}
}
case arp_op {
leaf arp_op {
type uint32;
description
"#define OXM_OF_ARP_OP OXM_HEADER (0x8000, OFPXMT_OFB_ARP_OP, 2)
Used for OFPXMT_OFB_ARP_OPARP opcode.
For an Ethernet+IP ARP packet, the opcode in the ARP header. Always 0
otherwise.
Prereqs: OXM_OF_ETH_TYPE must match 0x0806 exactly.
Format: 16-bit integer in network byte order.
Masking: Not maskable.";
}
}
case arp_spa {
leaf arp_spa {
type uint32;
description
"#define OXM_OF_ARP_SPA OXM_HEADER (0x8000, OFPXMT_OFB_ARP_SPA, 4)
#define OXM_OF_ARP_SPA_W OXM_HEADER_W(0x8000, OFPXMT_OFB_ARP_SPA, 4)
#define OXM_OF_ARP_TPA OXM_HEADER (0x8000, OFPXMT_OFB_ARP_TPA, 4)
#define OXM_OF_ARP_TPA_W OXM_HEADER_W(0x8000, OFPXMT_OFB_ARP_TPA, 4)
For OFPXMT_OFB_ARP_SPAFor an Ethernet+IP ARP packet, the source or target protocol address
in the ARP header. Always 0 otherwise.
Prereqs: OXM_OF_ETH_TYPE must match 0x0806 exactly.
Format: 32-bit integer in network byte order.
Masking: Arbitrary masks.";
}
}
case arp_tpa {
leaf arp_tpa {
type uint32;
description
"For OFPXMT_OFB_ARP_TPA";
}
}
case arp_sha {
leaf arp_sha {
type binary;
description
"#define OXM_OF_ARP_SHA OXM_HEADER (0x8000, OFPXMT_OFB_ARP_SHA, 6)
#define OXM_OF_ARP_SHA_W OXM_HEADER_W (0x8000, OFPXMT_OFB_ARP_SHA, 6)
#define OXM_OF_ARP_THA OXM_HEADER (0x8000, OFPXMT_OFB_ARP_THA, 6)
#define OXM_OF_ARP_THA_W OXM_HEADER_W (0x8000, OFPXMT_OFB_ARP_THA, 6)
For OFPXMT_OFB_ARP_SHA (6 bytes)For an Ethernet+IP ARP packet, the source or target hardware address
in the ARP header. Always 0 otherwise.
Prereqs: OXM_OF_ETH_TYPE must match 0x0806 exactly.
Format: 48-bit Ethernet MAC address.
Masking: Not maskable.";
}
}
case arp_tha {
leaf arp_tha {
type binary;
description
"For OFPXMT_OFB_ARP_THA (6 bytes)";
}
}
case ipv6_src {
leaf ipv6_src {
type binary;
description
"#define OXM_OF_IPV6_SRC OXM_HEADER (0x8000, OFPXMT_OFB_IPV6_SRC, 16)
#define OXM_OF_IPV6_SRC_W OXM_HEADER_W(0x8000, OFPXMT_OFB_IPV6_SRC, 16)
#define OXM_OF_IPV6_DST OXM_HEADER (0x8000, OFPXMT_OFB_IPV6_DST, 16)
#define OXM_OF_IPV6_DST_W OXM_HEADER_W(0x8000, OFPXMT_OFB_IPV6_DST, 16)
For OFPXMT_OFB_IPV6_SRCThe source or destination address in the IPv6 header.
Prereqs: OXM_OF_ETH_TYPE must match 0x86dd exactly.
Format: 128-bit IPv6 address.
Masking: Arbitrary masks.";
}
}
case ipv6_dst {
leaf ipv6_dst {
type binary;
description
"For OFPXMT_OFB_IPV6_DST";
}
}
case ipv6_flabel {
leaf ipv6_flabel {
type uint32;
description
"#define OXM_OF_IPV6_FLABEL OXM_HEADER (0x8000, OFPXMT_OFB_IPV6_FLABEL, 4)
#define OXM_OF_IPV6_FLABEL_W OXM_HEADER_W(0x8000, OFPXMT_OFB_IPV6_FLABEL, 4)
For OFPXMT_OFB_IPV6_FLABELThe IPv6 Flow Label
Prereqs:
OXM_OF_ETH_TYPE must match 0x86dd exactly
Format: 32-bit integer with 12 most-significant bits forced to 0.
Only the lower 20 bits have meaning.
Masking: Arbitrary masks.";
}
}
case icmpv6_type {
leaf icmpv6_type {
type uint32;
description
"#define OXM_OF_ICMPV6_TYPE OXM_HEADER (0x8000, OFPXMT_OFB_ICMPV6_TYPE, 1)
#define OXM_OF_ICMPV6_CODE OXM_HEADER (0x8000, OFPXMT_OFB_ICMPV6_CODE, 1)
For OFPXMT_OFB_ICMPV6_TYPEThe type or code in the ICMPv6 header.
Prereqs:
OXM_OF_ETH_TYPE must match 0x86dd exactly.
OXM_OF_IP_PROTO must match 58 exactly.
Format: 8-bit integer.
Masking: Not maskable.";
}
}
case icmpv6_code {
leaf icmpv6_code {
type uint32;
description
"For OFPXMT_OFB_ICMPV6_CODE";
}
}
case ipv6_nd_target {
leaf ipv6_nd_target {
type binary;
description
"#define OXM_OF_IPV6_ND_TARGET OXM_HEADER
(0x8000, OFPXMT_OFB_IPV6_ND_TARGET, 16)
For OFPXMT_OFB_IPV6_ND_TARGETThe target address in an IPv6 Neighbor Discovery message.
Prereqs:
OXM_OF_ETH_TYPE must match 0x86dd exactly.
OXM_OF_IP_PROTO must match 58 exactly.
OXM_OF_ICMPV6_TYPE must be either 135 or 136.
Format: 128-bit IPv6 address.
Masking: Not maskable.";
}
}
case ipv6_nd_ssl {
leaf ipv6_nd_ssl {
type binary;
description
"#define OXM_OF_IPV6_ND_SLL OXM_HEADER (0x8000, OFPXMT_OFB_IPV6_ND_SLL, 6)
For OFPXMT_OFB_IPV6_ND_SLLThe source link-layer address option in an IPv6 Neighbor Discovery
message.
Prereqs:
OXM_OF_ETH_TYPE must match 0x86dd exactly.
OXM_OF_IP_PROTO must match 58 exactly.
OXM_OF_ICMPV6_TYPE must be exactly 135.
Format: 48-bit Ethernet MAC address.
Masking: Not maskable.";
}
}
case ipv6_nd_tll {
leaf ipv6_nd_tll {
type binary;
description
"#define OXM_OF_IPV6_ND_TLL OXM_HEADER (0x8000, OFPXMT_OFB_IPV6_ND_TLL, 6)
For OFPXMT_OFB_IPV6_ND_TLLThe target link-layer address option in an IPv6 Neighbor Discovery
message.
Prereqs:
OXM_OF_ETH_TYPE must match 0x86dd exactly.
OXM_OF_IP_PROTO must match 58 exactly.
OXM_OF_ICMPV6_TYPE must be exactly 136.
Format: 48-bit Ethernet MAC address.
Masking: Not maskable.";
}
}
case mpls_label {
leaf mpls_label {
type uint32;
description
"#define OXM_OF_MPLS_LABEL OXM_HEADER (0x8000, OFPXMT_OFB_MPLS_LABEL, 4)
For OFPXMT_OFB_MPLS_LABELThe LABEL in the first MPLS shim header.
Prereqs:
OXM_OF_ETH_TYPE must match 0x8847 or 0x8848 exactly.
Format: 32-bit integer in network byte order with 12 most-significant
bits forced to 0. Only the lower 20 bits have meaning.
Masking: Not maskable.";
}
}
case mpls_tc {
leaf mpls_tc {
type uint32;
description
"#define OXM_OF_MPLS_TC OXM_HEADER (0x8000, OFPXMT_OFB_MPLS_TC, 1)
For OFPXMT_OFB_MPLS_TCThe TC in the first MPLS shim header.
Prereqs:
OXM_OF_ETH_TYPE must match 0x8847 or 0x8848 exactly.
Format: 8-bit integer with 5 most-significant bits forced to 0.
Only the lower 3 bits have meaning.
Masking: Not maskable.";
}
}
case mpls_bos {
leaf mpls_bos {
type uint32;
description
"#define OXM_OF_MPLS_BOS OXM_HEADER (0x8000, OFPXMT_OFB_MPLS_BOS, 1)
For OFPXMT_OFB_MPLS_BOSThe BoS bit in the first MPLS shim header.
Prereqs:
OXM_OF_ETH_TYPE must match 0x8847 or 0x8848 exactly.
Format: 8-bit integer with 7 most-significant bits forced to 0.
Only the lowest bit have a meaning.
Masking: Not maskable.";
}
}
case pbb_isid {
leaf pbb_isid {
type uint32;
description
"#define OXM_OF_PBB_ISID OXM_HEADER (0x8000, OFPXMT_OFB_PBB_ISID, 3)
#define OXM_OF_PBB_ISID_W OXM_HEADER_W(0x8000, OFPXMT_OFB_PBB_ISID, 3)
For OFPXMT_OFB_PBB_ISIDIEEE 802.1ah I-SID.
For a packet with a PBB header, this is the I-SID from the
outermost service tag.
Prereqs:
OXM_OF_ETH_TYPE must match 0x88E7 exactly.
Format: 24-bit integer in network byte order.
Masking: Arbitrary masks.";
}
}
case tunnel_id {
leaf tunnel_id {
type uint64;
description
"#define OXM_OF_TUNNEL_ID OXM_HEADER (0x8000, OFPXMT_OFB_TUNNEL_ID, 8)
#define OXM_OF_TUNNEL_ID_W OXM_HEADER_W(0x8000, OFPXMT_OFB_TUNNEL_ID, 8)
For OFPXMT_OFB_TUNNEL_IDLogical Port Metadata.
Metadata associated with a logical port.
If the logical port performs encapsulation and decapsulation, this
is the demultiplexing field from the encapsulation header.
For example, for a packet received via GRE tunnel including a (32-bit) key,
the key is stored in the low 32-bits and the high bits are zeroed.
For a MPLS logical port, the low 20 bits represent the MPLS Label.
For a VxLAN logical port, the low 24 bits represent the VNI.
If the packet is not received through a logical port, the value is 0.
Prereqs: None.
Format: 64-bit integer in network byte order.
Masking: Arbitrary masks.";
}
}
case ipv6_exthdr {
leaf ipv6_exthdr {
type uint32;
description
"#define OXM_OF_IPV6_EXTHDR OXM_HEADER (0x8000, OFPXMT_OFB_IPV6_EXTHDR, 2)
#define OXM_OF_IPV6_EXTHDR_W OXM_HEADER_W(0x8000, OFPXMT_OFB_IPV6_EXTHDR, 2)
For OFPXMT_OFB_IPV6_EXTHDRThe IPv6 Extension Header pseudo-field.
Prereqs:
OXM_OF_ETH_TYPE must match 0x86dd exactly
Format: 16-bit integer with 7 most-significant bits forced to 0.
Only the lower 9 bits have meaning.
Masking: Maskable.";
}
}
}
choice choice_1 {
case table_metadata_mask {
leaf table_metadata_mask {
type uint64;
description
"For OFPXMT_OFB_METADATA";
}
}
case eth_dst_mask {
leaf eth_dst_mask {
type binary;
description
"For OFPXMT_OFB_ETH_DST (exactly 6 bytes)";
}
}
case eth_src_mask {
leaf eth_src_mask {
type binary;
description
"For OFPXMT_OFB_ETH_SRC (exactly 6 bytes)";
}
}
case vlan_vid_mask {
leaf vlan_vid_mask {
type uint32;
description
"For OFPXMT_OFB_VLAN_VID";
}
}
case ipv4_src_mask {
leaf ipv4_src_mask {
type uint32;
description
"For OFPXMT_OFB_IPV4_SRC";
}
}
case ipv4_dst_mask {
leaf ipv4_dst_mask {
type uint32;
description
"For OFPXMT_OFB_IPV4_DST";
}
}
case arp_spa_mask {
leaf arp_spa_mask {
type uint32;
description
"For OFPXMT_OFB_ARP_SPA";
}
}
case arp_tpa_mask {
leaf arp_tpa_mask {
type uint32;
description
"For OFPXMT_OFB_ARP_TPA";
}
}
case ipv6_src_mask {
leaf ipv6_src_mask {
type binary;
description
"For OFPXMT_OFB_IPV6_SRC";
}
}
case ipv6_dst_mask {
leaf ipv6_dst_mask {
type binary;
description
"For OFPXMT_OFB_IPV6_DST";
}
}
case ipv6_flabel_mask {
leaf ipv6_flabel_mask {
type uint32;
description
"For OFPXMT_OFB_IPV6_FLABEL";
}
}
case pbb_isid_mask {
leaf pbb_isid_mask {
type uint32;
description
"For OFPXMT_OFB_PBB_ISID";
}
}
case tunnel_id_mask {
leaf tunnel_id_mask {
type uint64;
description
"For OFPXMT_OFB_TUNNEL_ID";
}
}
case ipv6_exthdr_mask {
leaf ipv6_exthdr_mask {
type uint32;
description
"For OFPXMT_OFB_IPV6_EXTHDR";
}
}
}
}
grouping ofp_oxm_experimenter_field {
description
"Header for OXM experimenter match fields.
The experimenter class should not use OXM_HEADER() macros for defining
fields due to this extra header.";
leaf oxm_header {
type uint32;
description
"oxm_class = OFPXMC_EXPERIMENTER";
}
leaf experimenter {
type uint32;
description
"Experimenter ID which takes the same
form as in struct ofp_experimenter_header.";
}
}
grouping ofp_action {
description
"Action header that is common to all actions. The length includes the
header and any padding used to make the action 64-bit aligned.
NB: The length of an action must always be a multiple of eight.";
leaf type {
type ofp_action_type;
description
"One of OFPAT_ .";
}
choice choice_0 {
case output {
container output {
uses ofp_action_output;
description
"";
}
}
case mpls_ttl {
container mpls_ttl {
uses ofp_action_mpls_ttl;
description
"";
}
}
case push {
container push {
uses ofp_action_push;
description
"";
}
}
case pop_mpls {
container pop_mpls {
uses ofp_action_pop_mpls;
description
"";
}
}
case group {
container group {
uses ofp_action_group;
description
"";
}
}
case nw_ttl {
container nw_ttl {
uses ofp_action_nw_ttl;
description
"";
}
}
case set_field {
container set_field {
uses ofp_action_set_field;
f
description
"";
}
}
case experimenter {
container experimenter {
uses ofp_action_experimenter;
description
"";
}
}
}
}
grouping ofp_action_output {
description
"Action structure for OFPAT_OUTPUT, which sends packets out 'port'.
When the 'port' is the OFPP_CONTROLLER, 'max_len' indicates the max
number of bytes to send. A 'max_len' of zero means no bytes of the
packet should be sent. A 'max_len' of OFPCML_NO_BUFFER means that
the packet is not buffered and the complete packet is to be sent to
the controller.";
leaf port {
type uint32;
description
"Output port.";
}
leaf max_len {
type uint32;
description
"Max length to send to controller.";
}
}
grouping ofp_action_mpls_ttl {
description
"Action structure for OFPAT_SET_MPLS_TTL.";
leaf mpls_ttl {
type uint32;
description
"MPLS TTL";
}
}
grouping ofp_action_push {
description
"Action structure for OFPAT_PUSH_VLAN MPLS PBB.";
leaf ethertype {
type uint32;
description
"Ethertype";
}
}
grouping ofp_action_pop_mpls {
description
"Action structure for OFPAT_POP_MPLS.";
leaf ethertype {
type uint32;
description
"Ethertype";
}
}
grouping ofp_action_group {
description
"Action structure for OFPAT_GROUP.";
leaf group_id {
type uint32;
description
"Group identifier.";
}
}
grouping ofp_action_nw_ttl {
description
"Action structure for OFPAT_SET_NW_TTL.";
leaf nw_ttl {
type uint32;
description
"IP TTL";
}
}
grouping ofp_action_set_field {
description
"Action structure for OFPAT_SET_FIELD.";
container field {
uses ofp_oxm_field;
description
"";
}
}
grouping ofp_action_experimenter {
description
"Action header for OFPAT_EXPERIMENTER.
The rest of the body is experimenter-defined.";
leaf experimenter {
type uint32;
description
"Experimenter ID which takes the same
form as in struct
ofp_experimenter_header.";
}
leaf data {
type binary;
description
"";
}
}
grouping ofp_instruction {
description
"Instruction header that is common to all instructions. The length includes
the header and any padding used to make the instruction 64-bit aligned.
NB: The length of an instruction must always be a multiple of eight.";
leaf type {
type uint32;
description
"Instruction type";
}
choice choice_0 {
case goto_table {
container goto_table {
uses ofp_instruction_goto_table;
description
"";
}
}
case write_metadata {
container write_metadata {
uses ofp_instruction_write_metadata;
description
"";
}
}
case actions {
container actions {
uses ofp_instruction_actions;
description
"";
}
}
case meter {
container meter {
uses ofp_instruction_meter;
description
"";
}
}
case experimenter {
container experimenter {
uses ofp_instruction_experimenter;
description
"";
}
}
}
}
grouping ofp_instruction_goto_table {
description
"Instruction structure for OFPIT_GOTO_TABLE";
leaf table_id {
type uint32;
description
"Set next table in the lookup pipeline";
}
}
grouping ofp_instruction_write_metadata {
description
"Instruction structure for OFPIT_WRITE_METADATA";
leaf metadata {
type uint64;
description
"Metadata value to write";
}
leaf metadata_mask {
type uint64;
description
"Metadata write bitmask";
}
}
grouping ofp_instruction_actions {
description
"Instruction structure for OFPIT_WRITE APPLY CLEAR_ACTIONS";
list actions {
key "type";
uses ofp_action;
description
"0 or more actions associated
with OFPIT_WRITE_ACTIONS and
OFPIT_APPLY_ACTIONS";
}
}
grouping ofp_instruction_meter {
description
"Instruction structure for OFPIT_METER";
leaf meter_id {
type uint32;
description
"Meter instance.";
}
}
grouping ofp_instruction_experimenter {
description
"Instruction structure for experimental instructions";
leaf experimenter {
type uint32;
description
"Experimenter ID which takes the same form
as in struct ofp_experimenter_header.";
}
leaf data {
type binary;
description
"Experimenter-defined arbitrary additional data.";
}
}
grouping ofp_flow_mod {
description
"Flow setup and teardown (controller - datapath).";
leaf cookie {
type uint64;
description
"ofp_header header;
Opaque controller-issued identifier.";
}
leaf cookie_mask {
type uint64;
description
"Mask used to restrict the cookie bits
that must match when the command is
OFPFC_MODIFY or OFPFC_DELETE . A value
of 0 indicates no restriction.";
}
leaf table_id {
type uint32;
description
"ID of the table to put the flow in.
For OFPFC_DELETE_ commands, OFPTT_ALL
can also be used to delete matching
flows from all tables.";
}
leaf command {
type ofp_flow_mod_command;
description
"One of OFPFC_ .";
}
leaf idle_timeout {
type uint32;
description
"Idle time before discarding (seconds).";
}
leaf hard_timeout {
type uint32;
description
"Max time before discarding (seconds).";
}
leaf priority {
type uint32;
description
"Priority level of flow entry.";
}
leaf buffer_id {
type uint32;
description
"Buffered packet to apply to, or
OFP_NO_BUFFER.
Not meaningful for OFPFC_DELETE .";
}
leaf out_port {
type uint32;
description
"For OFPFC_DELETE commands, require
matching entries to include this as an
output port. A value of OFPP_ANY
indicates no restriction.";
}
leaf out_group {
type uint32;
description
"For OFPFC_DELETE commands, require
matching entries to include this as an
output group. A value of OFPG_ANY
indicates no restriction.";
}
leaf flags {
type uint32;
description
"Bitmap of OFPFF_ flags.";
}
container match {
uses ofp_match;
description
"Fields to match. Variable size.";
}
list instructions {
key "type";
uses ofp_instruction;
description
"0 or more.";
}
}
grouping ofp_bucket {
description
"Bucket for use in groups.";
leaf weight {
type uint32;
description
"Relative weight of bucket. Only
defined for select groups.";
}
leaf watch_port {
type uint32;
description
"Port whose state affects whether this
bucket is live. Only required for fast
failover groups.";
}
leaf watch_group {
type uint32;
description
"Group whose state affects whether this
bucket is live. Only required for fast
failover groups.";
}
list actions {
key "type";
uses ofp_action;
description
"";
}
}
grouping ofp_group_mod {
description
"Group setup and teardown (controller - datapath).";
leaf command {
type ofp_group_mod_command;
description
"ofp_header header;
One of OFPGC_ .";
}
leaf type {
type ofp_group_type;
description
"One of OFPGT_ .";
}
leaf group_id {
type uint32;
description
"Group identifier.";
}
list buckets {
key "weight";
uses ofp_bucket;
description
"";
}
}
grouping ofp_packet_out {
description
"Send packet (controller - datapath).Special buffer-id to indicate 'no buffer'#define OFP_NO_BUFFER 0xffffffff";
leaf buffer_id {
type uint32;
description
"ofp_header header;
ID assigned by datapath (OFP_NO_BUFFER
if none).";
}
leaf in_port {
type uint32;
description
"Packet's input port or OFPP_CONTROLLER.";
}
list actions {
key "type";
uses ofp_action;
description
"Action list - 0 or more.";
}
leaf data {
type binary;
description
"The variable size action list is optionally followed by packet data.
This data is only present and meaningful if buffer_id == -1.Packet data.";
}
}
grouping ofp_packet_in {
description
"Packet received on port (datapath - controller).";
leaf buffer_id {
type uint32;
description
"ofp_header header;
ID assigned by datapath.";
}
leaf reason {
type ofp_packet_in_reason;
description
"Reason packet is being sent";
}
leaf table_id {
type uint32;
description
"ID of the table that was looked up";
}
leaf cookie {
type uint64;
description
"Cookie of the flow entry that was looked up.";
}
container match {
uses ofp_match;
description
"Packet metadata. Variable size.";
}
leaf data {
type binary;
description
"Ethernet frame";
}
}
container ofp_flow_removed {
description
"Flow removed (datapath - controller).";
leaf cookie {
type uint64;
description
"ofp_header header;
Opaque controller-issued identifier.";
}
leaf priority {
type uint32;
description
"Priority level of flow entry.";
}
leaf reason {
type ofp_flow_removed_reason;
description
"One of OFPRR_ .";
}
leaf table_id {
type uint32;
description
"ID of the table";
}
leaf duration_sec {
type uint32;
description
"Time flow was alive in seconds.";
}
leaf duration_nsec {
type uint32;
description
"Time flow was alive in nanoseconds beyond
duration_sec.";
}
leaf idle_timeout {
type uint32;
description
"Idle timeout from original flow mod.";
}
leaf hard_timeout {
type uint32;
description
"Hard timeout from original flow mod.";
}
leaf packet_count {
type uint64;
description
"";
}
leaf byte_count {
type uint64;
description
"";
}
container match {
uses ofp_match;
description
"Description of fields. Variable size.";
}
}
grouping ofp_meter_band_header {
description
"Common header for all meter bands";
leaf type {
type ofp_meter_band_type;
description
"One of OFPMBT_ .";
}
leaf len {
type uint32;
description
"Length in bytes of this band.";
}
leaf rate {
type uint32;
description
"Rate for this band.";
}
leaf burst_size {
type uint32;
description
"Size of bursts.";
}
}
container ofp_meter_band_drop {
description
"OFPMBT_DROP band - drop packets";
leaf type {
type uint32;
description
"OFPMBT_DROP.";
}
leaf len {
type uint32;
description
"Length in bytes of this band.";
}
leaf rate {
type uint32;
description
"Rate for dropping packets.";
}
leaf burst_size {
type uint32;
description
"Size of bursts.";
}
}
container ofp_meter_band_dscp_remark {
description
"OFPMBT_DSCP_REMARK band - Remark DSCP in the IP header";
leaf type {
type uint32;
description
"OFPMBT_DSCP_REMARK.";
}
leaf len {
type uint32;
description
"Length in bytes of this band.";
}
leaf rate {
type uint32;
description
"Rate for remarking packets.";
}
leaf burst_size {
type uint32;
description
"Size of bursts.";
}
leaf prec_level {
type uint32;
description
"Number of drop precedence level to add.";
}
}
container ofp_meter_band_experimenter {
description
"OFPMBT_EXPERIMENTER band - Experimenter type.
The rest of the band is experimenter-defined.";
leaf type {
type ofp_meter_band_type;
description
"One of OFPMBT_ .";
}
leaf len {
type uint32;
description
"Length in bytes of this band.";
}
leaf rate {
type uint32;
description
"Rate for this band.";
}
leaf burst_size {
type uint32;
description
"Size of bursts.";
}
leaf experimenter {
type uint32;
description
"Experimenter ID which takes the
same form as in struct
ofp_experimenter_header.";
}
}
container ofp_meter_mod {
description
"Meter configuration. OFPT_METER_MOD.";
leaf command {
type ofp_meter_mod_command;
description
"ofp_header header = 1;
One of OFPMC_ .";
}
leaf flags {
type uint32;
description
"Bitmap of OFPMF_ flags.";
}
leaf meter_id {
type uint32;
description
"Meter instance.";
}
list bands {
key "type";
uses ofp_meter_band_header;
description
"The band list length is
inferred from the length field
in the header.";
}
}
container ofp_error_msg {
description
"OFPT_ERROR: Error message (datapath - controller).";
leaf type {
type uint32;
description
"ofp_header header;";
}
leaf code {
type uint32;
description
"";
}
leaf data {
type binary;
description
"Variable-length data. Interpreted based
on the type and code. No padding.";
}
}
container ofp_error_experimenter_msg {
description
"OFPET_EXPERIMENTER: Error message (datapath - controller).ofp_header header;";
leaf type {
type uint32;
description
"OFPET_EXPERIMENTER.";
}
leaf exp_type {
type uint32;
description
"Experimenter defined.";
}
leaf experimenter {
type uint32;
description
"Experimenter ID which takes the same form
as in struct ofp_experimenter_header.";
}
leaf data {
type binary;
description
"Variable-length data. Interpreted based
on the type and code. No padding.";
}
}
container ofp_multipart_request {
description
"";
leaf type {
type ofp_multipart_type;
description
"ofp_header header;
One of the OFPMP_ constants.";
}
leaf flags {
type uint32;
description
"OFPMPF_REQ_ flags.";
}
leaf body {
type binary;
description
"Body of the request. 0 or more bytes.";
}
}
container ofp_multipart_reply {
description
"";
leaf type {
type ofp_multipart_type;
description
"ofp_header header;
One of the OFPMP_ constants.";
}
leaf flags {
type uint32;
description
"OFPMPF_REPLY_ flags.";
}
leaf body {
type binary;
description
"Body of the reply. 0 or more bytes.";
}
}
grouping ofp_desc {
description
"Body of reply to OFPMP_DESC request. Each entry is a NULL-terminated
ASCII string.#define DESC_STR_LEN 256
#define SERIAL_NUM_LEN 32";
leaf mfr_desc {
type string;
description
"Manufacturer description.";
}
leaf hw_desc {
type string;
description
"Hardware description.";
}
leaf sw_desc {
type string;
description
"Software description.";
}
leaf serial_num {
type string;
description
"Serial number.";
}
leaf dp_desc {
type string;
description
"Human readable description of datapath.";
}
}
container ofp_flow_stats_request {
description
"Body for ofp_multipart_request of type OFPMP_FLOW.";
leaf table_id {
type uint32;
description
"ID of table to read (from ofp_table_stats),
OFPTT_ALL for all tables.";
}
leaf out_port {
type uint32;
description
"Require matching entries to include this
as an output port. A value of OFPP_ANY
indicates no restriction.";
}
leaf out_group {
type uint32;
description
"Require matching entries to include this
as an output group. A value of OFPG_ANY
indicates no restriction.";
}
leaf cookie {
type uint64;
description
"Require matching entries to contain this
cookie value";
}
leaf cookie_mask {
type uint64;
description
"Mask used to restrict the cookie bits that
must match. A value of 0 indicates
no restriction.";
}
container match {
uses ofp_match;
description
"Fields to match. Variable size.";
}
}
grouping ofp_flow_stats {
description
"Body of reply to OFPMP_FLOW request.";
leaf id {
type uint64;
description
"Unique ID of flow within device.";
}
leaf table_id {
type uint32;
description
"ID of table flow came from.";
}
leaf duration_sec {
type uint32;
description
"Time flow has been alive in seconds.";
}
leaf duration_nsec {
type uint32;
description
"Time flow has been alive in nanoseconds
beyond duration_sec.";
}
leaf priority {
type uint32;
description
"Priority of the entry.";
}
leaf idle_timeout {
type uint32;
description
"Number of seconds idle before expiration.";
}
leaf hard_timeout {
type uint32;
description
"Number of seconds before expiration.";
}
leaf flags {
type uint32;
description
"Bitmap of OFPFF_ flags.";
}
leaf cookie {
type uint64;
description
"Opaque controller-issued identifier.";
}
leaf packet_count {
type uint64;
description
"Number of packets in flow.";
}
leaf byte_count {
type uint64;
description
"Number of bytes in flow.";
}
container match {
uses ofp_match;
description
"Description of fields. Variable size.";
}
list instructions {
key "type";
uses ofp_instruction;
description
"Instruction set
(0 or more)";
}
}
container ofp_aggregate_stats_request {
description
"Body for ofp_multipart_request of type OFPMP_AGGREGATE.";
leaf table_id {
type uint32;
description
"ID of table to read (from ofp_table_stats)
OFPTT_ALL for all tables.";
}
leaf out_port {
type uint32;
description
"Require matching entries to include this
as an output port. A value of OFPP_ANY
indicates no restriction.";
}
leaf out_group {
type uint32;
description
"Require matching entries to include this
as an output group. A value of OFPG_ANY
indicates no restriction.";
}
leaf cookie {
type uint64;
description
"Require matching entries to contain this
cookie value";
}
leaf cookie_mask {
type uint64;
description
"Mask used to restrict the cookie bits that
must match. A value of 0 indicates
no restriction.";
}
container match {
uses ofp_match;
description
"Fields to match. Variable size.";
}
}
container ofp_aggregate_stats_reply {
description
"Body of reply to OFPMP_AGGREGATE request.";
leaf packet_count {
type uint64;
description
"Number of packets in flows.";
}
leaf byte_count {
type uint64;
description
"Number of bytes in flows.";
}
leaf flow_count {
type uint32;
description
"Number of flows.";
}
}
grouping ofp_table_feature_property {
description
"Common header for all Table Feature Properties";
leaf type {
type ofp_table_feature_prop_type;
description
"One of OFPTFPT_ .";
}
choice choice_0 {
case instructions {
container instructions {
uses ofp_table_feature_prop_instructions;
description
"";
}
}
case next_tables {
container next_tables {
uses ofp_table_feature_prop_next_tables;
description
"";
}
}
case actions {
container actions {
uses ofp_table_feature_prop_actions;
description
"";
}
}
case oxm {
container oxm {
uses ofp_table_feature_prop_oxm;
description
"";
}
}
case experimenter {
container experimenter {
uses ofp_table_feature_prop_experimenter;
description
"";
}
}
}
}
grouping ofp_table_feature_prop_instructions {
description
"Instructions property";
list instructions {
key "type";
uses ofp_instruction;
description
"One of OFPTFPT_INSTRUCTIONS,
OFPTFPT_INSTRUCTIONS_MISS.List of instructions";
}
}
grouping ofp_table_feature_prop_next_tables {
description
"Next Tables property";
list next_table_ids {
key "next_table_ids";
leaf next_table_ids {
type uint32;
description
"One of OFPTFPT_NEXT_TABLES,
OFPTFPT_NEXT_TABLES_MISS.List of table ids.";
}
description
"One of OFPTFPT_NEXT_TABLES,
OFPTFPT_NEXT_TABLES_MISS.List of table ids.";
}
}
grouping ofp_table_feature_prop_actions {
description
"Actions property";
list actions {
key "type";
uses ofp_action;
description
"One of OFPTFPT_WRITE_ACTIONS,
OFPTFPT_WRITE_ACTIONS_MISS,
OFPTFPT_APPLY_ACTIONS,
OFPTFPT_APPLY_ACTIONS_MISS.List of actions";
}
}
grouping ofp_table_feature_prop_oxm {
description
"Match, Wildcard or Set-Field propertyOne of OFPTFPT_MATCH,
OFPTFPT_WILDCARDS,
OFPTFPT_WRITE_SETFIELD,
OFPTFPT_WRITE_SETFIELD_MISS,
OFPTFPT_APPLY_SETFIELD,
OFPTFPT_APPLY_SETFIELD_MISS.";
list oxm_ids {
key "oxm_ids";
leaf oxm_ids {
type uint32;
description
"TODO is this a uint32???Array of OXM headers";
}
description
"TODO is this a uint32???Array of OXM headers";
}
}
grouping ofp_table_feature_prop_experimenter {
description
"Experimenter table feature property";
leaf experimenter {
type uint32;
description
"One of OFPTFPT_EXPERIMENTER,
OFPTFPT_EXPERIMENTER_MISS.Experimenter ID which takes the same
form as in struct
ofp_experimenter_header.";
}
leaf exp_type {
type uint32;
description
"Experimenter defined.";
}
list experimenter_data {
key "experimenter_data";
leaf experimenter_data {
type uint32;
description
"";
}
description
"";
}
}
container ofp_table_features {
description
"Body for ofp_multipart_request of type OFPMP_TABLE_FEATURES.
Body of reply to OFPMP_TABLE_FEATURES request.";
leaf table_id {
type uint32;
description
"Identifier of table. Lower numbered tables
are consulted first.";
}
leaf name {
type string;
description
"";
}
leaf metadata_match {
type uint64;
description
"Bits of metadata table can match.";
}
leaf metadata_write {
type uint64;
description
"Bits of metadata table can write.";
}
leaf config {
type uint32;
description
"Bitmap of OFPTC_ values";
}
leaf max_entries {
type uint32;
description
"Max number of entries supported.";
}
list properties {
key "type";
uses ofp_table_feature_property;
description
"Table Feature Property list";
}
}
container ofp_table_stats {
description
"Body of reply to OFPMP_TABLE request.";
leaf table_id {
type uint32;
description
"Identifier of table. Lower numbered tables
are consulted first.";
}
leaf active_count {
type uint32;
description
"Number of active entries.";
}
leaf lookup_count {
type uint64;
description
"Number of packets looked up in table.";
}
leaf matched_count {
type uint64;
description
"Number of packets that hit table.";
}
}
container ofp_port_stats_request {
description
"Body for ofp_multipart_request of type OFPMP_PORT.";
leaf port_no {
type uint32;
description
"OFPMP_PORT message must request statistics
either for a single port (specified in
port_no) or for all ports (if port_no ==
OFPP_ANY).";
}
}
container ofp_port_stats {
description
"Body of reply to OFPMP_PORT request. If a counter is unsupported, set
the field to all ones.";
leaf port_no {
type uint32;
description
"";
}
leaf rx_packets {
type uint64;
description
"Number of received packets.";
}
leaf tx_packets {
type uint64;
description
"Number of transmitted packets.";
}
leaf rx_bytes {
type uint64;
description
"Number of received bytes.";
}
leaf tx_bytes {
type uint64;
description
"Number of transmitted bytes.";
}
leaf rx_dropped {
type uint64;
description
"Number of packets dropped by RX.";
}
leaf tx_dropped {
type uint64;
description
"Number of packets dropped by TX.";
}
leaf rx_errors {
type uint64;
description
"Number of receive errors. This is a super-set
of more specific receive errors and should be
greater than or equal to the sum of all
rx_ _err values.";
}
leaf tx_errors {
type uint64;
description
"Number of transmit errors. This is a super-set
of more specific transmit errors and should be
greater than or equal to the sum of all
tx_ _err values (none currently defined.)";
}
leaf rx_frame_err {
type uint64;
description
"Number of frame alignment errors.";
}
leaf rx_over_err {
type uint64;
description
"Number of packets with RX overrun.";
}
leaf rx_crc_err {
type uint64;
description
"Number of CRC errors.";
}
leaf collisions {
type uint64;
description
"Number of collisions.";
}
leaf duration_sec {
type uint32;
description
"Time port has been alive in seconds.";
}
leaf duration_nsec {
type uint32;
description
"Time port has been alive in nanoseconds
beyond duration_sec.";
}
}
container ofp_group_stats_request {
description
"Body of OFPMP_GROUP request.";
leaf group_id {
type uint32;
description
"All groups if OFPG_ALL.";
}
}
grouping ofp_bucket_counter {
description
"Used in group stats replies.";
leaf packet_count {
type uint64;
description
"Number of packets processed by bucket.";
}
leaf byte_count {
type uint64;
description
"Number of bytes processed by bucket.";
}
}
grouping ofp_group_stats {
description
"Body of reply to OFPMP_GROUP request.";
leaf group_id {
type uint32;
description
"Group identifier.";
}
leaf ref_count {
type uint32;
description
"Number of flows or groups that directly
forward to this group.";
}
leaf packet_count {
type uint64;
description
"Number of packets processed by group.";
}
leaf byte_count {
type uint64;
description
"Number of bytes processed by group.";
}
leaf duration_sec {
type uint32;
description
"Time group has been alive in seconds.";
}
leaf duration_nsec {
type uint32;
description
"Time group has been alive in nanoseconds
beyond duration_sec.";
}
list bucket_stats {
key "packet_count";
uses ofp_bucket_counter;
description
"One counter set per
bucket.";
}
}
grouping ofp_group_desc {
description
"Body of reply to OFPMP_GROUP_DESC request.";
leaf type {
type ofp_group_type;
description
"One of OFPGT_ .";
}
leaf group_id {
type uint32;
description
"Group identifier.";
}
list buckets {
key "weight";
uses ofp_bucket;
description
"List of buckets - 0 or more.";
}
}
grouping ofp_group_entry {
description
"";
leaf type {
type ofp_group_type;
description
"One of OFPGT_ .";
}
leaf group_id {
type uint32;
description
"Group identifier.";
}
list buckets {
key "weight";
uses ofp_bucket;
description
"List of buckets - 0 or more.";
}
container stats {
uses ofp_group_stats;
description
"";
}
}
container ofp_group_features {
description
"Body of reply to OFPMP_GROUP_FEATURES request. Group features.";
leaf types {
type uint32;
description
"Bitmap of (1 OFPGT_ ) values supported.";
}
leaf capabilities {
type uint32;
description
"Bitmap of OFPGFC_ capability supported.";
}
list max_groups {
key "max_groups";
leaf max_groups {
type uint32;
description
"Maximum number of groups for each type.";
}
description
"Maximum number of groups for each type.";
}
list actions {
key "actions";
leaf actions {
type uint32;
description
"Bitmaps of (1 OFPAT_ ) values
supported.";
}
description
"Bitmaps of (1 OFPAT_ ) values
supported.";
}
}
container ofp_meter_multipart_request {
description
"Body of OFPMP_METER and OFPMP_METER_CONFIG requests.";
leaf meter_id {
type uint32;
description
"Meter instance, or OFPM_ALL.";
}
}
grouping ofp_meter_band_stats {
description
"Statistics for each meter band";
leaf packet_band_count {
type uint64;
description
"Number of packets in band.";
}
leaf byte_band_count {
type uint64;
description
"Number of bytes in band.";
}
}
container ofp_meter_stats {
description
"Body of reply to OFPMP_METER request. Meter statistics.";
leaf meter_id {
type uint32;
description
"Meter instance.";
}
leaf flow_count {
type uint32;
description
"Number of flows bound to meter.";
}
leaf packet_in_count {
type uint64;
description
"Number of packets in input.";
}
leaf byte_in_count {
type uint64;
description
"Number of bytes in input.";
}
leaf duration_sec {
type uint32;
description
"Time meter has been alive in seconds.";
}
leaf duration_nsec {
type uint32;
description
"Time meter has been alive in nanoseconds
beyond duration_sec.";
}
list band_stats {
key "packet_band_count";
uses ofp_meter_band_stats;
description
"The band_stats length is
inferred from the length field.";
}
}
container ofp_meter_config {
description
"Body of reply to OFPMP_METER_CONFIG request. Meter configuration.";
leaf flags {
type uint32;
description
"All OFPMF_ that apply.";
}
leaf meter_id {
type uint32;
description
"Meter instance.";
}
list bands {
key "type";
uses ofp_meter_band_header;
description
"The bands length is
inferred from the length field.";
}
}
container ofp_meter_features {
description
"Body of reply to OFPMP_METER_FEATURES request. Meter features.";
leaf max_meter {
type uint32;
description
"Maximum number of meters.";
}
leaf band_types {
type uint32;
description
"Bitmaps of (1 OFPMBT_ ) values supported.";
}
leaf capabilities {
type uint32;
description
"Bitmaps of ofp_meter_flags .";
}
leaf max_bands {
type uint32;
description
"Maximum bands per meters";
}
leaf max_color {
type uint32;
description
"Maximum color value";
}
}
container ofp_experimenter_multipart_header {
description
"Body for ofp_multipart_request reply of type OFPMP_EXPERIMENTER.";
leaf experimenter {
type uint32;
description
"Experimenter ID which takes the same form
as in struct ofp_experimenter_header.";
}
leaf exp_type {
type uint32;
description
"Experimenter defined.";
}
leaf data {
type binary;
description
"Experimenter-defined arbitrary additional data.";
}
}
container ofp_experimenter_header {
description
"Experimenter extension.";
leaf experimenter {
type uint32;
description
"ofp_header header; Type OFPT_EXPERIMENTER.
Experimenter ID:
- MSB 0: low-order bytes are IEEE OUI.
- MSB != 0: defined by ONF.";
}
leaf exp_type {
type uint32;
description
"Experimenter defined.";
}
leaf data {
type binary;
description
"Experimenter-defined arbitrary additional data.";
}
}
grouping ofp_queue_prop_header {
description
"Common description for a queue.";
leaf property {
type uint32;
description
"One of OFPQT_.";
}
leaf len {
type uint32;
description
"Length of property, including this header.";
}
}
container ofp_queue_prop_min_rate {
description
"Min-Rate queue property description.";
container prop_header {
uses ofp_queue_prop_header;
description
"prop: OFPQT_MIN, len: 16.";
}
leaf rate {
type uint32;
description
"In 1 10 of a percent = 0; 1000 - disabled.";
}
}
container ofp_queue_prop_max_rate {
description
"Max-Rate queue property description.";
container prop_header {
uses ofp_queue_prop_header;
description
"prop: OFPQT_MAX, len: 16.";
}
leaf rate {
type uint32;
description
"In 1 10 of a percent = 0; 1000 - disabled.";
}
}
container ofp_queue_prop_experimenter {
description
"Experimenter queue property description.";
container prop_header {
uses ofp_queue_prop_header;
description
"prop: OFPQT_EXPERIMENTER";
}
leaf experimenter {
type uint32;
description
"Experimenter ID which takes the same
form as in struct
ofp_experimenter_header.";
}
leaf data {
type binary;
description
"Experimenter defined data.";
}
}
grouping ofp_packet_queue {
description
"Full description for a queue.";
leaf queue_id {
type uint32;
description
"id for the specific queue.";
}
leaf port {
type uint32;
description
"Port this queue is attached to.";
}
list properties {
key "property";
uses ofp_queue_prop_header;
description
"List of properties.";
}
}
container ofp_queue_get_config_request {
description
"Query for port queue configuration.";
leaf port {
type uint32;
description
"ofp_header header;
Port to be queried. Should refer
to a valid physical port (i.e. = OFPP_MAX),
or OFPP_ANY to request all configured
queues.";
}
}
container ofp_queue_get_config_reply {
description
"Queue configuration for a given port.";
leaf port {
type uint32;
description
"ofp_header header;";
}
list queues {
key "queue_id";
uses ofp_packet_queue;
description
"List of configured queues.";
}
}
container ofp_action_set_queue {
description
"OFPAT_SET_QUEUE action struct: send packets to given queue on port.";
leaf type {
type uint32;
description
"OFPAT_SET_QUEUE.";
}
leaf queue_id {
type uint32;
description
"Queue id for the packets.";
}
}
container ofp_queue_stats_request {
description
"";
leaf port_no {
type uint32;
description
"All ports if OFPP_ANY.";
}
leaf queue_id {
type uint32;
description
"All queues if OFPQ_ALL.";
}
}
container ofp_queue_stats {
description
"";
leaf port_no {
type uint32;
description
"";
}
leaf queue_id {
type uint32;
description
"Queue i.d";
}
leaf tx_bytes {
type uint64;
description
"Number of transmitted bytes.";
}
leaf tx_packets {
type uint64;
description
"Number of transmitted packets.";
}
leaf tx_errors {
type uint64;
description
"Number of packets dropped due to overrun.";
}
leaf duration_sec {
type uint32;
description
"Time queue has been alive in seconds.";
}
leaf duration_nsec {
type uint32;
description
"Time queue has been alive in nanoseconds
beyond duration_sec.";
}
}
container ofp_role_request {
description
"Role request and reply message.";
leaf role {
type ofp_controller_role;
description
"ofp_header header; Type OFPT_ROLE_REQUEST OFPT_ROLE_REPLY.
One of OFPCR_ROLE_ .";
}
leaf generation_id {
type uint64;
description
"Master Election Generation Id";
}
}
container ofp_async_config {
description
"Asynchronous message configuration.";
list packet_in_mask {
key "packet_in_mask";
leaf packet_in_mask {
type uint32;
description
"ofp_header header; OFPT_GET_ASYNC_REPLY or OFPT_SET_ASYNC.
Bitmasks of OFPR_ values.";
}
description
"ofp_header header; OFPT_GET_ASYNC_REPLY or OFPT_SET_ASYNC.
Bitmasks of OFPR_ values.";
}
list port_status_mask {
key "port_status_mask";
leaf port_status_mask {
type uint32;
description
"Bitmasks of OFPPR_ values.";
}
description
"Bitmasks of OFPPR_ values.";
}
list flow_removed_mask {
key "flow_removed_mask";
leaf flow_removed_mask {
type uint32;
description
"Bitmasks of OFPRR_ values.";
}
description
"Bitmasks of OFPRR_ values.";
}
}
grouping FlowTableUpdate {
description
"ADDITIONAL VOLTHA SPECIFIC MESSAGE TYPES, AIDING RPC CALLS";
leaf id {
type string;
description
"Device.id or LogicalDevice.id";
}
container flow_mod {
uses ofp_flow_mod;
description
"";
}
}
grouping FlowGroupTableUpdate {
description
"";
leaf id {
type string;
description
"Device.id or LogicalDevice.id";
}
container group_mod {
uses ofp_group_mod;
description
"";
}
}
grouping Flows {
description
"";
list items {
key "id";
uses ofp_flow_stats;
description
"";
}
}
grouping FlowGroups {
description
"";
list items {
key "type";
uses ofp_group_entry;
description
"";
}
}
grouping PacketIn {
description
"";
leaf id {
type string;
description
"LogicalDevice.id";
}
container packet_in {
uses ofp_packet_in;
description
"";
}
}
grouping PacketOut {
description
"";
leaf id {
type string;
description
"LogicalDevice.id";
}
container packet_out {
uses ofp_packet_out;
description
"";
}
}
grouping ChangeEvent {
description
"";
leaf id {
type string;
description
"LogicalDevice.id";
}
choice choice_0 {
case port_status {
container port_status {
uses ofp_port_status;
description
"";
}
}
}
}
/* Health related services" */
rpc HealthService-GetHealthStatus {
description
"Return current health status of a Voltha instance";
input {
uses Empty;
}
output {
uses HealthStatus;
}
}
/* Cluster-wide Voltha APIs
These APIs are potentially dispatched to the leader of the Voltha cluster,
to a specific Voltha instance which owns the given device or logical device." */
rpc VolthaGlobalService-GetVoltha {
description
"Get high level information on the Voltha cluster";
input {
uses Empty;
}
output {
uses Voltha_grouping;
}
}
rpc VolthaGlobalService-ListVolthaInstances {
description
"List all Voltha cluster instances";
input {
uses Empty;
}
output {
uses VolthaInstances_grouping;
}
}
rpc VolthaGlobalService-GetVolthaInstance {
description
"Get details on a Voltha cluster instance";
input {
uses ID;
}
output {
uses VolthaInstance_grouping;
}
}
rpc VolthaGlobalService-ListLogicalDevices {
description
"List all logical devices managed by the Voltha cluster";
input {
uses Empty;
}
output {
uses LogicalDevices;
}
}
rpc VolthaGlobalService-GetLogicalDevice {
description
"Get additional information on a given logical device";
input {
uses ID;
}
output {
uses LogicalDevice;
}
}
rpc VolthaGlobalService-ListLogicalDevicePorts {
description
"List ports of a logical device";
input {
uses ID;
}
output {
uses LogicalPorts;
}
}
rpc VolthaGlobalService-ListLogicalDeviceFlows {
description
"List all flows of a logical device";
input {
uses ID;
}
output {
uses Flows;
}
}
rpc VolthaGlobalService-UpdateLogicalDeviceFlowTable {
description
"Update flow table for logical device";
input {
uses FlowTableUpdate;
}
output {
uses Empty;
}
}
rpc VolthaGlobalService-ListLogicalDeviceFlowGroups {
description
"List all flow groups of a logical device";
input {
uses ID;
}
output {
uses FlowGroups;
}
}
rpc VolthaGlobalService-UpdateLogicalDeviceFlowGroupTable {
description
"Update group table for device";
input {
uses FlowGroupTableUpdate;
}
output {
uses Empty;
}
}
rpc VolthaGlobalService-ListDevices {
description
"List all physical devices controlled by the Voltha cluster";
input {
uses Empty;
}
output {
uses Devices;
}
}
rpc VolthaGlobalService-GetDevice {
description
"Get more information on a given physical device";
input {
uses ID;
}
output {
uses Device;
}
}
rpc VolthaGlobalService-CreateDevice {
description
"Pre-provision a new physical device";
input {
uses Device;
}
output {
uses Device;
}
}
rpc VolthaGlobalService-EnableDevice {
description
"Enable a device. If the device was in pre-provisioned state then it
will tansition to ENABLED state. If it was is DISABLED state then it
will tansition to ENABLED state as well.";
input {
uses ID;
}
output {
uses Empty;
}
}
rpc VolthaGlobalService-DisableDevice {
description
"Disable a device";
input {
uses ID;
}
output {
uses Empty;
}
}
rpc VolthaGlobalService-RebootDevice {
description
"Reboot a device";
input {
uses ID;
}
output {
uses Empty;
}
}
rpc VolthaGlobalService-DeleteDevice {
description
"Delete a device";
input {
uses ID;
}
output {
uses Empty;
}
}
rpc VolthaGlobalService-ListDevicePorts {
description
"List ports of a device";
input {
uses ID;
}
output {
uses Ports;
}
}
rpc VolthaGlobalService-ListDevicePmConfigs {
description
"List pm config of a device";
input {
uses ID;
}
output {
uses PmConfigs;
}
}
rpc VolthaGlobalService-UpdateDevicePmConfigs {
description
"Update the pm config of a device";
input {
uses PmConfigs;
}
output {
uses Empty;
}
}
rpc VolthaGlobalService-ListDeviceFlows {
description
"List all flows of a device";
input {
uses ID;
}
output {
uses Flows;
}
}
rpc VolthaGlobalService-ListDeviceFlowGroups {
description
"List all flow groups of a device";
input {
uses ID;
}
output {
uses FlowGroups;
}
}
rpc VolthaGlobalService-ListDeviceTypes {
description
"List device types known to Voltha";
input {
uses Empty;
}
output {
uses DeviceTypes;
}
}
rpc VolthaGlobalService-GetDeviceType {
description
"Get additional information on a device type";
input {
uses ID;
}
output {
uses DeviceType;
}
}
rpc VolthaGlobalService-ListDeviceGroups {
description
"List all device sharding groups";
input {
uses Empty;
}
output {
uses DeviceGroups;
}
}
rpc VolthaGlobalService-GetDeviceGroup {
description
"Get additional information on a device group";
input {
uses ID;
}
output {
uses DeviceGroup;
}
}
rpc VolthaGlobalService-CreateAlarmFilter {
description
"";
input {
uses AlarmFilter;
}
output {
uses AlarmFilter;
}
}
rpc VolthaGlobalService-GetAlarmFilter {
description
"";
input {
uses ID;
}
output {
uses AlarmFilter;
}
}
rpc VolthaGlobalService-UpdateAlarmFilter {
description
"";
input {
uses AlarmFilter;
}
output {
uses AlarmFilter;
}
}
rpc VolthaGlobalService-DeleteAlarmFilter {
description
"";
input {
uses ID;
}
output {
uses Empty;
}
}
rpc VolthaGlobalService-ListAlarmFilters {
description
"";
input {
uses Empty;
}
output {
uses AlarmFilters;
}
}
/* Per-instance APIs
These APIs are always served locally by the Voltha instance on which the
call is made." */
rpc VolthaLocalService-GetVolthaInstance {
description
"Get information on this Voltha instance";
input {
uses Empty;
}
output {
uses VolthaInstance_grouping;
}
}
rpc VolthaLocalService-GetHealth {
description
"Get the health state of the Voltha instance";
input {
uses Empty;
}
output {
uses HealthStatus;
}
}
rpc VolthaLocalService-ListAdapters {
description
"List all active adapters (plugins) in this Voltha instance";
input {
uses Empty;
}
output {
uses Adapters;
}
}
rpc VolthaLocalService-ListLogicalDevices {
description
"List all logical devices managed by this Voltha instance";
input {
uses Empty;
}
output {
uses LogicalDevices;
}
}
rpc VolthaLocalService-GetLogicalDevice {
description
"Get additional information on given logical device";
input {
uses ID;
}
output {
uses LogicalDevice;
}
}
rpc VolthaLocalService-ListLogicalDevicePorts {
description
"List ports of a logical device";
input {
uses ID;
}
output {
uses LogicalPorts;
}
}
rpc VolthaLocalService-ListLogicalDeviceFlows {
description
"List all flows of a logical device";
input {
uses ID;
}
output {
uses Flows;
}
}
rpc VolthaLocalService-UpdateLogicalDeviceFlowTable {
description
"Update flow table for logical device";
input {
uses FlowTableUpdate;
}
output {
uses Empty;
}
}
rpc VolthaLocalService-ListLogicalDeviceFlowGroups {
description
"List all flow groups of a logical device";
input {
uses ID;
}
output {
uses FlowGroups;
}
}
rpc VolthaLocalService-UpdateLogicalDeviceFlowGroupTable {
description
"Update group table for logical device";
input {
uses FlowGroupTableUpdate;
}
output {
uses Empty;
}
}
rpc VolthaLocalService-ListDevices {
description
"List all physical devices managed by this Voltha instance";
input {
uses Empty;
}
output {
uses Devices;
}
}
rpc VolthaLocalService-GetDevice {
description
"Get additional information on this device";
input {
uses ID;
}
output {
uses Device;
}
}
rpc VolthaLocalService-CreateDevice {
description
"Pre-provision a new physical device";
input {
uses Device;
}
output {
uses Device;
}
}
rpc VolthaLocalService-EnableDevice {
description
"Enable a device. If the device was in pre-provisioned state then it
will tansition to ENABLED state. If it was is DISABLED state then it
will tansition to ENABLED state as well.";
input {
uses ID;
}
output {
uses Empty;
}
}
rpc VolthaLocalService-DisableDevice {
description
"Disable a device";
input {
uses ID;
}
output {
uses Empty;
}
}
rpc VolthaLocalService-RebootDevice {
description
"Reboot a device";
input {
uses ID;
}
output {
uses Empty;
}
}
rpc VolthaLocalService-DeleteDevice {
description
"Delete a device";
input {
uses ID;
}
output {
uses Empty;
}
}
rpc VolthaLocalService-ListDevicePorts {
description
"List ports of a device";
input {
uses ID;
}
output {
uses Ports;
}
}
rpc VolthaLocalService-ListDevicePmConfigs {
description
"List pm config of a device";
input {
uses ID;
}
output {
uses PmConfigs;
}
}
rpc VolthaLocalService-UpdateDevicePmConfigs {
description
"Update the pm config of a device";
input {
uses PmConfigs;
}
output {
uses Empty;
}
}
rpc VolthaLocalService-ListDeviceFlows {
description
"List all flows of a device";
input {
uses ID;
}
output {
uses Flows;
}
}
rpc VolthaLocalService-ListDeviceFlowGroups {
description
"List all flow groups of a device";
input {
uses ID;
}
output {
uses FlowGroups;
}
}
rpc VolthaLocalService-ListDeviceTypes {
description
"List device types know to Voltha instance";
input {
uses Empty;
}
output {
uses DeviceTypes;
}
}
rpc VolthaLocalService-GetDeviceType {
description
"Get additional information on given device type";
input {
uses ID;
}
output {
uses DeviceType;
}
}
rpc VolthaLocalService-ListDeviceGroups {
description
"List device sharding groups managed by this Voltha instance";
input {
uses Empty;
}
output {
uses DeviceGroups;
}
}
rpc VolthaLocalService-GetDeviceGroup {
description
"Get more information on given device shard";
input {
uses ID;
}
output {
uses DeviceGroup;
}
}
rpc VolthaLocalService-StreamPacketsOut {
description
"Stream control packets to the dataplane
This does not have an HTTP representation";
input {
uses PacketOut;
}
output {
uses Empty;
}
}
rpc VolthaLocalService-ReceivePacketsIn {
description
"Receive control packet stream
This does not have an HTTP representation";
input {
uses Empty;
}
output {
uses PacketIn;
}
}
rpc VolthaLocalService-ReceiveChangeEvents {
description
"This does not have an HTTP representation";
input {
uses Empty;
}
output {
uses ChangeEvent;
}
}
rpc VolthaLocalService-CreateAlarmFilter {
description
"";
input {
uses AlarmFilter;
}
output {
uses AlarmFilter;
}
}
rpc VolthaLocalService-GetAlarmFilter {
description
"";
input {
uses ID;
}
output {
uses AlarmFilter;
}
}
rpc VolthaLocalService-UpdateAlarmFilter {
description
"";
input {
uses AlarmFilter;
}
output {
uses AlarmFilter;
}
}
rpc VolthaLocalService-DeleteAlarmFilter {
description
"";
input {
uses ID;
}
output {
uses Empty;
}
}
rpc VolthaLocalService-ListAlarmFilters {
description
"";
input {
uses Empty;
}
output {
uses AlarmFilters;
}
}
}