79 lines
2.3 KiB
C
79 lines
2.3 KiB
C
/* -*- c-basic-offset: 4 -*- */
|
|
#ifndef CLICKNET_TCP_H
|
|
#define CLICKNET_TCP_H
|
|
|
|
/*
|
|
* <clicknet/tcp.h> -- TCP header definitions, based on one of the BSDs.
|
|
*
|
|
* Relevant RFCs include:
|
|
* RFC793 Transmission Control Protocol
|
|
* RFC1323 TCP Extensions for High Performance
|
|
* RFC2018 TCP Selective Acknowledgement Options
|
|
* RFC2581 TCP Congestion Control
|
|
* RFC2883 An Extension to the Selective Acknowledgement (SACK) Option
|
|
* for TCP
|
|
* RFC3168 The Addition of Explicit Congestion Notification (ECN) to IP
|
|
* RFC3540 Robust Explicit Congestion Notification (ECN) Signaling with
|
|
* Nonces
|
|
* among many others. See "A Roadmap for TCP Specification Documents",
|
|
* currently an Internet-Draft.
|
|
*/
|
|
|
|
typedef uint32_t tcp_seq_t;
|
|
|
|
struct click_tcp {
|
|
uint16_t th_sport; /* 0-1 source port */
|
|
uint16_t th_dport; /* 2-3 destination port */
|
|
tcp_seq_t th_seq; /* 4-7 sequence number */
|
|
tcp_seq_t th_ack; /* 8-11 acknowledgement number */
|
|
#if CLICK_BYTE_ORDER == CLICK_LITTLE_ENDIAN
|
|
unsigned th_flags2 : 4; /* 12 more flags */
|
|
unsigned th_off : 4; /* data offset in words */
|
|
#elif CLICK_BYTE_ORDER == CLICK_BIG_ENDIAN
|
|
unsigned th_off : 4; /* 12 data offset in words */
|
|
unsigned th_flags2 : 4; /* more flags */
|
|
#else
|
|
# error "unknown byte order"
|
|
#endif
|
|
#define TH_NS 0x01 /* in 'th_flags2' */
|
|
uint8_t th_flags; /* 13 flags */
|
|
#define TH_FIN 0x01
|
|
#define TH_SYN 0x02
|
|
#define TH_RST 0x04
|
|
#define TH_PUSH 0x08
|
|
#define TH_ACK 0x10
|
|
#define TH_URG 0x20
|
|
#define TH_ECE 0x40
|
|
#define TH_CWR 0x80
|
|
uint16_t th_win; /* 14-15 window */
|
|
uint16_t th_sum; /* 16-17 checksum */
|
|
uint16_t th_urp; /* 18-19 urgent pointer */
|
|
};
|
|
|
|
/*
|
|
* TCP sequence number comparisons
|
|
*/
|
|
|
|
#define SEQ_LT(x,y) ((int)((x)-(y)) < 0)
|
|
#define SEQ_LEQ(x,y) ((int)((x)-(y)) <= 0)
|
|
#define SEQ_GT(x,y) ((int)((x)-(y)) > 0)
|
|
#define SEQ_GEQ(x,y) ((int)((x)-(y)) >= 0)
|
|
|
|
/*
|
|
* TCP options
|
|
*/
|
|
|
|
#define TCPOPT_EOL 0
|
|
#define TCPOPT_NOP 1
|
|
#define TCPOPT_MAXSEG 2
|
|
#define TCPOLEN_MAXSEG 4
|
|
#define TCPOPT_WSCALE 3
|
|
#define TCPOLEN_WSCALE 3
|
|
#define TCPOPT_SACK_PERMITTED 4
|
|
#define TCPOLEN_SACK_PERMITTED 2
|
|
#define TCPOPT_SACK 5
|
|
#define TCPOPT_TIMESTAMP 8
|
|
#define TCPOLEN_TIMESTAMP 10
|
|
|
|
#endif
|