static of_list_bsn_tlv_t * make_value (uint32_t vr_ip, of_mac_addr_t mac, uint32_t dhcp_ser_ip, of_octets_t *cid) { of_list_bsn_tlv_t *list = of_list_bsn_tlv_new(OF_VERSION_1_3); { of_bsn_tlv_ipv4_t *tlv = of_bsn_tlv_ipv4_new(OF_VERSION_1_3); of_bsn_tlv_ipv4_value_set(tlv, vr_ip); of_list_append(list, tlv); of_object_delete(tlv); } { of_bsn_tlv_mac_t *tlv = of_bsn_tlv_mac_new(OF_VERSION_1_3); of_bsn_tlv_mac_value_set(tlv, mac); of_list_append(list, tlv); of_object_delete(tlv); } { of_bsn_tlv_ipv4_t *tlv = of_bsn_tlv_ipv4_new(OF_VERSION_1_3); of_bsn_tlv_ipv4_value_set(tlv, dhcp_ser_ip); of_list_append(list, tlv); of_object_delete(tlv); } { of_bsn_tlv_circuit_id_t *tlv = of_bsn_tlv_circuit_id_new(OF_VERSION_1_3); AIM_TRUE_OR_DIE(of_bsn_tlv_circuit_id_value_set(tlv, cid) == OF_ERROR_NONE); of_list_append(list, tlv); of_object_delete(tlv); } return list; }
void ind_core_bsn_table_checksum_stats_request_handler(of_object_t *_obj, indigo_cxn_id_t cxn_id) { of_bsn_table_checksum_stats_request_t *obj = _obj; of_bsn_table_checksum_stats_reply_t *reply; of_list_bsn_table_checksum_stats_entry_t entries; of_bsn_table_checksum_stats_entry_t *entry; uint32_t xid; uint8_t table_id; reply = of_bsn_table_checksum_stats_reply_new(obj->version); AIM_TRUE_OR_DIE(reply != NULL); of_bsn_table_checksum_stats_request_xid_get(obj, &xid); of_bsn_table_checksum_stats_reply_xid_set(reply, xid); of_bsn_table_checksum_stats_reply_entries_bind(reply, &entries); entry = of_bsn_table_checksum_stats_entry_new(entries.version); AIM_TRUE_OR_DIE(entry != NULL); for (table_id = 0; table_id < FT_MAX_TABLES; table_id++) { ft_table_t *table = &ind_core_ft->tables[table_id]; of_bsn_table_checksum_stats_entry_table_id_set(entry, table_id); of_bsn_table_checksum_stats_entry_checksum_set(entry, table->checksum); if (of_list_append(&entries, entry) < 0) { /* This entry didn't fit, send out the current message and * allocate a new one. */ of_bsn_table_checksum_stats_reply_flags_set( reply, OF_STATS_REPLY_FLAG_REPLY_MORE); indigo_cxn_send_controller_message(cxn_id, reply); reply = of_bsn_table_checksum_stats_reply_new(obj->version); AIM_TRUE_OR_DIE(reply != NULL); of_bsn_table_checksum_stats_reply_xid_set(reply, xid); of_bsn_table_checksum_stats_reply_entries_bind(reply, &entries); if (of_list_append(&entries, entry) < 0) { AIM_DIE("unexpected failure appending single bsn_table_checksum stats entry"); } } } of_object_delete(entry); indigo_cxn_send_controller_message(cxn_id, reply); }
static of_list_bsn_tlv_t * make_value(uint32_t ipv4, of_mac_addr_t mac) { of_list_bsn_tlv_t *list = of_list_bsn_tlv_new(OF_VERSION_1_3); { of_bsn_tlv_ipv4_t *tlv = of_bsn_tlv_ipv4_new(OF_VERSION_1_3); of_bsn_tlv_ipv4_value_set(tlv, ipv4); of_list_append(list, tlv); of_object_delete(tlv); } { of_bsn_tlv_mac_t *tlv = of_bsn_tlv_mac_new(OF_VERSION_1_3); of_bsn_tlv_mac_value_set(tlv, mac); of_list_append(list, tlv); of_object_delete(tlv); } return list; }
static of_list_bsn_tlv_t * make_key(uint16_t vlan_vid) { of_list_bsn_tlv_t *list = of_list_bsn_tlv_new(OF_VERSION_1_3); of_bsn_tlv_vlan_vid_t *tlv = of_bsn_tlv_vlan_vid_new(OF_VERSION_1_3); of_bsn_tlv_vlan_vid_value_set(tlv, vlan_vid); of_list_append(list, tlv); of_object_delete(tlv); return list; }
/* * icmp_send_packet_out * * Send the ICMP message out */ indigo_error_t icmpa_send_packet_out (of_octets_t *octets) { of_packet_out_t *obj; of_list_action_t *list; of_action_output_t *action; indigo_error_t rv; if (!octets) return INDIGO_ERROR_PARAM; obj = of_packet_out_new(OF_VERSION_1_3); AIM_TRUE_OR_DIE(obj != NULL); list = of_list_action_new(OF_VERSION_1_3); AIM_TRUE_OR_DIE(list != NULL); action = of_action_output_new(OF_VERSION_1_3); AIM_TRUE_OR_DIE(action != NULL); of_packet_out_buffer_id_set(obj, -1); of_packet_out_in_port_set(obj, OF_PORT_DEST_CONTROLLER); of_action_output_port_set(action, OF_PORT_DEST_USE_TABLE); of_list_append(list, action); of_object_delete(action); rv = of_packet_out_actions_set(obj, list); AIM_ASSERT(rv == 0); of_object_delete(list); rv = of_packet_out_data_set(obj, octets); if (rv < 0) { AIM_LOG_ERROR("ICMPA: Failed to set data on packet out"); of_packet_out_delete(obj); return rv; } rv = indigo_fwd_packet_out(obj); of_packet_out_delete(obj); return rv; }
/* Generated from of10/queue_get_config_reply.data */ static int test_of10_queue_get_config_reply(void) { uint8_t binary[] = { 0x01, 0x15, 0x00, 0x50, 0x12, 0x34, 0x56, 0x78, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; of_object_t *obj; obj = of_queue_get_config_reply_new(OF_VERSION_1_0); of_queue_get_config_reply_port_set(obj, 65534); { of_object_t list; of_queue_get_config_reply_queues_bind(obj, &list); { of_object_t *obj = of_packet_queue_new(OF_VERSION_1_0); { of_object_t list; of_packet_queue_properties_bind(obj, &list); { of_object_t *obj = of_queue_prop_min_rate_new(OF_VERSION_1_0); of_queue_prop_min_rate_rate_set(obj, 5); of_list_append(&list, obj); of_object_delete(obj); } } of_packet_queue_queue_id_set(obj, 1); of_list_append(&list, obj); of_object_delete(obj); } { of_object_t *obj = of_packet_queue_new(OF_VERSION_1_0); { of_object_t list; of_packet_queue_properties_bind(obj, &list); { of_object_t *obj = of_queue_prop_min_rate_new(OF_VERSION_1_0); of_queue_prop_min_rate_rate_set(obj, 6); of_list_append(&list, obj); of_object_delete(obj); } { of_object_t *obj = of_queue_prop_min_rate_new(OF_VERSION_1_0); of_queue_prop_min_rate_rate_set(obj, 7); of_list_append(&list, obj); of_object_delete(obj); } } of_packet_queue_queue_id_set(obj, 2); of_list_append(&list, obj); of_object_delete(obj); } } of_queue_get_config_reply_xid_set(obj, 305419896); if (sizeof(binary) != WBUF_CURRENT_BYTES(OF_OBJECT_TO_WBUF(obj)) || memcmp(binary, WBUF_BUF(OF_OBJECT_TO_WBUF(obj)), sizeof(binary))) { show_failure(binary, sizeof(binary), WBUF_BUF(OF_OBJECT_TO_WBUF(obj)), WBUF_CURRENT_BYTES(OF_OBJECT_TO_WBUF(obj))); of_object_delete(obj); return TEST_FAIL; } of_object_delete(obj); return TEST_PASS; }
/* Generated from of10/packet_in.data */ static int test_of10_packet_in(void) { uint8_t binary[] = { 0x01, 0x0a, 0x00, 0x15, 0x12, 0x34, 0x56, 0x78, 0xab, 0xcd, 0xef, 0x01, 0x00, 0x09, 0xff, 0xfe, 0x01, 0x00, 0x61, 0x62, 0x63, }; of_object_t *obj; obj = of_packet_in_new(OF_VERSION_1_0); of_packet_in_buffer_id_set(obj, 2882400001); { of_octets_t data = { .bytes=3, .data=(uint8_t *)"\x61\x62\x63" }; of_packet_in_data_set(obj, &data); } of_packet_in_in_port_set(obj, 65534); of_packet_in_reason_set(obj, 1); of_packet_in_total_len_set(obj, 9); of_packet_in_xid_set(obj, 305419896); if (sizeof(binary) != WBUF_CURRENT_BYTES(OF_OBJECT_TO_WBUF(obj)) || memcmp(binary, WBUF_BUF(OF_OBJECT_TO_WBUF(obj)), sizeof(binary))) { show_failure(binary, sizeof(binary), WBUF_BUF(OF_OBJECT_TO_WBUF(obj)), WBUF_CURRENT_BYTES(OF_OBJECT_TO_WBUF(obj))); of_object_delete(obj); return TEST_FAIL; } of_object_delete(obj); return TEST_PASS; } /* Generated from of10/packet_out.data */ static int test_of10_packet_out(void) { uint8_t binary[] = { 0x01, 0x0d, 0x00, 0x23, 0x12, 0x34, 0x56, 0x78, 0xab, 0xcd, 0xef, 0x01, 0xff, 0xfe, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, 0x61, 0x62, 0x63, }; of_object_t *obj; obj = of_packet_out_new(OF_VERSION_1_0); of_packet_out_buffer_id_set(obj, 2882400001); of_packet_out_in_port_set(obj, 65534); of_packet_out_xid_set(obj, 305419896); { of_object_t *list = of_list_action_new(OF_VERSION_1_0); { of_object_t *obj = of_action_output_new(OF_VERSION_1_0); of_action_output_max_len_set(obj, 0); of_action_output_port_set(obj, 1); of_list_append(list, obj); of_object_delete(obj); } { of_object_t *obj = of_action_output_new(OF_VERSION_1_0); of_action_output_max_len_set(obj, 0); of_action_output_port_set(obj, 2); of_list_append(list, obj); of_object_delete(obj); } of_packet_out_actions_set(obj, list); of_object_delete(list); } { of_octets_t data = { .bytes=3, .data=(uint8_t *)"\x61\x62\x63" }; of_packet_out_data_set(obj, &data); } if (sizeof(binary) != WBUF_CURRENT_BYTES(OF_OBJECT_TO_WBUF(obj)) || memcmp(binary, WBUF_BUF(OF_OBJECT_TO_WBUF(obj)), sizeof(binary))) { show_failure(binary, sizeof(binary), WBUF_BUF(OF_OBJECT_TO_WBUF(obj)), WBUF_CURRENT_BYTES(OF_OBJECT_TO_WBUF(obj))); of_object_delete(obj); return TEST_FAIL; } of_object_delete(obj); return TEST_PASS; } /* Generated from of10/port_desc.data */ static int test_of10_port_desc(void) { uint8_t binary[] = { 0xff, 0xfd, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x66, 0x6f, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, }; of_object_t *obj; obj = of_port_desc_new(OF_VERSION_1_0); of_port_desc_advertised_set(obj, 32); of_port_desc_config_set(obj, 16); of_port_desc_curr_set(obj, 1); { of_mac_addr_t hw_addr = { { 1, 2, 3, 4, 5, 6 } }; of_port_desc_hw_addr_set(obj, hw_addr); } { of_port_name_t name = "foo"; of_port_desc_name_set(obj, name); } of_port_desc_peer_set(obj, 2048); of_port_desc_port_no_set(obj, 65533); of_port_desc_state_set(obj, 512); of_port_desc_supported_set(obj, 512); if (sizeof(binary) != WBUF_CURRENT_BYTES(OF_OBJECT_TO_WBUF(obj)) || memcmp(binary, WBUF_BUF(OF_OBJECT_TO_WBUF(obj)), sizeof(binary))) { show_failure(binary, sizeof(binary), WBUF_BUF(OF_OBJECT_TO_WBUF(obj)), WBUF_CURRENT_BYTES(OF_OBJECT_TO_WBUF(obj))); of_object_delete(obj); return TEST_FAIL; } of_object_delete(obj); return TEST_PASS; }
/* Generated from of10/flow_stats_entry.data */ static int test_of10_flow_stats_entry(void) { uint8_t binary[] = { 0x00, 0x68, 0x03, 0x00, 0x00, 0x30, 0x00, 0xe2, 0x00, 0x03, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x01, 0x23, 0x45, 0x67, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xa8, 0x03, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x64, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe8, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, }; of_object_t *obj; obj = of_flow_stats_entry_new(OF_VERSION_1_0); { of_object_t list; of_flow_stats_entry_actions_bind(obj, &list); { of_object_t *obj = of_action_output_new(OF_VERSION_1_0); of_action_output_max_len_set(obj, 0); of_action_output_port_set(obj, 1); of_list_append(&list, obj); of_object_delete(obj); } { of_object_t *obj = of_action_output_new(OF_VERSION_1_0); of_action_output_max_len_set(obj, 0); of_action_output_port_set(obj, 2); of_list_append(&list, obj); of_object_delete(obj); } } of_flow_stats_entry_byte_count_set(obj, 1000); of_flow_stats_entry_cookie_set(obj, 81985529216486895); of_flow_stats_entry_duration_nsec_set(obj, 2); of_flow_stats_entry_duration_sec_set(obj, 1); of_flow_stats_entry_hard_timeout_set(obj, 10); of_flow_stats_entry_idle_timeout_set(obj, 5); { of_match_t match = { OF_VERSION_1_0 }; match.fields.in_port = 3; match.fields.eth_src = (of_mac_addr_t) { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab } }; match.fields.eth_dst = (of_mac_addr_t) { { 0xcd, 0xef, 0x01, 0x23, 0x45, 0x67 } }; match.fields.eth_type = 0x800; match.fields.ipv4_src = 0xc0a8037f; match.fields.ipv4_dst = 0xffffffff; OF_MATCH_MASK_IN_PORT_EXACT_SET(&match); OF_MATCH_MASK_ETH_SRC_EXACT_SET(&match); OF_MATCH_MASK_ETH_DST_EXACT_SET(&match); OF_MATCH_MASK_ETH_TYPE_EXACT_SET(&match); //OF_MATCH_MASK_VLAN_VID_EXACT_SET(&match); //OF_MATCH_MASK_VLAN_PCP_EXACT_SET(&match); OF_MATCH_MASK_ETH_TYPE_EXACT_SET(&match); //OF_MATCH_MASK_IP_DSCP_EXACT_SET(&match); //OF_MATCH_MASK_IP_PROTO_EXACT_SET(&match); OF_MATCH_MASK_IPV4_SRC_EXACT_SET(&match); OF_MATCH_MASK_IPV4_DST_EXACT_SET(&match); //OF_MATCH_MASK_TCP_SRC_EXACT_SET(&match); //OF_MATCH_MASK_TCP_DST_EXACT_SET(&match); of_flow_stats_entry_match_set(obj, &match); } of_flow_stats_entry_packet_count_set(obj, 10); of_flow_stats_entry_priority_set(obj, 100); of_flow_stats_entry_table_id_set(obj, 3); if (sizeof(binary) != WBUF_CURRENT_BYTES(OF_OBJECT_TO_WBUF(obj)) || memcmp(binary, WBUF_BUF(OF_OBJECT_TO_WBUF(obj)), sizeof(binary))) { show_failure(binary, sizeof(binary), WBUF_BUF(OF_OBJECT_TO_WBUF(obj)), WBUF_CURRENT_BYTES(OF_OBJECT_TO_WBUF(obj))); of_object_delete(obj); return TEST_FAIL; } of_object_delete(obj); return TEST_PASS; }
int of_list_queue_stats_entry_append(of_list_queue_stats_entry_t *list, of_queue_stats_entry_t *item) { return of_list_append((of_object_t *)list, (of_object_t *)item); }
int of_list_group_desc_stats_entry_append(of_list_group_desc_stats_entry_t *list, of_group_desc_stats_entry_t *item) { return of_list_append((of_object_t *)list, (of_object_t *)item); }
int of_list_meter_stats_append(of_list_meter_stats_t *list, of_meter_stats_t *item) { return of_list_append((of_object_t *)list, (of_object_t *)item); }
int of_list_bsn_flow_checksum_bucket_stats_entry_append(of_list_bsn_flow_checksum_bucket_stats_entry_t *list, of_bsn_flow_checksum_bucket_stats_entry_t *item) { return of_list_append((of_object_t *)list, (of_object_t *)item); }
int of_list_queue_stats_entry_append(of_list_queue_stats_entry_t *list, of_queue_stats_entry_t *obj) { return of_list_append(list, (of_object_t *)obj); }
int of_list_bsn_tlv_append(of_list_bsn_tlv_t *list, of_bsn_tlv_t *item) { return of_list_append((of_object_t *)list, (of_object_t *)item); }
void ind_core_bsn_flow_checksum_bucket_stats_request_handler(of_object_t *_obj, indigo_cxn_id_t cxn_id) { of_bsn_flow_checksum_bucket_stats_request_t *obj = _obj; of_bsn_flow_checksum_bucket_stats_reply_t *reply; of_list_bsn_flow_checksum_bucket_stats_entry_t entries; of_bsn_flow_checksum_bucket_stats_entry_t *entry; uint32_t xid; uint8_t table_id; ft_table_t *table; int bucket_idx; of_bsn_flow_checksum_bucket_stats_request_table_id_get(obj, &table_id); if (table_id >= FT_MAX_TABLES) { AIM_LOG_WARN("Invalid table ID %u", table_id); indigo_cxn_send_error_reply(cxn_id, obj, OF_ERROR_TYPE_BAD_REQUEST, OF_REQUEST_FAILED_EPERM); return; } table = &ind_core_ft->tables[table_id]; reply = of_bsn_flow_checksum_bucket_stats_reply_new(obj->version); AIM_TRUE_OR_DIE(reply != NULL); of_bsn_flow_checksum_bucket_stats_request_xid_get(obj, &xid); of_bsn_flow_checksum_bucket_stats_reply_xid_set(reply, xid); of_bsn_flow_checksum_bucket_stats_reply_entries_bind(reply, &entries); entry = of_bsn_flow_checksum_bucket_stats_entry_new(entries.version); AIM_TRUE_OR_DIE(entry != NULL); for (bucket_idx = 0; bucket_idx < table->checksum_buckets_size; bucket_idx++) { of_bsn_flow_checksum_bucket_stats_entry_checksum_set( entry, table->checksum_buckets[bucket_idx]); if (of_list_append(&entries, entry) < 0) { /* This entry didn't fit, send out the current message and * allocate a new one. */ of_bsn_flow_checksum_bucket_stats_reply_flags_set( reply, OF_STATS_REPLY_FLAG_REPLY_MORE); indigo_cxn_send_controller_message(cxn_id, reply); reply = of_bsn_flow_checksum_bucket_stats_reply_new(obj->version); AIM_TRUE_OR_DIE(reply != NULL); of_bsn_flow_checksum_bucket_stats_reply_xid_set(reply, xid); of_bsn_flow_checksum_bucket_stats_reply_entries_bind(reply, &entries); if (of_list_append(&entries, entry) < 0) { AIM_DIE("unexpected failure appending single bsn_flow_checksum_bucket stats entry"); } } } of_object_delete(entry); indigo_cxn_send_controller_message(cxn_id, reply); }
int of_list_bsn_lacp_stats_entry_append(of_list_bsn_lacp_stats_entry_t *list, of_bsn_lacp_stats_entry_t *obj) { return of_list_append(list, (of_object_t *)obj); }
int of_list_queue_stats_prop_append(of_list_queue_stats_prop_t *list, of_object_t *obj) { return of_list_append(list, obj); }
int of_list_bsn_debug_counter_desc_stats_entry_append(of_list_bsn_debug_counter_desc_stats_entry_t *list, of_object_t *obj) { return of_list_append(list, obj); }
int of_list_action_id_append(of_list_action_id_t *list, of_action_id_t *item) { return of_list_append((of_object_t *)list, (of_object_t *)item); }
int of_list_bsn_flow_checksum_bucket_stats_entry_append(of_list_bsn_flow_checksum_bucket_stats_entry_t *list, of_bsn_flow_checksum_bucket_stats_entry_t *obj) { return of_list_append(list, (of_object_t *)obj); }
int of_list_bucket_counter_append(of_list_bucket_counter_t *list, of_bucket_counter_t *item) { return of_list_append((of_object_t *)list, (of_object_t *)item); }
int of_list_meter_stats_append(of_list_meter_stats_t *list, of_object_t *obj) { return of_list_append(list, obj); }
int of_list_uint32_append(of_list_uint32_t *list, of_object_t *obj) { return of_list_append(list, obj); }
int of_list_action_id_append(of_list_action_id_t *list, of_object_t *obj) { return of_list_append(list, obj); }
/* Generated from of10/flow_stats_reply.data */ static int test_of10_flow_stats_reply(void) { uint8_t binary[] = { 0x01, 0x11, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x68, 0x03, 0x00, 0x00, 0x3f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x64, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe8, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, 0x3f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x64, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe8, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x03, 0x00, 0x00, }; of_object_t *obj; obj = of_flow_stats_reply_new(OF_VERSION_1_0); of_flow_stats_reply_flags_set(obj, 0); of_flow_stats_reply_xid_set(obj, 6); { of_object_t *entries = of_list_flow_stats_entry_new(OF_VERSION_1_0); { of_object_t *elem = of_flow_stats_entry_new(OF_VERSION_1_0); of_flow_stats_entry_byte_count_set(elem, 1000); of_flow_stats_entry_cookie_set(elem, 81985529216486895); of_flow_stats_entry_duration_nsec_set(elem, 2); of_flow_stats_entry_duration_sec_set(elem, 1); of_flow_stats_entry_hard_timeout_set(elem, 10); of_flow_stats_entry_idle_timeout_set(elem, 5); of_flow_stats_entry_packet_count_set(elem, 10); of_flow_stats_entry_priority_set(elem, 100); of_flow_stats_entry_table_id_set(elem, 3); { of_match_t match = { OF_VERSION_1_0 }; of_flow_stats_entry_match_set(elem, &match); } { of_object_t *actions = of_list_action_new(OF_VERSION_1_0); { of_object_t *elem = of_action_output_new(OF_VERSION_1_0); of_action_output_max_len_set(elem, 0); of_action_output_port_set(elem, 1); of_list_append(actions, elem); of_object_delete(elem); } { of_object_t *elem = of_action_output_new(OF_VERSION_1_0); of_action_output_max_len_set(elem, 0); of_action_output_port_set(elem, 2); of_list_append(actions, elem); of_object_delete(elem); } of_flow_stats_entry_actions_set(elem, actions); of_object_delete(actions); } of_list_append(entries, elem); of_object_delete(elem); } { of_object_t *elem = of_flow_stats_entry_new(OF_VERSION_1_0); of_flow_stats_entry_byte_count_set(elem, 1000); of_flow_stats_entry_cookie_set(elem, 81985529216486895); of_flow_stats_entry_duration_nsec_set(elem, 2); of_flow_stats_entry_duration_sec_set(elem, 1); of_flow_stats_entry_hard_timeout_set(elem, 10); of_flow_stats_entry_idle_timeout_set(elem, 5); of_flow_stats_entry_packet_count_set(elem, 10); of_flow_stats_entry_priority_set(elem, 100); of_flow_stats_entry_table_id_set(elem, 4); { of_match_t match = { OF_VERSION_1_0 }; of_flow_stats_entry_match_set(elem, &match); } { of_object_t *actions = of_list_action_new(OF_VERSION_1_0); { of_object_t *elem = of_action_output_new(OF_VERSION_1_0); of_action_output_max_len_set(elem, 0); of_action_output_port_set(elem, 1); of_list_append(actions, elem); of_object_delete(elem); } { of_object_t *elem = of_action_output_new(OF_VERSION_1_0); of_action_output_max_len_set(elem, 0); of_action_output_port_set(elem, 2); of_list_append(actions, elem); of_object_delete(elem); } { of_object_t *elem = of_action_output_new(OF_VERSION_1_0); of_action_output_max_len_set(elem, 0); of_action_output_port_set(elem, 3); of_list_append(actions, elem); of_object_delete(elem); } of_flow_stats_entry_actions_set(elem, actions); of_object_delete(actions); } of_list_append(entries, elem); of_object_delete(elem); } of_flow_stats_reply_entries_set(obj, entries); of_object_delete(entries); } if (sizeof(binary) != WBUF_CURRENT_BYTES(OF_OBJECT_TO_WBUF(obj)) || memcmp(binary, WBUF_BUF(OF_OBJECT_TO_WBUF(obj)), sizeof(binary))) { show_failure(binary, sizeof(binary), WBUF_BUF(OF_OBJECT_TO_WBUF(obj)), WBUF_CURRENT_BYTES(OF_OBJECT_TO_WBUF(obj))); of_object_delete(obj); return TEST_FAIL; } of_object_delete(obj); return TEST_PASS; }
int of_list_table_feature_prop_append(of_list_table_feature_prop_t *list, of_table_feature_prop_t *item) { return of_list_append((of_object_t *)list, (of_object_t *)item); }
/* Generated from of10/port_stats_reply.data */ static int test_of10_port_stats_reply(void) { uint8_t binary[] = { 0x01, 0x11, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, }; of_object_t *obj; obj = of_port_stats_reply_new(OF_VERSION_1_0); { of_object_t list; of_port_stats_reply_entries_bind(obj, &list); { of_object_t *obj = of_port_stats_entry_new(OF_VERSION_1_0); of_port_stats_entry_collisions_set(obj, 5); of_port_stats_entry_port_no_set(obj, 1); of_port_stats_entry_rx_bytes_set(obj, 0); of_port_stats_entry_rx_crc_err_set(obj, 0); of_port_stats_entry_rx_dropped_set(obj, 0); of_port_stats_entry_rx_errors_set(obj, 0); of_port_stats_entry_rx_frame_err_set(obj, 0); of_port_stats_entry_rx_over_err_set(obj, 0); of_port_stats_entry_rx_packets_set(obj, 56); of_port_stats_entry_tx_bytes_set(obj, 0); of_port_stats_entry_tx_dropped_set(obj, 0); of_port_stats_entry_tx_errors_set(obj, 0); of_port_stats_entry_tx_packets_set(obj, 0); of_list_append(&list, obj); of_object_delete(obj); } { of_object_t *obj = of_port_stats_entry_new(OF_VERSION_1_0); of_port_stats_entry_collisions_set(obj, 1); of_port_stats_entry_port_no_set(obj, 65534); of_port_stats_entry_rx_bytes_set(obj, 0); of_port_stats_entry_rx_crc_err_set(obj, 0); of_port_stats_entry_rx_dropped_set(obj, 0); of_port_stats_entry_rx_errors_set(obj, 0); of_port_stats_entry_rx_frame_err_set(obj, 0); of_port_stats_entry_rx_over_err_set(obj, 0); of_port_stats_entry_rx_packets_set(obj, 1); of_port_stats_entry_tx_bytes_set(obj, 0); of_port_stats_entry_tx_dropped_set(obj, 0); of_port_stats_entry_tx_errors_set(obj, 0); of_port_stats_entry_tx_packets_set(obj, 0); of_list_append(&list, obj); of_object_delete(obj); } } of_port_stats_reply_flags_set(obj, 0); of_port_stats_reply_xid_set(obj, 5); if (sizeof(binary) != WBUF_CURRENT_BYTES(OF_OBJECT_TO_WBUF(obj)) || memcmp(binary, WBUF_BUF(OF_OBJECT_TO_WBUF(obj)), sizeof(binary))) { show_failure(binary, sizeof(binary), WBUF_BUF(OF_OBJECT_TO_WBUF(obj)), WBUF_CURRENT_BYTES(OF_OBJECT_TO_WBUF(obj))); of_object_delete(obj); return TEST_FAIL; } of_object_delete(obj); return TEST_PASS; }
int of_list_bsn_gentable_entry_desc_stats_entry_append(of_list_bsn_gentable_entry_desc_stats_entry_t *list, of_bsn_gentable_entry_desc_stats_entry_t *item) { return of_list_append((of_object_t *)list, (of_object_t *)item); }
int of_list_uint32_append(of_list_uint32_t *list, of_uint32_t *item) { return of_list_append((of_object_t *)list, (of_object_t *)item); }
int of_list_bsn_gentable_entry_stats_entry_append(of_list_bsn_gentable_entry_stats_entry_t *list, of_object_t *obj) { return of_list_append(list, obj); }