blob: 258ec01ea35dc9f742a8cf4f9ed379f8b06f3960 [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 4
struct ofp_header {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
};
// Special structures used for managing scalar list elements
struct ofp_uint32 {
uint32_t value;
};
// Special structures used for managing scalar list elements
struct ofp_uint8 {
uint8_t value;
};
struct ofp_hello_elem {
uint16_t type;
uint16_t length;
};
struct ofp_hello_elem_versionbitmap {
uint16_t type;
uint16_t length;
list(of_uint32_t) bitmaps;
};
struct ofp_hello {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
list(of_hello_elem_t) elements;
};
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 auxiliary_id;
uint8_t[2] pad;
uint32_t capabilities;
uint32_t reserved;
};
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;
};
// FIXME Does this need to be v4?
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;
};
// This looks like an action header, but is standalone. See
// ofp_table_features_prop_actions
struct ofp_action_id {
uint16_t type;
uint16_t len;
uint8_t[4] pad;
};
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_pop_pbb {
uint16_t type;
uint16_t len;
uint8_t[4] pad;
};
struct ofp_action_push_pbb {
uint16_t type;
uint16_t len;
uint16_t ethertype;
uint8_t[2] pad;
};
struct ofp_action {
uint16_t type;
uint16_t len;
uint8_t[4] pad;
};
struct ofp_instruction {
uint16_t type;
uint16_t len;
};
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_meter {
uint16_t type;
uint16_t len;
uint32_t meter_id;
};
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;
uint64_t cookie;
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_meter_band {
uint16_t type;
uint16_t len;
// uint32_t rate; // These are excluded b/c this is the header
// uint32_t burst_size; // These are excluded b/c this is the header
};
struct ofp_meter_band_drop {
uint16_t type;
uint16_t len;
uint32_t rate;
uint32_t burst_size;
uint8_t[4] pad;
};
struct ofp_meter_band_dscp_remark {
uint16_t type;
uint16_t len;
uint32_t rate;
uint32_t burst_size;
uint8_t prec_level;
uint8_t[3] pad;
};
struct ofp_meter_band_experimenter {
uint16_t type;
uint16_t len;
uint32_t rate;
uint32_t burst_size;
uint32_t experimenter;
};
struct ofp_meter_mod {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint16_t command;
uint16_t flags;
uint32_t meter_id;
list(of_meter_band_t) meters;
};
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
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[3] pad;
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;
uint32_t duration_sec;
uint32_t duration_nsec;
};
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;
uint32_t duration_sec;
uint32_t duration_nsec;
};
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] pad;
uint64_t packet_count;
uint64_t byte_count;
uint32_t duration_sec;
uint32_t duration_nsec;
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;
};
// FIXME: These are padded to 8 byte align beyond the length indicated
struct ofp_table_feature_prop {
uint16_t type;
uint16_t length;
};
struct ofp_table_feature_prop_instructions {
uint16_t type;
uint16_t length;
// FIXME Check if instruction_t is right for ids here
list(of_instruction_t) instruction_ids;
};
struct ofp_table_feature_prop_instructions_miss {
uint16_t type;
uint16_t length;
list(of_instruction_t) instruction_ids;
};
struct ofp_table_feature_prop_next_tables {
uint16_t type;
uint16_t length;
list(of_uint8_t) next_table_ids;
};
struct ofp_table_feature_prop_next_tables_miss {
uint16_t type;
uint16_t length;
list(of_uint8_t) next_table_ids;
};
struct ofp_table_feature_prop_write_actions {
uint16_t type;
uint16_t length;
list(of_action_id_t) action_ids;
};
struct ofp_table_feature_prop_write_actions_miss {
uint16_t type;
uint16_t length;
list(of_action_id_t) action_ids;
};
struct ofp_table_feature_prop_apply_actions {
uint16_t type;
uint16_t length;
list(of_action_id_t) action_ids;
};
struct ofp_table_feature_prop_apply_actions_miss {
uint16_t type;
uint16_t length;
list(of_action_id_t) action_ids;
};
struct ofp_table_feature_prop_match {
uint16_t type;
uint16_t length;
list(of_uint32_t) oxm_ids;
};
struct ofp_table_feature_prop_wildcards {
uint16_t type;
uint16_t length;
list(of_uint32_t) oxm_ids;
};
struct ofp_table_feature_prop_write_setfield {
uint16_t type;
uint16_t length;
list(of_uint32_t) oxm_ids;
};
struct ofp_table_feature_prop_write_setfield_miss {
uint16_t type;
uint16_t length;
list(of_uint32_t) oxm_ids;
};
struct ofp_table_feature_prop_apply_setfield {
uint16_t type;
uint16_t length;
list(of_uint32_t) oxm_ids;
};
struct ofp_table_feature_prop_apply_setfield_miss {
uint16_t type;
uint16_t length;
list(of_uint32_t) oxm_ids;
};
struct ofp_table_feature_prop_experimenter {
uint16_t type;
uint16_t length;
uint32_t experimenter;
uint32_t subtype;
of_octets_t experimenter_data;
};
// Not yet supported
// struct ofp_table_feature_prop_experimenter_miss {
// uint16_t type;
// uint16_t length;
// uint32_t experimenter;
// uint32_t subtype;
// of_octets_t experimenter_data;
// };
struct ofp_table_features {
uint16_t length;
uint8_t table_id;
uint8_t[5] pad;
of_table_name_t name;
uint64_t metadata_match;
uint64_t metadata_write;
uint32_t config;
uint32_t max_entries;
list(of_table_feature_prop_t) properties;
};
struct ofp_meter_features {
uint32_t max_meter;
uint32_t band_types;
uint32_t capabilities;
uint8_t max_bands;
uint8_t max_color;
uint8_t[2] pad;
};
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_meter_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 meter_id;
uint8_t[4] pad;
};
struct ofp_meter_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_meter_stats_t) entries;
};
struct ofp_meter_config_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 meter_id;
uint8_t[4] pad;
};
struct ofp_meter_config_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_meter_band_t) entries;
};
// FIXME stats added to get things working
struct ofp_meter_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;
};
// FIXME stats added to get things working
struct ofp_meter_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;
of_meter_features_t features;
};
// FIXME stats added to get things working
struct ofp_table_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;
list(of_table_features_t) entries;
};
// FIXME stats added to get things working
struct ofp_table_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;
list(of_table_features_t) entries;
};
// FIXME stats added to get things working
struct ofp_port_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;
};
// FIXME stats added to get things working
struct ofp_port_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_port_desc_t) entries;
};
struct ofp_meter_band_stats {
uint64_t packet_band_count;
uint64_t byte_band_count;
};
struct ofp_meter_stats {
uint32_t meter_id;
uint16_t len;
uint8_t[6] pad;
uint32_t flow_count;
uint64_t packet_in_count;
uint64_t byte_in_count;
uint32_t duration_sec;
uint32_t duration_nsec;
list(of_meter_band_stats_t) band_stats;
};
struct ofp_meter_config {
uint16_t length;
uint16_t flags;
uint32_t meter_id;
list(of_meter_band_t) entries;
};
struct ofp_experimenter_multipart_header {
uint32_t experimenter;
uint32_t subtype;
};
// 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;
};
////////////////////////////////////////////////////////////////
// FIXME understand async; where do bitmasks live?
// Determine bitmap type for masks below.
// DOCUMENT masks where uint32_t[0] is interest for equal/master
// while uint32_t[1] is interest for slave
////////////////////////////////////////////////////////////////
struct ofp_async_get_request {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint32_t packet_in_mask_equal_master;
uint32_t packet_in_mask_slave;
uint32_t port_status_mask_equal_master;
uint32_t port_status_mask_slave;
uint32_t flow_removed_mask_equal_master;
uint32_t flow_removed_mask_slave;
};
struct ofp_async_get_reply {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint32_t packet_in_mask_equal_master;
uint32_t packet_in_mask_slave;
uint32_t port_status_mask_equal_master;
uint32_t port_status_mask_slave;
uint32_t flow_removed_mask_equal_master;
uint32_t flow_removed_mask_slave;
};
struct ofp_async_set {
uint8_t version;
uint8_t type;
uint16_t length;
uint32_t xid;
uint32_t packet_in_mask_equal_master;
uint32_t packet_in_mask_slave;
uint32_t port_status_mask_equal_master;
uint32_t port_status_mask_slave;
uint32_t flow_removed_mask_equal_master;
uint32_t flow_removed_mask_slave;
};