Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 3886 → Rev 3901

/branches/network/uspace/srv/net/il/arp/arp.c
51,6 → 51,7
 
#include "../../structures/measured_strings.h"
#include "../../structures/packet/packet.h"
#include "../../structures/packet/packet_client.h"
 
#include "arp.h"
#include "arp_header.h"
59,6 → 60,7
#include "arp_module.h"
 
#define IPC_GET_DEVICE( call ) ( device_id_t ) IPC_GET_ARG1( * call )
#define IPC_GET_PACKET( call ) ( packet_id_t ) IPC_GET_ARG2( * call )
#define IPC_GET_PROTO( call ) ( services_t ) IPC_GET_ARG2( * call )
#define IPC_GET_SERVICE( call ) ( services_t ) IPC_GET_ARG3( * call )
 
147,7 → 149,7
// bind the new one
device->phone = bind_service( device->service, device->device_id, SERVICE_ARP, 0, arp_receiver );
// get packet dimensions
if( ERROR_OCCURED( async_req_1_3( device->phone, NET_NIL_PACKET_SPACE, device_id, & device->prefix, & device->content, & device->sufix ))){
if( ERROR_OCCURED( async_req_1_4( device->phone, NET_NIL_PACKET_SPACE, device_id, & device->addr_len, & device->prefix, & device->content, & device->sufix ))){
arp_protos_destroy( & device->protos );
free( device );
return ERROR_CODE;
216,7 → 218,7
if( length > device->content ){
return NULL;
}
packet = packet_create( device->prefix, length, device->sufix );
packet = packet_get_5( arp_globals.networking_phone, SERVICE_ARP, device->addr_len, device->prefix, length, device->sufix );
if( ! packet ) return NULL;
header = ( arp_header_ref ) packet_append( packet, length );
header->hardware = device->hardware;
233,7 → 235,7
length += device->addr->length;
memcpy((( uint8_t * ) header ) + length, target->value, target->length );
// TODO send to the device->broadcast_addr as arp protocol
packet_send( packet, device->phone );
async_msg_3( device->phone, NET_NETIF_SEND, device_id, SERVICE_ARP, packet_get_id( packet ));
return NULL;
}
 
311,7 → 313,9
memcpy( src_hw, des_hw, header->hardware_length );
memcpy( des_hw, hw_source->value, hw_source->length );
// TODO send to the hw_source as arp protocol
packet_send( packet, device->phone );
async_msg_3( device->phone, NET_NETIF_SEND, device_id, SERVICE_ARP, packet_get_id( packet ));
}else{
packet_release( arp_globals.networking_phone, packet_get_id( packet ));
}
}
return EOK;
414,7 → 418,7
//TODO clear device if off?
break;
case NET_IL_RECEIVED:
if( ! ERROR_OCCURED( packet_receive( & packet ))){
if( ! ERROR_OCCURED( packet_translate( arp_globals.networking_phone, & packet, IPC_GET_PACKET( & call )))){
ERROR_CODE = arp_receive_message( IPC_GET_DEVICE( & call ), packet );
}
ipc_answer_0( callid, ERROR_CODE );