static void handle_desc_stats_reply( uint64_t datapath_id, uint32_t transaction_id, uint16_t type, uint16_t flags, const buffer *data, void *user_data ) { UNUSED( transaction_id ); UNUSED( type ); UNUSED( flags ); show_desc *show_desc = user_data; if ( data->length < SIZE_OF_OFP_DESC ) { error( "invalid data" ); stop_trema(); return; } desc_entry *entry = xmalloc( sizeof( desc_entry ) ); entry->datapath_id = datapath_id; #ifdef TREMA_EDGE create_list( &entry->port_desc ); #endif memcpy( &entry->desc_stats, data->data, SIZE_OF_OFP_DESC ); insert_hash_entry( show_desc->db, &entry->datapath_id, entry ); #ifdef TREMA_EDGE buffer *port_desc_request = create_port_desc_multipart_request( get_transaction_id(), 0 ); send_openflow_message( datapath_id, port_desc_request ); free_buffer( port_desc_request ); #else buffer *features_request = create_features_request( get_transaction_id() ); send_openflow_message( datapath_id, features_request ); free_buffer( features_request ); #endif }
static void handle_switch_ready( uint64_t datapath_id, void *user_data ) { UNUSED( user_data ); buffer *message = create_features_request( get_transaction_id() ); send_openflow_message( datapath_id, message ); free_buffer( message ); }
static void send_features_request( sw_entry *sw ) { uint32_t id = get_transaction_id(); buffer *buf = create_features_request( id ); send_openflow_message( sw->datapath_id, buf ); free_buffer( buf ); debug( "Sent switch features request to %#" PRIx64 ".", sw->datapath_id ); }
static void handle_switch_ready( uint64_t datapath_id, void *user_data ) { UNUSED( user_data ); uint32_t id = get_transaction_id(); buffer *buf = create_features_request( id ); send_openflow_message( datapath_id, buf ); free_buffer( buf ); }
static void send_features_request( uint64_t datapath_id, void *user_data ) { UNUSED( user_data ); buffer *features_request = create_features_request( get_transaction_id() ); bool ret = send_openflow_message( datapath_id, features_request ); if ( !ret ) { error( "Failed to send a features request message to the switch with datapath ID = %#" PRIx64 ".", datapath_id ); stop_trema(); } free_buffer( features_request ); }
int ofpmsg_send_featuresrequest( struct switch_info *sw_info ) { int ret; buffer *buf; buf = create_features_request( generate_xid() ); ret = send_to_secure_channel( sw_info, buf ); if ( ret == 0 ) { debug( "Send 'features request' to a switch. fd:%d", sw_info->secure_channel_fd ); } return ret; }
static VALUE features_request_alloc( VALUE klass ) { buffer *features_request = create_features_request( 0 ); return Data_Wrap_Struct( klass, NULL, free_buffer, features_request ); }