Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 4394 → Rev 4395

/branches/network/uspace/srv/net/structures/packet/packet_header.h
69,7 → 69,7
* Corresponds to the mapped sharable memory block.
*/
size_t length;
/** Source and destination addresses length.
/** Stored source and destination addresses length.
*/
size_t addr_len;
/** Souce address offset in bytes from the beginning of the packet header.
/branches/network/uspace/srv/net/structures/packet/packet_client.c
85,10 → 85,10
}
 
int packet_get_addr( const packet_t packet, uint8_t ** src, uint8_t ** dest ){
if( !( packet_is_valid( packet ) && src && dest )) return EINVAL;
if( ! packet_is_valid( packet )) return EINVAL;
if( ! packet->addr_len ) return 0;
* src = ( void * ) packet + packet->src_addr;
* dest = ( void * ) packet + packet->dest_addr;
if( src ) * src = ( void * ) packet + packet->src_addr;
if( dest ) * dest = ( void * ) packet + packet->dest_addr;
return packet->addr_len;
}
 
104,21 → 104,24
 
int packet_set_addr( packet_t packet, const uint8_t * src, const uint8_t * dest, size_t addr_len ){
size_t padding;
size_t allocated;
 
if( ! packet_is_valid( packet )) return EINVAL;
if( packet->addr_len < addr_len ) return ENOMEM;
padding = packet->addr_len - addr_len;
allocated = packet->dest_addr - packet->src_addr;
if( allocated < addr_len ) return ENOMEM;
padding = allocated - addr_len;
packet->addr_len = addr_len;
if( src ){
memcpy(( void * ) packet + packet->src_addr, src, addr_len );
if( padding ) bzero(( void * ) packet + packet->src_addr + addr_len, padding );
}else{
bzero(( void * ) packet + packet->src_addr + addr_len, packet->addr_len );
bzero(( void * ) packet + packet->src_addr, allocated );
}
if( dest ){
memcpy(( void * ) packet + packet->dest_addr, dest, addr_len );
if( padding ) bzero(( void * ) packet + packet->dest_addr + addr_len, padding );
}else{
bzero(( void * ) packet + packet->dest_addr + addr_len, packet->addr_len );
bzero(( void * ) packet + packet->dest_addr, allocated );
}
return EOK;
}
/branches/network/uspace/srv/net/structures/packet/packet_client.h
137,19 → 137,18
 
/** Returns the stored packet addresses and their length.
* @param packet The packet. Input parameter.
* @param src The source address. Output parameter.
* @param dest The destination address. Output parameter.
* @returns The addresses length.
* @param src The source address. May be NULL if not desired. Output parameter.
* @param dest The destination address. May be NULL if not desired. Output parameter.
* @returns The stored addresses length.
* @returns Zero (0) if the addresses are not present.
* @returns EINVAL if the packet is not valid.
* @returns EINVAL if the src and/or the dest parameter is NULL.
*/
int packet_get_addr( const packet_t packet, uint8_t ** src, uint8_t ** dest );
 
/** Sets the packet addresses.
* @param packet The packet. Input parameter.
* @param src The new source address. Output parameter.
* @param dest The new destination address. Output parameter.
* @param src The new source address. May be NULL. Input parameter.
* @param dest The new destination address. May be NULL. Input parameter.
* @param addr_len The addresses length.
* @returns EOK on success.
* @returns EINVAL if the packet is not valid.
/branches/network/uspace/srv/net/structures/packet/packet_server.c
129,7 → 129,7
*/
packet_t packet_create( size_t length, size_t addr_len, size_t max_prefix, size_t max_content, size_t max_suffix );
 
/** Initializes the packet according to the given dimensions.
/** Clears and initializes the packet according to the given dimensions.
* @param packet The packet to be initialized. Input parameter.
* @param addr_len The source and destination addresses maximal length in bytes. Input parameter.
* @param max_prefix The maximal prefix length in bytes. Input parameter.
258,7 → 258,6
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;
268,16 → 267,24
}
 
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
packet->order = 0;
packet->metric = 0;
packet->previous = 0;
packet->next = 0;
packet->addr_len = addr_len;
packet->src_addr = sizeof( struct packet );
packet->dest_addr = packet->src_addr + packet->addr_len;
packet->addr_len = 0;
*/ packet->src_addr = sizeof( struct packet );
packet->dest_addr = packet->src_addr + addr_len;
packet->max_prefix = max_prefix;
packet->max_content = max_content;
packet->data_start = packet->dest_addr + packet->addr_len + packet->max_prefix;
packet->data_start = packet->dest_addr + addr_len + packet->max_prefix;
packet->data_end = packet->data_start;
}