static void send_packet_out_for_each_switch( switch_info *sw, const buffer *packet, uint64_t dpid, uint16_t in_port ) { openflow_actions *actions = create_actions(); int number_of_actions = foreach_port( sw->ports, build_packet_out_actions, actions, dpid, in_port ); if ( number_of_actions > 0 ) { send_packet_out( sw->dpid, actions, packet ); } delete_actions( actions ); }
static void send_packet_out_for_each_switch( switch_info *sw, void *user_data ) { openflow_actions *actions = create_actions(); port_params params; params.switch_params = user_data; params.actions = actions; foreach_port( sw->ports, build_packet_out_actions, ¶ms ); // check if no action is build if ( actions->n_actions > 0 ) { const buffer *packet = params.switch_params->packet; send_packet_out( sw->dpid, actions, packet ); } delete_actions( actions ); }
static void send_packet_out_for_each_switch( switch_info *sw, buffer *packet, uint64_t dpid, uint16_t in_port ) { openflow_actions *actions = create_actions(); int number_of_actions = foreach_port( sw->ports, build_packet_out_actions, actions, dpid, in_port ); // check if no action is build if ( number_of_actions > 0 ) { const uint32_t transaction_id = get_transaction_id(); const uint32_t buffer_id = UINT32_MAX; const uint16_t in_port = OFPP_NONE; fill_ether_padding( packet ); buffer *packet_out = create_packet_out( transaction_id, buffer_id, in_port, actions, packet ); send_openflow_message( sw->dpid, packet_out ); free_buffer( packet_out ); } delete_actions( actions ); }