/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; |
} |