/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 ); |
/branches/network/uspace/srv/net/il/arp/arp.h |
---|
64,6 → 64,7 |
ipcarg_t prefix; |
ipcarg_t content; |
ipcarg_t sufix; |
ipcarg_t addr_len; |
measured_string_ref addr; |
char * addr_data; |
measured_string_ref broadcast_addr; |
/branches/network/uspace/srv/net/il/arp/Makefile |
---|
48,7 → 48,8 |
../../modules.c \ |
../../structures/char_map.c \ |
../../structures/measured_strings.c \ |
../../structures/packet/packet.c |
../../structures/packet/packet.c \ |
../../structures/packet/packet_client.c |
DEFS += -D ARP_BUNDLE=1 -D $(NAME)_message=module_message -D $(NAME)_start_module=module_start -D $(NAME)_print_name=module_print_name |
/branches/network/uspace/srv/net/il/ip/ip_messages.h |
---|
37,6 → 37,8 |
#ifndef __NET_IP_MESSAGES_H__ |
#define __NET_IP_MESSAGES_H__ |
#include <async.h> |
#include <ipc/ipc.h> |
#include "../../err.h" |
67,22 → 69,7 |
async_req_5_5( ip_phone, NET_IP_ECHO, ( arg1 ), ( arg2 ), ( arg3 ), ( arg4 ), ( arg5 ), ( answer1 ), ( answer2 ), ( answer3 ), ( answer4 ), ( answer5 )) |
#define ip_send( ip_phone, device_id, packet ) \ |
{ \ |
ERROR_DECLARE; \ |
\ |
aid_t message; \ |
ipc_call_t answer; \ |
ipcarg_t result; \ |
\ |
message = async_send_1(( ip_phone ), NET_IP_SEND, ( device_id ), & answer ); \ |
if( ERROR_OCCURED( packet_send(( packet ), ( ip_phone )))){ \ |
async_wait_for( message, NULL ); \ |
result = ERROR_CODE; \ |
}else{ \ |
async_wait_for( message, & result ); \ |
} \ |
result; \ |
} |
async_msg_1( ip_phone, NET_IP_SEND, packet_get_id( packet )) |
#endif |
/branches/network/uspace/srv/net/il/ip/ip.c |
---|
49,7 → 49,7 |
#include "../../include/socket.h" |
#include "../../netif/device.h" |
#include "../../structures/measured_strings.h" |
#include "../../structures/packet/packet.h" |
#include "../../structures/packet/packet_client.h" |
#include "ip.h" |
#include "ip_messages.h" |
58,6 → 58,7 |
#define DEFAULT_IPV 4 |
#define IPC_GET_DEVICE( call ) ( device_id_t ) IPC_GET_ARG1( * call ) |
#define IPC_GET_PACKET( call ) ( packet_id_t ) IPC_GET_ARG1( * call ) |
#define IPC_GET_PROTO( call ) ( int ) IPC_GET_ARG1( * call ) |
#define IPC_GET_SERVICE( call ) ( services_t ) IPC_GET_ARG2( * call ) |
#define IPC_GET_STATE( call ) ( device_state_t ) IPC_GET_ARG2( * call ) |
213,12 → 214,9 |
// TODO packer received |
case NET_IL_RECEIVED: |
case NET_NIL_RECEIVED: |
if( ERROR_OCCURED( result = packet_receive( & packet ))){ |
ipc_answer_0( callid, ERROR_CODE ); |
continue; |
if( ! ERROR_OCCURED( result = packet_translate( ip_globals.networking_phone, & packet, IPC_GET_PACKET( & call )))){ |
//result = ip_receive_message( IPC_GET_DEVICE( call ), packet ); |
} |
//result = ip_receive_message( IPC_GET_DEVICE( call ), packet ); |
packet_destroy( packet ); |
ipc_answer_0( callid, result ); |
} |
} |
249,6 → 247,7 |
int ip_send_message( device_id_t device_id, packet_t packet ){ |
// TODO send packet |
printf( "Packet to send via %d: %s", device_id, packet_get_data( packet )); |
packet_release( ip_globals.networking_phone, packet_get_id( packet )); |
return EOK; |
} |
269,7 → 268,10 |
case IPC_M_CONNECT_TO_ME: |
return ip_register_message( IPC_GET_PROTO( call ), IPC_GET_PHONE( call )); |
case NET_IP_SEND: |
ERROR_PROPAGATE( packet_receive( & packet )); |
if( ERROR_OCCURED( packet_translate( ip_globals.networking_phone, & packet, IPC_GET_PACKET( call )))){ |
printf( "\nIP send E %d", ERROR_CODE ); |
return ERROR_CODE; |
} |
return ip_send_message( IPC_GET_DEVICE( call ), packet ); |
} |
return ENOTSUP; |
/branches/network/uspace/srv/net/il/ip/Makefile |
---|
48,6 → 48,7 |
../../modules.c \ |
../../structures/measured_strings.c \ |
../../structures/packet/packet.c \ |
../../structures/packet/packet_client.c \ |
../../sockaddr.c |
DEFS += -D IP_BUNDLE=1 -D $(NAME)_message=module_message -D $(NAME)_start_module=module_start -D $(NAME)_print_name=module_print_name |
/branches/network/uspace/srv/net/il/ip/ip_module.c |
---|
42,6 → 42,8 |
#include "../../err.h" |
#include "../../modules.h" |
#include "../../structures/packet/packet.h" |
#include "ip.h" |
#include "ip_module.h" |
63,6 → 65,7 |
async_set_client_connection( client_connection ); |
ip_globals.networking_phone = connect_to_service( SERVICE_NETWORKING ); |
ERROR_PROPAGATE( pm_init()); |
ERROR_PROPAGATE( ip_initialize()); |
ERROR_PROPAGATE( REGISTER_ME( SERVICE_IP, & phonehash )); |