bcmtcp.h 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /*
  2. * Fundamental constants relating to TCP Protocol
  3. *
  4. * Portions of this code are copyright (c) 2020 Cypress Semiconductor Corporation
  5. *
  6. * Copyright (C) 1999-2020, Broadcom Corporation
  7. *
  8. * Unless you and Broadcom execute a separate written software license
  9. * agreement governing use of this software, this software is licensed to you
  10. * under the terms of the GNU General Public License version 2 (the "GPL"),
  11. * available at http://www.broadcom.com/licenses/GPLv2.php, with the
  12. * following added to such license:
  13. *
  14. * As a special exception, the copyright holders of this software give you
  15. * permission to link this software with independent modules, and to copy and
  16. * distribute the resulting executable under terms of your choice, provided that
  17. * you also meet, for each linked independent module, the terms and conditions of
  18. * the license of that module. An independent module is a module which is not
  19. * derived from this software. The special exception does not apply to any
  20. * modifications of the software.
  21. *
  22. * Notwithstanding the above, under no circumstances may you combine this
  23. * software in any way with any other Broadcom software provided under a license
  24. * other than the GPL, without Broadcom's express prior written consent.
  25. *
  26. *
  27. * <<Broadcom-WL-IPTag/Open:>>
  28. *
  29. * $Id: bcmtcp.h 681862 2018-01-03 12:34:14Z $
  30. */
  31. #ifndef _bcmtcp_h_
  32. #define _bcmtcp_h_
  33. #ifndef _TYPEDEFS_H_
  34. #include <typedefs.h>
  35. #endif // endif
  36. /* This marks the start of a packed structure section. */
  37. #include <packed_section_start.h>
  38. #define TCP_SRC_PORT_OFFSET 0 /* TCP source port offset */
  39. #define TCP_DEST_PORT_OFFSET 2 /* TCP dest port offset */
  40. #define TCP_SEQ_NUM_OFFSET 4 /* TCP sequence number offset */
  41. #define TCP_ACK_NUM_OFFSET 8 /* TCP acknowledgement number offset */
  42. #define TCP_HLEN_OFFSET 12 /* HLEN and reserved bits offset */
  43. #define TCP_FLAGS_OFFSET 13 /* FLAGS and reserved bits offset */
  44. #define TCP_CHKSUM_OFFSET 16 /* TCP body checksum offset */
  45. #define TCP_PORT_LEN 2 /* TCP port field length */
  46. /* 8bit TCP flag field */
  47. #define TCP_FLAG_URG 0x20
  48. #define TCP_FLAG_ACK 0x10
  49. #define TCP_FLAG_PSH 0x08
  50. #define TCP_FLAG_RST 0x04
  51. #define TCP_FLAG_SYN 0x02
  52. #define TCP_FLAG_FIN 0x01
  53. #define TCP_HLEN_MASK 0xf000
  54. #define TCP_HLEN_SHIFT 12
  55. /* These fields are stored in network order */
  56. BWL_PRE_PACKED_STRUCT struct bcmtcp_hdr
  57. {
  58. uint16 src_port; /* Source Port Address */
  59. uint16 dst_port; /* Destination Port Address */
  60. uint32 seq_num; /* TCP Sequence Number */
  61. uint32 ack_num; /* TCP Sequence Number */
  62. uint16 hdrlen_rsvd_flags; /* Header length, reserved bits and flags */
  63. uint16 tcpwin; /* TCP window */
  64. uint16 chksum; /* Segment checksum with pseudoheader */
  65. uint16 urg_ptr; /* Points to seq-num of byte following urg data */
  66. } BWL_POST_PACKED_STRUCT;
  67. #define TCP_MIN_HEADER_LEN 20
  68. #define TCP_HDRLEN_MASK 0xf0
  69. #define TCP_HDRLEN_SHIFT 4
  70. #define TCP_HDRLEN(hdrlen) (((hdrlen) & TCP_HDRLEN_MASK) >> TCP_HDRLEN_SHIFT)
  71. #define TCP_FLAGS_MASK 0x1f
  72. #define TCP_FLAGS(hdrlen) ((hdrlen) & TCP_FLAGS_MASK)
  73. /* This marks the end of a packed structure section. */
  74. #include <packed_section_end.h>
  75. /* To address round up by 32bit. */
  76. #define IS_TCPSEQ_GE(a, b) ((a - b) < NBITVAL(31)) /* a >= b */
  77. #define IS_TCPSEQ_LE(a, b) ((b - a) < NBITVAL(31)) /* a =< b */
  78. #define IS_TCPSEQ_GT(a, b) !IS_TCPSEQ_LE(a, b) /* a > b */
  79. #define IS_TCPSEQ_LT(a, b) !IS_TCPSEQ_GE(a, b) /* a < b */
  80. #endif /* #ifndef _bcmtcp_h_ */