packet_header.h

Go to the documentation of this file.
00001 /*
00002  * Copyright (c) 2009 Lukas Mejdrech
00003  * All rights reserved.
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions
00007  * are met:
00008  *
00009  * - Redistributions of source code must retain the above copyright
00010  *   notice, this list of conditions and the following disclaimer.
00011  * - Redistributions in binary form must reproduce the above copyright
00012  *   notice, this list of conditions and the following disclaimer in the
00013  *   documentation and/or other materials provided with the distribution.
00014  * - The name of the author may not be used to endorse or promote products
00015  *   derived from this software without specific prior written permission.
00016  *
00017  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
00018  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
00019  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
00020  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
00021  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
00022  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00023  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00024  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00025  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
00026  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00027  */
00028 
00037 #ifndef LIBC_PACKET_HEADER_H_
00038 #define LIBC_PACKET_HEADER_H_
00039 
00040 #include <net/packet.h>
00041 
00045 #define PACKET_DATA_LENGTH(header) \
00046         ((header)->data_end - (header)->data_start)
00047 
00051 #define PACKET_MAX_ADDRESS_LENGTH(header) \
00052         ((header)->dest_addr - (header)->src_addr)
00053 
00057 #define PACKET_MIN_SUFFIX(header) \
00058         ((header)->length - (header)->data_start - (header)->max_content)
00059 
00061 #define PACKET_MAGIC_VALUE      0x11227788
00062 
00064 struct packet {
00066         packet_id_t packet_id;
00067 
00072         size_t order;
00073 
00075         size_t metric;
00077         packet_id_t previous;
00079         packet_id_t next;
00080 
00086         size_t length;
00087 
00089         size_t addr_len;
00090 
00095         size_t src_addr;
00096 
00101         size_t dest_addr;
00102 
00104         size_t max_prefix;
00106         size_t max_content;
00107 
00112         size_t data_start;
00113 
00118         size_t data_end;
00119 
00121         int magic_value;
00122 };
00123 
00130 static inline int packet_is_valid(const packet_t *packet)
00131 {
00132         return packet && (packet->magic_value == PACKET_MAGIC_VALUE);
00133 }
00134 
00135 #endif
00136 

Generated on Thu Jun 2 07:45:47 2011 for HelenOS/USB by  doxygen 1.4.7