/net.h

https://github.com/BiohazrD/EtherShield · C Header · 203 lines · 123 code · 19 blank · 61 comment · 0 complexity · 8de776fd5cedbf86f1bf75d2b31a2fa4 MD5 · raw file

  1. /*********************************************
  2. * vim:sw=8:ts=8:si:et
  3. * To use the above modeline in vim you must have "set modeline" in your .vimrc
  4. * Author: Guido Socher
  5. * Copyright: GPL V2
  6. *
  7. * Based on the net.h file from the AVRlib library by Pascal Stang.
  8. * For AVRlib See http://www.procyonengineering.com/
  9. * Used with explicit permission of Pascal Stang.
  10. *
  11. * Chip type : ATMEGA88 with ENC28J60
  12. *********************************************/
  13. // notation: _P = position of a field
  14. // _V = value of a field
  15. //@{
  16. #ifndef NET_H
  17. #define NET_H
  18. // ******* ETH *******
  19. #define ETH_HEADER_LEN 14
  20. // values of certain bytes:
  21. #define ETHTYPE_ARP_H_V 0x08
  22. #define ETHTYPE_ARP_L_V 0x06
  23. #define ETHTYPE_IP_H_V 0x08
  24. #define ETHTYPE_IP_L_V 0x00
  25. // byte positions in the ethernet frame:
  26. //
  27. // Ethernet type field (2bytes):
  28. #define ETH_TYPE_H_P 12
  29. #define ETH_TYPE_L_P 13
  30. //
  31. #define ETH_DST_MAC 0
  32. #define ETH_SRC_MAC 6
  33. // ******* ARP *******
  34. #define ETH_ARP_OPCODE_REPLY_H_V 0x0
  35. #define ETH_ARP_OPCODE_REPLY_L_V 0x02
  36. #define ETH_ARP_OPCODE_REQ_H_V 0x0
  37. #define ETH_ARP_OPCODE_REQ_L_V 0x01
  38. // start of arp header:
  39. #define ETH_ARP_P 0xe
  40. //
  41. #define ETHTYPE_ARP_L_V 0x06
  42. // arp.dst.ip
  43. #define ETH_ARP_DST_IP_P 0x26
  44. // arp.opcode
  45. #define ETH_ARP_OPCODE_H_P 0x14
  46. #define ETH_ARP_OPCODE_L_P 0x15
  47. // arp.src.mac
  48. #define ETH_ARP_SRC_MAC_P 0x16
  49. #define ETH_ARP_SRC_IP_P 0x1c
  50. #define ETH_ARP_DST_MAC_P 0x20
  51. #define ETH_ARP_DST_IP_P 0x26
  52. // ******* IP *******
  53. #define IP_HEADER_LEN 20
  54. #define IP_PROTO_ICMP_V 0x01
  55. #define IP_PROTO_TCP_V 0x06
  56. #define IP_PROTO_UDP_V 0x11
  57. #define IP_V4_V 0x40
  58. #define IP_HEADER_LENGTH_V 0x05
  59. #define IP_P 0x0E
  60. #define IP_HEADER_VER_LEN_P 0x0E
  61. #define IP_TOS_P 0x0F
  62. #define IP_TOTLEN_H_P 0x10
  63. #define IP_TOTLEN_L_P 0x11
  64. #define IP_ID_H_P 0x12
  65. #define IP_ID_L_P 0x13
  66. #define IP_FLAGS_P 0x14
  67. #define IP_FLAGS_H_P 0x14
  68. #define IP_FLAGS_L_P 0x15
  69. #define IP_TTL_P 0x16
  70. #define IP_PROTO_P 0x17
  71. #define IP_CHECKSUM_P 0x18
  72. #define IP_CHECKSUM_H_P 0x18
  73. #define IP_CHECKSUM_L_P 0x19
  74. #define IP_SRC_IP_P 0x1A
  75. #define IP_DST_IP_P 0x1E
  76. #define IP_SRC_P 0x1a
  77. #define IP_DST_P 0x1e
  78. #define IP_HEADER_LEN_VER_P 0xe
  79. // ip.src
  80. /*
  81. #define IP_SRC_P 0x1a
  82. #define IP_DST_P 0x1e
  83. #define IP_P 0xe
  84. #define IP_HEADER_LEN_VER_P 0xe
  85. #define IP_CHECKSUM_P 0x18
  86. #define IP_TTL_P 0x16
  87. #define IP_FLAGS_P 0x14
  88. #define IP_TOTLEN_H_P 0x10
  89. #define IP_TOTLEN_L_P 0x11
  90. #define IP_PROTO_P 0x17
  91. #define IP_PROTO_ICMP_V 1
  92. #define IP_PROTO_TCP_V 6
  93. // 17=0x11
  94. #define IP_PROTO_UDP_V 17
  95. #define IP_V4_V 0x40
  96. */
  97. // ******* ICMP *******
  98. #define ICMP_TYPE_ECHOREPLY_V 0
  99. #define ICMP_TYPE_ECHOREQUEST_V 8
  100. //
  101. #define ICMP_TYPE_P 0x22
  102. #define ICMP_CHECKSUM_P 0x24
  103. #define ICMP_CHECKSUM_H_P 0x24
  104. #define ICMP_CHECKSUM_L_P 0x25
  105. #define ICMP_IDENT_H_P 0x26
  106. #define ICMP_IDENT_L_P 0x27
  107. #define ICMP_DATA_P 0x2a
  108. // ******* UDP *******
  109. #define UDP_HEADER_LEN 8
  110. //
  111. #define UDP_SRC_PORT_H_P 0x22
  112. #define UDP_SRC_PORT_L_P 0x23
  113. #define UDP_DST_PORT_H_P 0x24
  114. #define UDP_DST_PORT_L_P 0x25
  115. //
  116. #define UDP_LEN_H_P 0x26
  117. #define UDP_LEN_L_P 0x27
  118. #define UDP_CHECKSUM_H_P 0x28
  119. #define UDP_CHECKSUM_L_P 0x29
  120. #define UDP_DATA_P 0x2a
  121. // ******* TCP *******
  122. #define TCP_FLAG_FIN_V 0x01
  123. #define TCP_FLAGS_FIN_V 0x01
  124. #define TCP_FLAGS_SYN_V 0x02
  125. #define TCP_FLAG_SYN_V 0x02
  126. #define TCP_FLAG_RST_V 0x04
  127. #define TCP_FLAG_PUSH_V 0x08
  128. #define TCP_FLAGS_ACK_V 0x10
  129. #define TCP_FLAG_ACK_V 0x10
  130. #define TCP_FLAG_URG_V 0x20
  131. #define TCP_FLAG_ECE_V 0x40
  132. #define TCP_FLAG_CWR_V 0x80
  133. #define TCP_FLAGS_SYNACK_V 0x12
  134. #define TCP_SRC_PORT_H_P 0x22
  135. #define TCP_SRC_PORT_L_P 0x23
  136. #define TCP_DST_PORT_H_P 0x24
  137. #define TCP_DST_PORT_L_P 0x25
  138. #define TCP_SEQ_P 0x26 // the tcp seq number is 4 bytes 0x26-0x29
  139. #define TCP_SEQ_H_P 0x26
  140. #define TCP_SEQACK_P 0x2a
  141. #define TCP_SEQACK_H_P 0x2a
  142. // flags: SYN=2
  143. #define TCP_FLAGS_P 0x2f
  144. #define TCP_FLAG_P 0x2f
  145. #define TCP_WINDOWSIZE_H_P 0x30 // 2 bytes
  146. #define TCP_WINDOWSIZE_L_P 0x31
  147. #define TCP_CHECKSUM_H_P 0x32
  148. #define TCP_CHECKSUM_L_P 0x33
  149. #define TCP_URGENT_PTR_H_P 0x34 // 2 bytes
  150. #define TCP_URGENT_PTR_L_P 0x35
  151. #define TCP_OPTIONS_P 0x36
  152. #define TCP_DATA_P 0x36
  153. #define TCP_FLAGS_SYN_V 2
  154. #define TCP_FLAGS_FIN_V 1
  155. #define TCP_FLAGS_RST_V 4
  156. #define TCP_FLAGS_PUSH_V 8
  157. #define TCP_FLAGS_SYNACK_V 0x12
  158. #define TCP_FLAGS_ACK_V 0x10
  159. #define TCP_FLAGS_PSHACK_V 0x18
  160. // plain len without the options:
  161. #define TCP_HEADER_LEN_PLAIN 20
  162. #define TCP_HEADER_LEN_P 0x2e
  163. #define TCP_WIN_SIZE 0x30
  164. #define TCP_CHECKSUM_H_P 0x32
  165. #define TCP_CHECKSUM_L_P 0x33
  166. #define TCP_OPTIONS_P 0x36
  167. //
  168. //
  169. // DNS States for access in applications
  170. #define DNS_STATE_INIT 0
  171. #define DNS_STATE_REQUESTED 1
  172. #define DNS_STATE_ANSWER 2
  173. // DHCP States for access in applications
  174. #define DHCP_STATE_INIT 0
  175. #define DHCP_STATE_DISCOVER 1
  176. #define DHCP_STATE_OFFER 2
  177. #define DHCP_STATE_REQUEST 3
  178. #define DHCP_STATE_ACK 4
  179. #define DHCP_STATE_OK 5
  180. #define DHCP_STATE_RENEW 6
  181. #endif
  182. //@}