"Fossies" - the Fresh Open Source Software Archive

Member "tcpflow-1.6.1/src/wifipcap/tcp.h" (19 Feb 2021, 4985 Bytes) of package /linux/misc/tcpflow-1.6.1.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "tcp.h" see the Fossies "Dox" file reference documentation.

    1 /* @(#) $Header: /home/cvs/wifitools/wifipcap/tcp.h,v 1.1.1.1 2006/12/14 01:22:11 jpang Exp $ (LBL) */
    2 /*
    3  * Copyright (c) 1982, 1986, 1993
    4  *  The Regents of the University of California.  All rights reserved.
    5  *
    6  * Redistribution and use in source and binary forms, with or without
    7  * modification, are permitted provided that the following conditions
    8  * are met:
    9  * 1. Redistributions of source code must retain the above copyright
   10  *    notice, this list of conditions and the following disclaimer.
   11  * 2. Redistributions in binary form must reproduce the above copyright
   12  *    notice, this list of conditions and the following disclaimer in the
   13  *    documentation and/or other materials provided with the distribution.
   14  * 3. All advertising materials mentioning features or use of this software
   15  *    must display the following acknowledgement:
   16  *  This product includes software developed by the University of
   17  *  California, Berkeley and its contributors.
   18  * 4. Neither the name of the University nor the names of its contributors
   19  *    may be used to endorse or promote products derived from this software
   20  *    without specific prior written permission.
   21  *
   22  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   23  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   25  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   26  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   27  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   28  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   29  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   31  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   32  * SUCH DAMAGE.
   33  *
   34  *  @(#)tcp.h   8.1 (Berkeley) 6/10/93
   35  */
   36 
   37 #ifndef TCP_H
   38 #define TCP_H
   39 
   40 typedef u_int32_t   tcp_seq;
   41 /*
   42  * TCP header.
   43  * Per RFC 793, September, 1981.
   44  */
   45 struct tcphdr {
   46     u_int16_t   th_sport;       /* source port */
   47     u_int16_t   th_dport;       /* destination port */
   48     tcp_seq     th_seq;         /* sequence number */
   49     tcp_seq     th_ack;         /* acknowledgement number */
   50     u_int8_t    th_offx2;       /* data offset, rsvd */
   51 #define TH_OFF(th)  (((th)->th_offx2 & 0xf0) >> 4)
   52     u_int8_t    th_flags;
   53 #define TH_FIN  0x01
   54 #define TH_SYN  0x02
   55 #define TH_RST  0x04
   56 #define TH_PUSH 0x08
   57 #define TH_ACK  0x10
   58 #define TH_URG  0x20
   59 #define TH_ECNECHO  0x40    /* ECN Echo */
   60 #define TH_CWR      0x80    /* ECN Cwnd Reduced */
   61     u_int16_t   th_win;         /* window */
   62     u_int16_t   th_sum;         /* checksum */
   63     u_int16_t   th_urp;         /* urgent pointer */
   64 };
   65 
   66 #define TCPOPT_EOL      0
   67 #define TCPOPT_NOP      1
   68 #define TCPOPT_MAXSEG       2
   69 #define    TCPOLEN_MAXSEG       4
   70 #define TCPOPT_WSCALE       3   /* window scale factor (rfc1323) */
   71 #define TCPOPT_SACKOK       4   /* selective ack ok (rfc2018) */
   72 #define TCPOPT_SACK     5   /* selective ack (rfc2018) */
   73 #define TCPOPT_ECHO     6   /* echo (rfc1072) */
   74 #define TCPOPT_ECHOREPLY    7   /* echo (rfc1072) */
   75 #define TCPOPT_TIMESTAMP    8   /* timestamp (rfc1323) */
   76 #define    TCPOLEN_TIMESTAMP        10
   77 #define    TCPOLEN_TSTAMP_APPA      (TCPOLEN_TIMESTAMP+2) /* appendix A */
   78 #define TCPOPT_CC       11  /* T/TCP CC options (rfc1644) */
   79 #define TCPOPT_CCNEW        12  /* T/TCP CC options (rfc1644) */
   80 #define TCPOPT_CCECHO       13  /* T/TCP CC options (rfc1644) */
   81 #define TCPOPT_SIGNATURE    19  /* Keyed MD5 (rfc2385) */
   82 #define    TCPOLEN_SIGNATURE        18
   83 #define TCP_SIGLEN 16           /* length of an option 19 digest */
   84 #define TCPOPT_AUTH             20      /* Enhanced AUTH option */
   85 
   86 #define TCPOPT_TSTAMP_HDR   \
   87     (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP)
   88 
   89 #include <map>
   90 #include <list>
   91 
   92 class tcp_opt_t {
   93     tcp_opt_t &operator=(const tcp_opt_t &);       // not implemented
   94 public:
   95     tcp_opt_t(const tcp_opt_t &t):type(t.type),len(t.len),data_raw(t.data_raw),data(t.data),data_sack(t.data_sack){};
   96     tcp_opt_t():type(),len(),data_raw(),data(),data_sack(){};
   97     u_int type;
   98     u_int len;
   99     const u_char *data_raw;
  100 
  101     union {
  102     u_int16_t mss;
  103     u_int8_t  wscale;
  104     u_int32_t echo;
  105     u_int32_t echoreply;
  106     u_int32_t cc;
  107     u_int32_t ccnew;
  108     u_int32_t ccecho;
  109     struct {
  110         u_int32_t tsval;
  111         u_int32_t tsecr;
  112     } timestamp;
  113     u_int8_t  signature[TCP_SIGLEN];
  114     } data;
  115 
  116     std::list< std::pair<u_int32_t,u_int32_t> > data_sack;
  117 };
  118 
  119 /* Jeff: endian-fixed, fully decoded tcp header */
  120 struct tcp_hdr_t {
  121     u_int16_t   sport;      /* source port */
  122     u_int16_t   dport;      /* destination port */
  123     tcp_seq     seq;            /* sequence number */
  124     tcp_seq     ack;            /* acknowledgement number */
  125     u_int8_t    dataoff;        /* data offset */
  126     u_int8_t    flags;          /* flags (see #defines under tcphdr::th_flags above) */
  127     u_int16_t   win;            /* window */
  128     u_int16_t   cksum;          /* checksum */
  129     u_int16_t   urgptr;         /* urgent pointer */
  130 
  131     //std::list<tcp_opt_t> opts;
  132 };
  133 #endif