1/*
2 * Copyright 2007, Broadcom Corporation
3 * All Rights Reserved.
4 *
5 * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
6 * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
7 * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
8 * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
9 *
10 * Fundamental constants relating to TCP Protocol
11 *
12 * $Id: bcmtcp.h,v 1.1.1.1 2008/10/15 03:25:54 james26_jang Exp $
13 */
14
15#ifndef _bcmtcp_h_
16#define _bcmtcp_h_
17
18/* enable structure packing */
19#if defined(__GNUC__)
20#define	PACKED	__attribute__((packed))
21#else
22#pragma pack(1)
23#define	PACKED
24#endif
25
26#define TCP_SRC_PORT_OFFSET	0	/* TCP source port offset */
27#define TCP_DEST_PORT_OFFSET	2	/* TCP dest port offset */
28#define TCP_CHKSUM_OFFSET	16	/* TCP body checksum offset */
29
30/* These fields are stored in network order */
31struct bcmtcp_hdr
32{
33	uint16	src_port;	/* Source Port Address */
34	uint16	dst_port;	/* Destination Port Address */
35	uint32	seq_num;	/* TCP Sequence Number */
36	uint32	ack_num;	/* TCP Sequence Number */
37	uint16	hdrlen_rsvd_flags;	/* Header length, reserved bits and flags */
38	uint16	tcpwin;		/* TCP window */
39	uint16	chksum;		/* Segment checksum with pseudoheader */
40	uint16	urg_ptr;	/* Points to seq-num of byte following urg data */
41} PACKED;
42
43#undef PACKED
44#if !defined(__GNUC__)
45#pragma pack()
46#endif
47
48/* Byte offset of flags in TCP header */
49#define TCP_FLAGS_OFFSET	13
50
51#define TCP_FLAGS_FIN		0x01
52#define TCP_FLAGS_SYN		0x02
53#define TCP_FLAGS_RST		0x03
54#define TCP_FLAGS_PSH		0x04
55#define TCP_FLAGS_ACK		0x10
56#define TCP_FLAGS_URG		0x20
57#define TCP_FLAGS_ECN		0x40
58#define TCP_FLAGS_CWR		0x80
59
60#define TCP_FLAGS(tcp_hdr)	(((uint8 *)(tcp_hdr))[TCP_FLAGS_OFFSET])
61#define TCP_IS_ACK(tcp_hdr)	(TCP_FLAGS(tcp_hdr) & TCP_FLAGS_ACK)
62
63#define TCP_SRC_PORT(tcp_hdr)	(ntoh16(((struct bcmtcp_hdr*)(tcp_hdr))->src_port))
64#define TCP_DST_PORT(tcp_hdr)	(ntoh16(((struct bcmtcp_hdr*)(tcp_hdr))->dst_port))
65#define TCP_SEQ_NUM(tcp_hdr)	(ntoh32(((struct bcmtcp_hdr*)(tcp_hdr))->seq_num))
66#define TCP_ACK_NUM(tcp_hdr)	(ntoh32(((struct bcmtcp_hdr*)(tcp_hdr))->ack_num))
67
68#endif	/* #ifndef _bcmtcp_h_ */
69