blob: 0961abd0098c17c59376e64f286152dd3b9f1e16 [file] [log] [blame]
// Copyright 2013, Big Switch Networks, Inc.
//
// LoxiGen is licensed under the Eclipse Public License, version 1.0 (EPL), with
// the following special exception:
//
// LOXI Exception
//
// As a special exception to the terms of the EPL, you may distribute libraries
// generated by LoxiGen (LoxiGen Libraries) under the terms of your choice, provided
// that copyright and licensing notices generated by LoxiGen are not altered or removed
// from the LoxiGen Libraries and the notice provided below is (i) included in
// the LoxiGen Libraries, if distributed in source code form and (ii) included in any
// documentation for the LoxiGen Libraries, if distributed in binary form.
//
// Notice: "Copyright 2013, Big Switch Networks, Inc. This library was generated by the LoxiGen Compiler."
//
// You may not use this file except in compliance with the EPL or LOXI Exception. You may obtain
// a copy of the EPL at:
//
// http://www.eclipse.org/legal/epl-v10.html
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// EPL for the specific language governing permissions and limitations
// under the EPL.
#version 3
struct ofp_header {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
};
struct ofp_hello {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
};
struct ofp_echo_request {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
of_octets_t data;
};
struct ofp_echo_reply {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
of_octets_t data;
};
struct ofp_experimenter {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint32_t experimenter;
uint32_t subtype;
of_octets_t data;
};
struct ofp_barrier_request {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
};
struct ofp_barrier_reply {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
};
struct ofp_get_config_request {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
};
struct ofp_get_config_reply {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint16_t flags;
uint16_t miss_send_len;
};
struct ofp_set_config {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint16_t flags;
uint16_t miss_send_len;
};
struct ofp_table_mod {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint8_t table_id;
uint8_t[3] pad;
uint32_t config;
};
struct ofp_port_desc {
of_port_no_t port_no;
uint8_t[4] pad;
of_mac_addr_t hw_addr;
uint8_t[2] pad2;
of_port_name_t name;
uint32_t config;
uint32_t state;
uint32_t curr;
uint32_t advertised;
uint32_t supported;
uint32_t peer;
uint32_t curr_speed;
uint32_t max_speed;
};
struct ofp_features_request {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
};
struct ofp_features_reply {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint64_t datapath_id;
uint32_t n_buffers;
uint8_t n_tables;
uint8_t[3] pad;
uint32_t capabilities;
uint32_t reserved;
list(of_port_desc_t) ports;
};
struct ofp_port_status {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint8_t reason;
uint8_t[7] pad;
of_port_desc_t desc;
};
struct ofp_port_mod {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
of_port_no_t port_no;
uint8_t[4] pad;
of_mac_addr_t hw_addr;
uint8_t[2] pad2;
uint32_t config;
uint32_t mask;
uint32_t advertise;
uint8_t[4] pad3;
};
struct ofp_match_v3 {
uint16_t type;
uint16_t length;
list(of_oxm_t) oxm_list;
};
struct ofp_oxm_experimenter_header {
uint32_t oxm_header;
uint32_t experimenter;
of_octets_t data;
};
struct ofp_action_output {
uint16_t type;
uint16_t len;
of_port_no_t port;
uint16_t max_len;
uint8_t[6] pad;
};
struct ofp_action_copy_ttl_out {
uint16_t type;
uint16_t len;
uint8_t[4] pad;
};
struct ofp_action_copy_ttl_in {
uint16_t type;
uint16_t len;
uint8_t[4] pad;
};
struct ofp_action_set_mpls_ttl {
uint16_t type;
uint16_t len;
uint8_t mpls_ttl;
uint8_t[3] pad;
};
struct ofp_action_dec_mpls_ttl {
uint16_t type;
uint16_t len;
uint8_t[4] pad;
};
struct ofp_action_push_vlan {
uint16_t type;
uint16_t len;
uint16_t ethertype;
uint8_t[2] pad;
};
struct ofp_action_pop_vlan {
uint16_t type;
uint16_t len;
uint8_t[4] pad;
};
struct ofp_action_push_mpls {
uint16_t type;
uint16_t len;
uint16_t ethertype;
uint8_t[2] pad;
};
struct ofp_action_pop_mpls {
uint16_t type;
uint16_t len;
uint16_t ethertype;
uint8_t[2] pad;
};
struct ofp_action_set_queue {
uint16_t type;
uint16_t len;
uint32_t queue_id;
};
struct ofp_action_group {
uint16_t type;
uint16_t len;
uint32_t group_id;
};
struct ofp_action_set_nw_ttl {
uint16_t type;
uint16_t len;
uint8_t nw_ttl;
uint8_t[3] pad;
};
struct ofp_action_dec_nw_ttl {
uint16_t type;
uint16_t len;
uint8_t[4] pad;
};
struct ofp_action_set_field {
uint16_t type;
uint16_t len;
of_octets_t field;
};
struct ofp_action_experimenter {
uint16_t type;
uint16_t len;
uint32_t experimenter;
of_octets_t data;
};
struct ofp_action {
uint16_t type;
uint16_t len;
uint8_t[4] pad;
};
struct ofp_instruction {
uint16_t type;
uint16_t len;
uint8_t[4] pad;
};
struct ofp_instruction_goto_table {
uint16_t type;
uint16_t len;
uint8_t table_id;
uint8_t[3] pad;
};
struct ofp_instruction_write_metadata {
uint16_t type;
uint16_t len;
uint8_t[4] pad;
uint64_t metadata;
uint64_t metadata_mask;
};
struct ofp_instruction_write_actions {
uint16_t type;
uint16_t len;
uint8_t[4] pad;
list(of_action_t) actions;
};
struct ofp_instruction_apply_actions {
uint16_t type;
uint16_t len;
uint8_t[4] pad;
list(of_action_t) actions;
};
struct ofp_instruction_clear_actions {
uint16_t type;
uint16_t len;
uint8_t[4] pad;
};
struct ofp_instruction_experimenter {
uint16_t type;
uint16_t len;
uint32_t experimenter;
of_octets_t data;
};
struct ofp_flow_add {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint64_t cookie;
uint64_t cookie_mask;
uint8_t table_id;
of_fm_cmd_t _command;
uint16_t idle_timeout;
uint16_t hard_timeout;
uint16_t priority;
uint32_t buffer_id;
of_port_no_t out_port;
uint32_t out_group;
uint16_t flags;
uint8_t[2] pad;
of_match_t match;
list(of_instruction_t) instructions;
};
struct ofp_flow_modify {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint64_t cookie;
uint64_t cookie_mask;
uint8_t table_id;
of_fm_cmd_t _command;
uint16_t idle_timeout;
uint16_t hard_timeout;
uint16_t priority;
uint32_t buffer_id;
of_port_no_t out_port;
uint32_t out_group;
uint16_t flags;
uint8_t[2] pad;
of_match_t match;
list(of_instruction_t) instructions;
};
struct ofp_flow_modify_strict {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint64_t cookie;
uint64_t cookie_mask;
uint8_t table_id;
of_fm_cmd_t _command;
uint16_t idle_timeout;
uint16_t hard_timeout;
uint16_t priority;
uint32_t buffer_id;
of_port_no_t out_port;
uint32_t out_group;
uint16_t flags;
uint8_t[2] pad;
of_match_t match;
list(of_instruction_t) instructions;
};
struct ofp_flow_delete {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint64_t cookie;
uint64_t cookie_mask;
uint8_t table_id;
of_fm_cmd_t _command;
uint16_t idle_timeout;
uint16_t hard_timeout;
uint16_t priority;
uint32_t buffer_id;
of_port_no_t out_port;
uint32_t out_group;
uint16_t flags;
uint8_t[2] pad;
of_match_t match;
list(of_instruction_t) instructions;
};
struct ofp_flow_delete_strict {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint64_t cookie;
uint64_t cookie_mask;
uint8_t table_id;
of_fm_cmd_t _command;
uint16_t idle_timeout;
uint16_t hard_timeout;
uint16_t priority;
uint32_t buffer_id;
of_port_no_t out_port;
uint32_t out_group;
uint16_t flags;
uint8_t[2] pad;
of_match_t match;
list(of_instruction_t) instructions;
};
struct ofp_bucket {
uint16_t len;
uint16_t weight;
of_port_no_t watch_port;
uint32_t watch_group;
uint8_t[4] pad;
list(of_action_t) actions;
};
struct ofp_group_mod {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint16_t command;
uint8_t group_type;
uint8_t pad;
uint32_t group_id;
list(of_bucket_t) buckets;
};
struct ofp_packet_out {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint32_t buffer_id;
of_port_no_t in_port;
uint16_t actions_len;
uint8_t[6] pad;
list(of_action_t) actions;
of_octets_t data;
};
struct ofp_packet_in {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint32_t buffer_id;
uint16_t total_len;
uint8_t reason;
uint8_t table_id;
of_match_t match;
uint8_t[2] pad;
of_octets_t data; /* FIXME: Ensure total_len gets updated */
};
struct ofp_flow_removed {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint64_t cookie;
uint16_t priority;
uint8_t reason;
uint8_t table_id;
uint32_t duration_sec;
uint32_t duration_nsec;
uint16_t idle_timeout;
uint16_t hard_timeout;
uint64_t packet_count;
uint64_t byte_count;
of_match_t match;
};
struct ofp_error_msg {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint16_t err_type;
uint16_t code;
of_octets_t data;
};
// struct ofp_error_experimenter_msg {
// uint8_t version;
// uint8_t type;
// uint16_t length;
// uint32_t xid;
// uint16_t err_type;
// uint16_t subtype;
// uint32_t experimenter;
// of_octets_t data;
//};
// STATS ENTRIES: flow, table, port, queue, group stats, group desc stats
// FIXME: Verify disambiguation w/ length in object and entry
struct ofp_flow_stats_entry {
uint16_t length;
uint8_t table_id;
uint8_t pad;
uint32_t duration_sec;
uint32_t duration_nsec;
uint16_t priority;
uint16_t idle_timeout;
uint16_t hard_timeout;
uint8_t[6] pad2;
uint64_t cookie;
uint64_t packet_count;
uint64_t byte_count;
of_match_t match;
list(of_instruction_t) instructions;
};
struct ofp_table_stats_entry {
uint8_t table_id;
uint8_t[7] pad;
of_table_name_t name;
of_match_bmap_t match;
of_wc_bmap_t wildcards;
uint32_t write_actions;
uint32_t apply_actions;
uint64_t write_setfields;
uint64_t apply_setfields;
uint64_t metadata_match;
uint64_t metadata_write;
uint32_t instructions;
uint32_t config;
uint32_t max_entries;
uint32_t active_count;
uint64_t lookup_count;
uint64_t matched_count;
};
struct ofp_port_stats_entry {
of_port_no_t port_no;
uint8_t[4] pad;
uint64_t rx_packets;
uint64_t tx_packets;
uint64_t rx_bytes;
uint64_t tx_bytes;
uint64_t rx_dropped;
uint64_t tx_dropped;
uint64_t rx_errors;
uint64_t tx_errors;
uint64_t rx_frame_err;
uint64_t rx_over_err;
uint64_t rx_crc_err;
uint64_t collisions;
};
struct ofp_queue_stats_entry {
of_port_no_t port_no;
uint32_t queue_id;
uint64_t tx_bytes;
uint64_t tx_packets;
uint64_t tx_errors;
};
struct ofp_bucket_counter {
uint64_t packet_count;
uint64_t byte_count;
};
struct ofp_group_stats_entry {
uint16_t length;
uint8_t[2] pad;
uint32_t group_id;
uint32_t ref_count;
uint8_t[4] pad2;
uint64_t packet_count;
uint64_t byte_count;
list(of_bucket_counter_t) bucket_stats;
};
struct ofp_group_desc_stats_entry {
uint16_t length;
uint8_t type;
uint8_t pad;
uint32_t group_id;
list(of_bucket_t) buckets;
};
// STATS:
// Desc, flow, agg, table, port, queue, group, group_desc, group_feat, experi
struct ofp_desc_stats_request {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint16_t stats_type;
uint16_t flags;
uint8_t[4] pad;
};
struct ofp_desc_stats_reply {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint16_t stats_type;
uint16_t flags;
uint8_t[4] pad;
of_desc_str_t mfr_desc;
of_desc_str_t hw_desc;
of_desc_str_t sw_desc;
of_serial_num_t serial_num;
of_desc_str_t dp_desc;
};
struct ofp_flow_stats_request {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint16_t stats_type;
uint16_t flags;
uint8_t[4] pad;
uint8_t table_id;
uint8_t[3] pad;
of_port_no_t out_port;
uint32_t out_group;
uint8_t[4] pad2;
uint64_t cookie;
uint64_t cookie_mask;
of_match_t match;
};
struct ofp_flow_stats_reply {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint16_t stats_type;
uint16_t flags;
uint8_t[4] pad;
list(of_flow_stats_entry_t) entries;
};
struct ofp_aggregate_stats_request {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint16_t stats_type;
uint16_t flags;
uint8_t[4] pad;
uint8_t table_id;
uint8_t[3] pad;
of_port_no_t out_port;
uint32_t out_group;
uint8_t[4] pad2;
uint64_t cookie;
uint64_t cookie_mask;
of_match_t match;
};
struct ofp_aggregate_stats_reply {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint16_t stats_type;
uint16_t flags;
uint8_t[4] pad;
uint64_t packet_count;
uint64_t byte_count;
uint32_t flow_count;
uint8_t[4] pad;
};
struct ofp_table_stats_request {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint16_t stats_type;
uint16_t flags;
uint8_t[4] pad;
};
struct ofp_table_stats_reply {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint16_t stats_type;
uint16_t flags;
uint8_t[4] pad;
list(of_table_stats_entry_t) entries;
};
struct ofp_port_stats_request {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint16_t stats_type;
uint16_t flags;
uint8_t[4] pad;
of_port_no_t port_no;
uint8_t[4] pad;
};
struct ofp_port_stats_reply {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint16_t stats_type;
uint16_t flags;
uint8_t[4] pad;
list(of_port_stats_entry_t) entries;
};
struct ofp_queue_stats_request {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint16_t stats_type;
uint16_t flags;
uint8_t[4] pad;
of_port_no_t port_no;
uint32_t queue_id;
};
struct ofp_queue_stats_reply {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint16_t stats_type;
uint16_t flags;
uint8_t[4] pad;
list(of_queue_stats_entry_t) entries;
};
struct ofp_group_stats_request {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint16_t stats_type;
uint16_t flags;
uint8_t[4] pad;
uint32_t group_id;
uint8_t[4] pad;
};
struct ofp_group_stats_reply {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint16_t stats_type;
uint16_t flags;
uint8_t[4] pad;
list(of_group_stats_entry_t) entries;
};
struct ofp_group_desc_stats_request {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint16_t stats_type;
uint16_t flags;
uint8_t[4] pad;
};
struct ofp_group_desc_stats_reply {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint16_t stats_type;
uint16_t flags;
uint8_t[4] pad;
list(of_group_desc_stats_entry_t) entries;
};
struct ofp_group_features_stats_request {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint16_t stats_type;
uint16_t flags;
uint8_t[4] pad;
};
struct ofp_group_features_stats_reply {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint16_t stats_type;
uint16_t flags;
uint8_t[4] pad;
uint32_t types;
uint32_t capabilities;
uint32_t max_groups_all;
uint32_t max_groups_select;
uint32_t max_groups_indirect;
uint32_t max_groups_ff;
uint32_t actions_all;
uint32_t actions_select;
uint32_t actions_indirect;
uint32_t actions_ff;
};
struct ofp_experimenter_stats_request {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint16_t stats_type;
uint16_t flags;
uint8_t[4] pad;
uint32_t experimenter;
uint32_t subtype;
of_octets_t data;
};
struct ofp_experimenter_stats_reply {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint16_t stats_type;
uint16_t flags;
uint8_t[4] pad;
uint32_t experimenter;
uint32_t subtype;
of_octets_t data;
};
// END OF STATS OBJECTS
struct ofp_queue_prop {
uint16_t type;
uint16_t len;
uint8_t[4] pad;
};
struct ofp_queue_prop_min_rate {
uint16_t type;
uint16_t len;
uint8_t[4] pad;
uint16_t rate;
uint8_t[6] pad;
};
struct ofp_queue_prop_max_rate {
uint16_t type;
uint16_t len;
uint8_t[4] pad;
uint16_t rate;
uint8_t[6] pad;
};
struct ofp_queue_prop_experimenter {
uint16_t type;
uint16_t len;
uint8_t[4] pad;
uint32_t experimenter;
uint8_t[4] pad;
of_octets_t data;
};
struct ofp_packet_queue {
uint32_t queue_id;
of_port_no_t port;
uint16_t len;
uint8_t[6] pad;
list(of_queue_prop_t) properties;
};
struct ofp_queue_get_config_request {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
of_port_no_t port;
uint8_t[4] pad;
};
struct ofp_queue_get_config_reply {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
of_port_no_t port;
uint8_t[4] pad;
list(of_packet_queue_t) queues;
};
struct ofp_role_request {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint32_t role;
uint8_t[4] pad;
uint64_t generation_id;
};
struct ofp_role_reply {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
of_octets_t data;
};