]> git.sur5r.net Git - freertos/blob - Demo/CORTEX_A2F200_SoftConsole/MicroSemi_Code/drivers/mac/nettype.h
Corrected a comment in the STM32 FreeRTOSConfig.h file.
[freertos] / Demo / CORTEX_A2F200_SoftConsole / MicroSemi_Code / drivers / mac / nettype.h
1 /*******************************************************************************\r
2  * (c) Copyright 2009 SLS Corporation,All Rights Reserved.\r
3  *\r
4  *      tcpip.h:header file for TCP/IP implementation.\r
5  *  Version       Author         Comment\r
6  *  1.0.0         SLS corp.              First release\r
7  */\r
8 /***************************************************************************//**\r
9  * This header file contains the definition and datastructures for the TCP/IP \r
10  * stack implementation.\r
11  */\r
12 #ifndef _NETTYPE_H_\r
13 #define _NETTYPE_H_\r
14 \r
15 #define BUF_LEN 1500\r
16 \r
17 /* IP header length in terms of 16-bit words */\r
18 #define IP_HDR_LEN 10\r
19 #define IP_HDR_CSUM_OFFSET 5\r
20 #define TCP_HDR_CSUM_OFFSET 8\r
21 \r
22 #define ETH_ADDR_LEN 6\r
23 #define IP_ADDR_LEN 4\r
24 #define ETH_TYPE_LEN 2\r
25 #define ARP_HW_TYPE_LEN 2\r
26 #define ARP_PROTO_TYPE_LEN 2\r
27 #define ARP_OPCODE_LEN 2\r
28 \r
29 #define ETH_TYPE_0     0x08     /* both IP and ARP have 08 as the first byte */\r
30 #define ETH_TYPE_ARP_1 0x06     /* 0806 is ARP */\r
31 #define ETH_TYPE_IP_1  0x00     /* 0800 is IP */\r
32 \r
33 #define ARP_HW_TYPE_0  0x00     /* 0001 for ethernet */\r
34 #define ARP_HW_TYPE_1  0x01     /* 0001 for ethernet */\r
35 \r
36 #define ARP_PROTO_TYPE_0 0x08   /* 0800 is IP */\r
37 #define ARP_PROTO_TYPE_1 0x00   \r
38 \r
39 #define ARP_OPCODE_0 0x00       /* same for req and reply */\r
40 #define ARP_OPCODE_REQ_1 0x01   /* 0001 is Request */\r
41 #define ARP_OPCODE_REPLY_1 0x02 /* 0002 is Reply */\r
42 \r
43 extern unsigned char my_IP_address[IP_ADDR_LEN];\r
44 \r
45 typedef struct ether_hdr {\r
46     unsigned char da[ETH_ADDR_LEN];     /* destination MAC address */\r
47     unsigned char sa[ETH_ADDR_LEN];     /* source MAC address */\r
48     unsigned char type_code[ETH_TYPE_LEN]; /* type code */\r
49 } ether_hdr_t;\r
50 \r
51 typedef struct arp_pkt {\r
52     unsigned char hw_type[ARP_HW_TYPE_LEN]; /* Hardware Type */\r
53     unsigned char proto_type[ARP_PROTO_TYPE_LEN]; /* Protocol Type */\r
54     unsigned char hw_addr_len;          /* Hardware Address Length */\r
55     unsigned char proto_addr_len;       /* Protocol Address Length */\r
56     unsigned char opcode[ARP_OPCODE_LEN]; /* Opcode */\r
57     unsigned char mac_sa[ETH_ADDR_LEN]; /* sender MAC address */\r
58     unsigned char ip_sa[IP_ADDR_LEN];   /* sender IP address */\r
59     unsigned char mac_ta[ETH_ADDR_LEN]; /* target MAC address */\r
60     unsigned char ip_ta[IP_ADDR_LEN];   /* target IP address */\r
61 } arp_pkt_t;\r
62 \r
63 #define ICMP_PROTO      0x01\r
64 #define TCP_PROTO       0x06\r
65 #define UDP_PROTO       0x11\r
66 \r
67 #define IP_CSUM_LEN     2\r
68 #define IP_ID_LEN       2\r
69 #define IP_TLEN_LEN     2\r
70 #define IP_FRAG_OFF_LEN 2\r
71 \r
72 typedef struct ip_hdr {\r
73     unsigned char ver_hlen;             /* version - 4 bits;  IP hdr len - 4 bits */\r
74     unsigned char tos;                  /* Type of service */\r
75     unsigned char tlen[IP_TLEN_LEN];    /* Size of datagram (header + data) */\r
76     unsigned char id[IP_ID_LEN];        /* together with sa, uniequly identifies pkt */\r
77     unsigned char frag_off[IP_FRAG_OFF_LEN]; /* flags - 3 bits; fragment offset - 13 bits */\r
78     unsigned char ttl;                  /* time to live */\r
79     unsigned char proto;                /* protocol */\r
80     unsigned char csum[IP_CSUM_LEN];    /* header checksum */\r
81     unsigned char sa[IP_ADDR_LEN];      /* IP source address */\r
82     unsigned char da[IP_ADDR_LEN];      /* IP dest address */\r
83 } ip_hdr_t;\r
84 \r
85 \r
86 #define ICMP_TYPE_ECHO_REQUEST  8\r
87 #define ICMP_TYPE_ECHO_REPLY    0\r
88 \r
89 typedef struct icmp_hdr {\r
90     unsigned char type;\r
91     unsigned char icode;\r
92     unsigned char csum[IP_CSUM_LEN];\r
93 } icmp_hdr_t;\r
94 \r
95 #define TCP_PORT_LEN             2\r
96 #define TCP_SEQ_LEN              4\r
97 #define TCP_WSIZE_LEN            2\r
98 #define TCP_UPTR_LEN             2\r
99 #define TCP_CSUM_LEN             2\r
100 #define TCP_PLEN_LEN             2\r
101 \r
102 typedef struct tcp_hdr {\r
103     unsigned char sp[TCP_PORT_LEN];     /* Source port */\r
104     unsigned char dp[TCP_PORT_LEN];     /* Destination port */\r
105     unsigned char seqnum[TCP_SEQ_LEN];  /* Sequence number */\r
106     unsigned char acknum[TCP_SEQ_LEN];  /* Acknowledgement number */\r
107     unsigned char data_off;             /* Data Offset - 4 upper bits are valid */\r
108     unsigned char urg_ack_psh_rst_syn_fin; /* 6 lower bits are valid */\r
109     unsigned char wsize[TCP_WSIZE_LEN]; /* Window */\r
110     unsigned char csum[TCP_CSUM_LEN];   /* Chekcsum */\r
111     unsigned char uptr[TCP_UPTR_LEN];   /* Urgent pointer */\r
112 } tcp_hdr_t;            \r
113 \r
114 #define UDP_LEN_LEN              2\r
115 #define UDP_CSUM_LEN             2\r
116 \r
117 typedef struct udp_hdr {\r
118     unsigned char sp[TCP_PORT_LEN];     /* Source port */\r
119     unsigned char dp[TCP_PORT_LEN];     /* Destination port */\r
120     unsigned char len[UDP_LEN_LEN];     /* length of packet */\r
121     unsigned char csum[UDP_CSUM_LEN];   /* checksum */\r
122 } udp_hdr_t;\r
123 \r
124 #define BOOTP_OPTCODE_DHCP_SUBNET     1  /* Subnet mask */\r
125 #define BOOTP_OPTCODE_DHCP_ROUTER     3  /* Router*/\r
126 #define BOOTP_OPTCODE_DHCP_DOMAIN     6  /* Domain */\r
127 #define BOOTP_OPTCODE_DHCP_LEASE      51 /* Lease time*/ \r
128 #define BOOTP_OPTCODE_DHCP_TYPE       53 /* 53, 1, DHCP_TYPE_* */\r
129 #define BOOTP_OPTCODE_DHCP_SID        54 /* 54, 4, a.b.c.d, Server ID */\r
130 #define BOOTP_OPTCODE_DHCP_RENEW      58 /* Renewal time */\r
131 #define BOOTP_OPTCODE_DHCP_REBIND     59 /* Rebinding time */\r
132 \r
133 #define BOOTP_OPTCODE_END            255 /* last in options */\r
134 \r
135 #define DHCP_TYPE_DISCOVER             1     \r
136 #define DHCP_TYPE_OFFER                2     \r
137 #define DHCP_TYPE_REQUEST              3     \r
138 #define DHCP_TYPE_DECLINE              4     \r
139 #define DHCP_TYPE_ACK                  5     \r
140 #define DHCP_TYPE_NAK                  6     \r
141 #define DHCP_TYPE_RELEASE              7     \r
142 \r
143 \r
144 #define BOOTP_OP_REQUEST         1\r
145 #define BOOTP_OP_REPLY           2\r
146 #define BOOTP_HWTYPE_ETH         1\r
147 #define BOOTP_XID_LEN            4\r
148 #define BOOTP_SEC_LEN            2\r
149 #define BOOTP_CHLEN             16\r
150 #define BOOTP_SN_LEN            64\r
151 #define BOOTP_FL_LEN           128\r
152 #define BOOTP_VEN_LEN           64\r
153 \r
154 #define BOOTP_CLIENT_PORT       68\r
155 #define BOOTP_SERVER_PORT       67\r
156 \r
157 typedef struct bootp_pkt {\r
158     unsigned char op;                   /* packet op code */\r
159     unsigned char hwtype;               /* hardware type */\r
160     unsigned char hlen;         /* hardware address length */\r
161     unsigned char hops;         /* client sets to zero */\r
162     unsigned char xid[BOOTP_XID_LEN];   /* transaction ID, random */\r
163     unsigned char secs[BOOTP_SEC_LEN]; /* seconds since boot */\r
164     unsigned char flags[2];             /* flags */\r
165     unsigned char ciaddr[IP_ADDR_LEN];  /* client IP ADDR */\r
166     unsigned char yiaddr[IP_ADDR_LEN];  /* Your IP Addr */\r
167     unsigned char siaddr[IP_ADDR_LEN];  /* Server IP ADDR */\r
168     unsigned char giaddr[IP_ADDR_LEN];  /* Gateway IP ADDR */\r
169     unsigned char chaddr[BOOTP_CHLEN];  /* Client Hardware Addr */\r
170     unsigned char sname[BOOTP_SN_LEN];  /* Server Name */\r
171     unsigned char file[BOOTP_FL_LEN];   /* File Path */\r
172     unsigned char vend[BOOTP_VEN_LEN];  /* Vendor Data */\r
173 } bootp_pkt_t;\r
174 \r
175 typedef struct tcp_pseudo_hdr {\r
176     unsigned char sa[IP_ADDR_LEN];\r
177     unsigned char da[IP_ADDR_LEN];\r
178     unsigned char zero;\r
179     unsigned char proto;\r
180     unsigned char plen[TCP_PLEN_LEN];\r
181 } tcp_pseudo_hdr_t;\r
182 \r
183 typedef enum tcp_state_e {\r
184     TCP_STATE_LISTEN = 0,\r
185     TCP_STATE_SYN_RECVD,\r
186     TCP_STATE_ESTABLISHED,\r
187     TCP_STATE_LAST_ACK,\r
188     TCP_STATE_MY_LAST,\r
189     TCP_STATE_CLOSED\r
190 } tcp_state_t;\r
191 \r
192 typedef struct tcp_control_block {\r
193     unsigned char local_port[TCP_PORT_LEN];\r
194     unsigned char remote_port[TCP_PORT_LEN];\r
195     unsigned char remote_addr[IP_ADDR_LEN];\r
196     tcp_state_t state;\r
197     unsigned int local_seq;\r
198     unsigned int remote_seq;\r
199     unsigned char remote_mac[ETH_ADDR_LEN]; /* this really doesn't belong here */\r
200 //<CJ>:    \r
201     const uint8_t * tx_block_addr;\r
202     unsigned short int tx_block_size;\r
203     unsigned short int tx_block_idx;\r
204     uint8_t * tcp_packet;\r
205 } tcp_control_block_t;\r
206 \r
207 \r
208 typedef enum tcp_cntrol_flags_e {\r
209     TCP_CNTRL_FIN = 0x01,\r
210     TCP_CNTRL_SYN = 0x02,\r
211     TCP_CNTRL_RST = 0x04,\r
212     TCP_CNTRL_PSH = 0x08,\r
213     TCP_CNTRL_ACK = 0x10,\r
214     TCP_CNTRL_URG = 0x20\r
215 } tcp_control_flags_t;\r
216 \r
217 \r
218 typedef struct arp_entry {\r
219     unsigned char mac[ETH_ADDR_LEN];    /* MAC address */\r
220     unsigned char ip[IP_ADDR_LEN];      /* IP address */\r
221     unsigned char used;                 /* Is this entry used? */\r
222 } arp_entry_t;\r
223 \r
224 typedef arp_pkt_t  *arp_pkt_xp;\r
225 typedef ether_hdr_t *eth_hdr_xp;\r
226 typedef ip_hdr_t  *ip_hdr_xp;\r
227 typedef icmp_hdr_t  *icmp_hdr_xp;\r
228 typedef udp_hdr_t  *udp_hdr_xp;\r
229 typedef tcp_hdr_t  *tcp_hdr_xp;\r
230 typedef tcp_pseudo_hdr_t  *tcp_pseudo_hdr_xp;\r
231 typedef bootp_pkt_t  *bootp_pkt_xp;\r
232 \r
233 #endif /* _NETTYPE_H_ */\r