Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 4504 → Rev 4505

/branches/network/uspace/srv/net/structures/packet/packet_server.c
194,8 → 194,8
case NET_PACKET_GET_SIZE:
packet = pm_find( IPC_GET_ID( call ));
if( ! packet_is_valid( packet )) return ENOENT;
IPC_SET_ARG1( * answer, packet->length );
* answer_count = 1;
IPC_SET_ARG1( * answer, packet->length );
return EOK;
case NET_PACKET_RELEASE:
return packet_release_wrapper( IPC_GET_ID( call ));
234,7 → 234,12
while( packet_is_valid( packet ) && ( packet->length < length )){
packet = pm_find( packet->next );
}
if( packet ){
if( packet_is_valid( packet )){
if( packet == ps_globals.free[ index ] ){
ps_globals.free[ index ] = pq_detach( packet );
}else{
pq_detach( packet );
}
packet_init( packet, addr_len, max_prefix, max_content, max_suffix );
futex_up( & ps_globals.lock );
return packet;
258,29 → 263,24
packet->packet_id = ps_globals.count;
packet->length = length;
packet_init( packet, addr_len, max_prefix, max_content, max_suffix );
packet->magic_value = PACKET_MAGIC_VALUE;
if( ERROR_OCCURRED( pm_add( packet ))){
munmap( packet, packet->length );
return NULL;
}
packet_release( packet );
return packet;
}
 
void packet_init( packet_t packet, size_t addr_len, size_t max_prefix, size_t max_content, size_t max_suffix ){
int length;
 
// clear whole packet
length = packet->length;
bzero( packet, packet->length );
packet->length = length;
packet->magic_value = PACKET_MAGIC_VALUE;
/* // clear the packet header
// clear the packet content
bzero((( void * ) packet ) + sizeof( struct packet ), packet->length - sizeof( struct packet ));
// clear the packet header
packet->order = 0;
packet->metric = 0;
packet->previous = 0;
packet->next = 0;
packet->addr_len = 0;
*/ packet->src_addr = sizeof( struct packet );
packet->src_addr = sizeof( struct packet );
packet->dest_addr = packet->src_addr + addr_len;
packet->max_prefix = max_prefix;
packet->max_content = max_content;