src/switch_manager/switch.c in trema-0.4.4 vs src/switch_manager/switch.c in trema-0.4.5

- old
+ new

@@ -384,11 +384,11 @@ switch_event_disconnected( sw_info ); } static void -confirm_self_dpid_is_registered( uint64_t* dpids, size_t n_dpids, void *user_data ); +confirm_self_dpid_is_registered( const list_element *switches, void *user_data ); int switch_event_recv_featuresreply( struct switch_info *sw_info, uint64_t *dpid ) { int ret; @@ -457,11 +457,12 @@ init_event_forward_interface(); // Check switch_manager registration debug( "Checking switch manager's switch list." ); sw_info->retry_count = REGISTRATION_RETRY_COUNT; - if ( send_efi_switch_list_request( confirm_self_dpid_is_registered, sw_info ) ) { + set_list_switches_reply_handler( confirm_self_dpid_is_registered ); + if ( send_list_switches_request( sw_info ) ) { switch_set_timeout( REGISTRATION_TIMEOUT, registration_timeout, sw_info ); } else { error( "Failed to send switch list request to switch manager." ); return -1; @@ -493,30 +494,31 @@ return; } sw_info->retry_count--; sw_info->running_timer = false; debug( "Checking switch manager's switch list." ); - if ( send_efi_switch_list_request( confirm_self_dpid_is_registered, sw_info ) ) { + set_list_switches_reply_handler( confirm_self_dpid_is_registered ); + if ( send_list_switches_request( sw_info ) ) { switch_set_timeout( REGISTRATION_TIMEOUT, registration_timeout, sw_info ); } else { error( "Failed to send switch list request to switch manager." ); switch_event_disconnected( sw_info ); } } static void -confirm_self_dpid_is_registered( uint64_t* dpids, size_t n_dpids, void *user_data ) { +confirm_self_dpid_is_registered( const list_element *switches, void *user_data ) { struct switch_info *sw_info = user_data; switch_unset_timeout( registration_timeout, sw_info ); debug( "Received switch manager's switch list." ); bool found = false; - for ( size_t i = 0 ; i < n_dpids ; ++i ) { - if ( sw_info->datapath_id == dpids[ i ] ) { + for ( const list_element *e = switches; e != NULL; e = e->next ) { + if ( sw_info->datapath_id == *( uint64_t * ) e->data ) { // self dpid registered debug( "Self dpid found" ); found = true; break; } @@ -579,17 +581,23 @@ stop_switch( sw_info ); } static void -confirm_self_dpid_is_unregistered( uint64_t* dpids, size_t n_dpids, void *user_data ); +confirm_self_dpid_is_unregistered( const list_element *switches, void *user_data ); int switch_event_disconnected( struct switch_info *sw_info ) { int old_state = sw_info->state; + if ( sw_info->state == SWITCH_STATE_DISCONNECTED || + sw_info->state == SWITCH_STATE_CONNECTION_FAILED ) { + debug( "already disconnected" ); + return -1; + } + if ( sw_info->state == SWITCH_STATE_COMPLETED ) { sw_info->state = SWITCH_STATE_DISCONNECTED; } else { sw_info->state = SWITCH_STATE_CONNECTION_FAILED; @@ -633,11 +641,12 @@ service_send_to_application( &switch_manager_only_list, state, &sw_info->datapath_id, NULL ); // Check switch_manager registration debug( "Checking switch manager's switch list." ); sw_info->retry_count = UNREGISTRATION_RETRY_COUNT; - if ( send_efi_switch_list_request( confirm_self_dpid_is_unregistered, sw_info ) ) { + set_list_switches_reply_handler( confirm_self_dpid_is_unregistered ); + if ( send_list_switches_request( sw_info ) ) { switch_set_timeout( UNREGISTRATION_TIMEOUT, unregistration_timeout, sw_info ); } else { error( "Failed to send switch list request to switch manager." ); stop_switch( sw_info ); @@ -656,29 +665,30 @@ return; } sw_info->retry_count--; sw_info->running_timer = false; debug( "Checking switch manager's switch list." ); - if ( send_efi_switch_list_request( confirm_self_dpid_is_unregistered, sw_info ) ) { + set_list_switches_reply_handler( confirm_self_dpid_is_unregistered ); + if ( send_list_switches_request( sw_info ) ) { switch_set_timeout( UNREGISTRATION_TIMEOUT, unregistration_timeout, sw_info ); } else { error( "Failed to send switch list request to switch manager." ); stop_switch( sw_info ); } } static void -confirm_self_dpid_is_unregistered( uint64_t* dpids, size_t n_dpids, void *user_data ) { +confirm_self_dpid_is_unregistered( const list_element *switches, void *user_data ) { struct switch_info *sw_info = user_data; switch_unset_timeout( unregistration_timeout, sw_info ); debug( "Received switch manager's switch list." ); bool found = false; - for ( size_t i = 0 ; i < n_dpids ; ++i ) { - if ( sw_info->datapath_id == dpids[ i ] ) { + for ( const list_element *e = switches; e != NULL; e = e->next ) { + if ( sw_info->datapath_id == *( uint64_t * ) e->data ) { // self dpid registered debug( "Self dpid found" ); found = true; break; }