Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/tl/tcp/tcp_header.h

    r89e57cee raadf01e  
    2828
    2929/** @addtogroup tcp
    30  * @{
     30 *  @{
    3131 */
    3232
    3333/** @file
    34  * TCP header definition.
    35  * Based on the RFC 793.
    36  */
    37 
    38 #ifndef NET_TCP_HEADER_H_
    39 #define NET_TCP_HEADER_H_
     34 *  TCP header definition.
     35 *  Based on the RFC~793.
     36 */
     37
     38#ifndef __NET_TCP_HEADER_H__
     39#define __NET_TCP_HEADER_H__
    4040
    4141#include <sys/types.h>
    4242
    43 /** TCP header size in bytes. */
    44 #define TCP_HEADER_SIZE                         sizeof(tcp_header_t)
     43/** TCP header size in bytes.
     44 */
     45#define TCP_HEADER_SIZE                 sizeof(tcp_header_t)
    4546
    4647/** Returns the actual TCP header length in bytes.
    47  * @param[in] header The TCP packet header.
    48  */
    49 #define TCP_HEADER_LENGTH(header)               ((header)->header_length * 4U)
     48 *  @param[in] header The TCP packet header.
     49 */
     50#define TCP_HEADER_LENGTH(header)               ((header)->header_length * 4u)
    5051
    5152/** Returns the TCP header length.
    52  * @param[in] length The TCP header length in bytes.
    53  */
    54 #define TCP_COMPUTE_HEADER_LENGTH(length)       ((uint8_t) ((length) / 4U))
     53 *  @param[in] length The TCP header length in bytes.
     54 */
     55#define TCP_COMPUTE_HEADER_LENGTH(length)               ((uint8_t) ((length) / 4u))
    5556
    5657/** Type definition of the transmission datagram header.
    57  * @see tcp_header
    58  */
    59 typedef struct tcp_header tcp_header_t;
     58 *  @see tcp_header
     59 */
     60typedef struct tcp_header       tcp_header_t;
    6061
    6162/** Type definition of the transmission datagram header pointer.
    62  * @see tcp_header
    63  */
    64 typedef tcp_header_t *tcp_header_ref;
     63 *  @see tcp_header
     64 */
     65typedef tcp_header_t *          tcp_header_ref;
    6566
    6667/** Type definition of the transmission datagram header option.
    67  * @see tcp_option
    68  */
    69 typedef struct tcp_option tcp_option_t;
     68 *  @see tcp_option
     69 */
     70typedef struct tcp_option       tcp_option_t;
    7071
    7172/** Type definition of the transmission datagram header option pointer.
    72  * @see tcp_option
    73  */
    74 typedef tcp_option_t *tcp_option_ref;
    75 
    76 /** Type definition of the Maximum segment size TCP option. */
    77 typedef struct tcp_max_segment_size_option tcp_max_segment_size_option_t;
     73 *  @see tcp_option
     74 */
     75typedef tcp_option_t *          tcp_option_ref;
     76
     77/** Type definition of the Maximum segment size TCP option.
     78 *  @see ...
     79 */
     80typedef struct tcp_max_segment_size_option      tcp_max_segment_size_option_t;
    7881
    7982/** Type definition of the Maximum segment size TCP option pointer.
    80  * @see tcp_max_segment_size_option
    81  */
    82 typedef tcp_max_segment_size_option_t *tcp_max_segment_size_option_ref;
    83 
    84 /** Transmission datagram header. */
    85 struct tcp_header {
     83 *  @see tcp_max_segment_size_option
     84 */
     85typedef tcp_max_segment_size_option_t *         tcp_max_segment_size_option_ref;
     86
     87/** Transmission datagram header.
     88 */
     89struct tcp_header{
     90        /** The source port number.
     91         */
    8692        uint16_t source_port;
     93        /** The destination port number.
     94         */
    8795        uint16_t destination_port;
     96        /** The sequence number of the first data octet in this segment (except when SYN is present).
     97         *  If SYN is present the sequence number is the initial sequence number (ISN) and the first data octet is ISN+1.
     98         */
    8899        uint32_t sequence_number;
     100        /** If the ACK control bit is set this field contains the value of the next sequence number the sender of the segment is expecting to receive.
     101         *  Once a~connection is established this is always sent.
     102         *  @see acknowledge
     103         */
    89104        uint32_t acknowledgement_number;
    90        
    91105#ifdef ARCH_IS_BIG_ENDIAN
     106        /** The number of 32~bit words in the TCP Header.
     107         *  This indicates where the data begins.
     108         *  The TCP header (even one including options) is an integral number of 32~bits long.
     109         */
    92110        uint8_t header_length:4;
     111        /** Four bits reserved for future use.
     112         *  Must be zero.
     113         */
    93114        uint8_t reserved1:4;
    94115#else
     116        /** Four bits reserved for future use.
     117         *  Must be zero.
     118         */
    95119        uint8_t reserved1:4;
     120        /** The number of 32~bit words in the TCP Header.
     121         *  This indicates where the data begins.
     122         *  The TCP header (even one including options) is an integral number of 32~bits long.
     123         */
    96124        uint8_t header_length:4;
    97125#endif
    98 
    99126#ifdef ARCH_IS_BIG_ENDIAN
     127        /** Two bits reserved for future use.
     128         *  Must be zero.
     129         */
    100130        uint8_t reserved2:2;
     131        /** Urgent Pointer field significant.
     132         *  @see tcp_header:urgent_pointer
     133         */
    101134        uint8_t urgent:1;
     135        /** Acknowledgment field significant
     136         *  @see tcp_header:acknowledgement_number
     137         */
    102138        uint8_t acknowledge:1;
     139        /** Push function.
     140         */
    103141        uint8_t push:1;
     142        /** Reset the connection.
     143         */
    104144        uint8_t reset:1;
     145        /** Synchronize the sequence numbers.
     146         */
    105147        uint8_t synchronize:1;
     148        /** No more data from the sender.
     149         */
    106150        uint8_t finalize:1;
    107151#else
     152        /** No more data from the sender.
     153         */
    108154        uint8_t finalize:1;
     155        /** Synchronize the sequence numbers.
     156         */
    109157        uint8_t synchronize:1;
     158        /** Reset the connection.
     159         */
    110160        uint8_t reset:1;
     161        /** Push function.
     162         */
    111163        uint8_t push:1;
     164        /** Acknowledgment field significant.
     165         *  @see tcp_header:acknowledgement_number
     166         */
    112167        uint8_t acknowledge:1;
     168        /** Urgent Pointer field significant.
     169         *  @see tcp_header:urgent_pointer
     170         */
    113171        uint8_t urgent:1;
     172        /** Two bits reserved for future use.
     173         *  Must be zero.
     174         */
    114175        uint8_t reserved2:2;
    115176#endif
    116 
     177        /** The number of data octets beginning with the one indicated in the acknowledgment field which the sender of this segment is willing to accept.
     178         *  @see tcp_header:acknowledge
     179         */
    117180        uint16_t window;
     181        /** The checksum field is the 16~bit one's complement of the one's complement sum of all 16~bit words in the header and text.
     182         *  If a~segment contains an odd number of header and text octets to be checksummed, the last octet is padded on the right with zeros to form a~16~bit word for checksum purposes.
     183         *  The pad is not transmitted as part of the segment.
     184         *  While computing the checksum, the checksum field itself is replaced with zeros.
     185         *  The checksum also coves a~pseudo header conceptually.
     186         *  The pseudo header conceptually prefixed to the TCP header contains the source address, the destination address, the protocol, and the TCP length.
     187         *  This information gives protection against misrouted datagrams.
     188         *  If the computed checksum is zero, it is transmitted as all ones (the equivalent in one's complement arithmetic).
     189         */
    118190        uint16_t checksum;
     191        /** This field communicates the current value of the urgent pointer as a~positive offset from the sequence number in this segment.
     192         *  The urgent pointer points to the sequence number of the octet following the urgent data.
     193         *  This field is only be interpreted in segments with the URG control bit set.
     194         *  @see tcp_header:urgent
     195         */
    119196        uint16_t urgent_pointer;
    120197} __attribute__ ((packed));
    121198
    122 /** Transmission datagram header option. */
    123 struct tcp_option {
    124         /** Option type. */
     199/** Transmission datagram header option.
     200 */
     201struct tcp_option{
     202        /** Option type.
     203         */
    125204        uint8_t type;
    126         /** Option length. */
     205        /** Option length.
     206         */
    127207        uint8_t length;
    128208};
    129209
    130 /** Maximum segment size TCP option. */
    131 struct tcp_max_segment_size_option {
     210/** Maximum segment size TCP option.
     211 */
     212struct tcp_max_segment_size_option{
    132213        /** TCP option.
    133          * @see TCPOPT_MAX_SEGMENT_SIZE
    134          * @see TCPOPT_MAX_SEGMENT_SIZE_LENGTH
     214         *  @see TCPOPT_MAX_SEGMENT_SIZE
     215         *  @see TCPOPT_MAX_SEGMENT_SIZE_LENGTH
    135216         */
    136217        tcp_option_t option;
    137        
    138         /** Maximum segment size in bytes. */
     218        /** Maximum segment size in bytes.
     219        */
    139220        uint16_t max_segment_size;
    140221} __attribute__ ((packed));
Note: See TracChangeset for help on using the changeset viewer.