Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Fork of EasyWebCR by
tcpip.h
00001 /****************************************************************** 00002 ***** ***** 00003 ***** Name: tcpip.h ***** 00004 ***** Ver.: 1.0 ***** 00005 ***** Date: 07/05/2001 ***** 00006 ***** Auth: Andreas Dannenberg ***** 00007 ***** HTWK Leipzig ***** 00008 ***** university of applied sciences ***** 00009 ***** Germany ***** 00010 ***** Func: header-file for tcpip.c ***** 00011 ***** ***** 00012 ******************************************************************/ 00013 00014 // Modifications by Code Red Technologies for NXP LPC1776 00015 00016 #ifndef __TCPIP_H 00017 #define __TCPIP_H 00018 00019 // easyWEB-stack definitions 00020 // Code Red - replaced original address by 192.168.0.200 00021 #define MYIP_1 192 // our internet protocol (IP) address 00022 #define MYIP_2 168 00023 #define MYIP_3 0 00024 #define MYIP_4 200 00025 //#define MYIP_4 30 00026 00027 #define SUBMASK_1 255 // subnet mask 00028 #define SUBMASK_2 255 00029 #define SUBMASK_3 255 00030 #define SUBMASK_4 0 00031 00032 #define GWIP_1 192 // standard gateway (used if remote 00033 #define GWIP_2 168 // IP is no part of our subnet) 00034 #define GWIP_3 2 00035 #define GWIP_4 154 00036 00037 #define RETRY_TIMEOUT 8 // wait max. 8 x 262ms for an ACK (about 2 sec.) 00038 #define FIN_TIMEOUT 2 // max. time to wait for an ACK of a FIN 00039 // before closing TCP state-machine (about 0.5 s) 00040 #define MAX_RETRYS 4 // nr. of resendings before reset conn. 00041 // total nr. of transmissions = MAX_RETRYS + 1 00042 00043 #define MAX_TCP_TX_DATA_SIZE 512 // max. outgoing TCP data size (even!) 00044 #define MAX_TCP_RX_DATA_SIZE 256 // max. incoming TCP data size (even!) 00045 // (increasing the buffer-size dramatically 00046 // increases the transfer-speed!) 00047 00048 #define MAX_ETH_TX_DATA_SIZE 60 // 2nd buffer, used for ARP, ICMP, TCP (even!) 00049 // enough to echo 32 byte via ICMP 00050 00051 #define DEFAULT_TTL 64 // Time To Live sent with packets 00052 00053 // Ethernet network layer definitions 00054 #define ETH_DA_OFS 0 // Destination MAC address (48 Bit) 00055 #define ETH_SA_OFS 6 // Source MAC address (48 Bit) 00056 #define ETH_TYPE_OFS 12 // Type field (16 Bit) 00057 #define ETH_DATA_OFS 14 // Frame Data 00058 #define ETH_HEADER_SIZE 14 00059 00060 #define FRAME_ARP 0x0806 // frame types (stored in Type/Length field) 00061 #define FRAME_IP 0x0800 00062 00063 // IPv4 layer definitions 00064 #define IP_VER_IHL_TOS_OFS ETH_DATA_OFS + 0 // Version, Header Length, Type of Service 00065 #define IP_TOTAL_LENGTH_OFS ETH_DATA_OFS + 2 // IP Frame's Total Length 00066 #define IP_IDENT_OFS ETH_DATA_OFS + 4 // Identifying Value 00067 #define IP_FLAGS_FRAG_OFS ETH_DATA_OFS + 6 // Flags and Fragment Offset 00068 #define IP_TTL_PROT_OFS ETH_DATA_OFS + 8 // Frame's Time to Live, Protocol 00069 #define IP_HEAD_CHKSUM_OFS ETH_DATA_OFS + 10 // IP Frame's Header Checksum 00070 #define IP_SOURCE_OFS ETH_DATA_OFS + 12 // Source Address (32 Bit) 00071 #define IP_DESTINATION_OFS ETH_DATA_OFS + 16 // Destination Address (32 Bit) 00072 #define IP_DATA_OFS ETH_DATA_OFS + 20 // Frame Data (if no options) 00073 #define IP_HEADER_SIZE 20 // w/o options 00074 00075 #define IP_VER_IHL 0x4500 // IPv4, Header Length = 5x32 bit 00076 #define IP_TOS_D 0x0010 // TOS low delay 00077 #define IP_TOS_T 0x0008 // TOS high throughput 00078 #define IP_TOS_R 0x0004 // TOS high reliability 00079 00080 #define IP_FLAG_DONTFRAG 0x4000 // don't fragment IP frame 00081 #define IP_FLAG_MOREFRAG 0x2000 // more fragments available 00082 #define IP_FRAGOFS_MASK 0x1FFF // indicates where this fragment belongs 00083 00084 #define PROT_ICMP 1 // Internet Control Message Protocol 00085 #define PROT_TCP 6 // Transmission Control Protocol 00086 #define PROT_UDP 17 // User Datagram Protocol 00087 00088 // ARP definitions 00089 #define ARP_HARDW_OFS ETH_DATA_OFS + 0 // Hardware address type 00090 #define ARP_PROT_OFS ETH_DATA_OFS + 2 // Protocol 00091 #define ARP_HLEN_PLEN_OFS ETH_DATA_OFS + 4 // byte length of each hardw. / prot. address 00092 #define ARP_OPCODE_OFS ETH_DATA_OFS + 6 // Opcode 00093 #define ARP_SENDER_HA_OFS ETH_DATA_OFS + 8 // Hardw. address of sender of this packet 00094 #define ARP_SENDER_IP_OFS ETH_DATA_OFS + 14 // IP address of sender 00095 #define ARP_TARGET_HA_OFS ETH_DATA_OFS + 18 // Hardw. address of target of this packet 00096 #define ARP_TARGET_IP_OFS ETH_DATA_OFS + 24 // IP address of target 00097 #define ARP_FRAME_SIZE 28 00098 00099 #define HARDW_ETH10 1 // hardware-type 10Mbps Ethernet 00100 #define IP_HLEN_PLEN 0x0604 // MAC = 6 byte long, IP = 4 byte long 00101 #define OP_ARP_REQUEST 1 // operations for ARP-frames 00102 #define OP_ARP_ANSWER 2 00103 00104 // ICMP definitions 00105 #define ICMP_TYPE_CODE_OFS IP_DATA_OFS + 0 // type of message 00106 #define ICMP_CHKSUM_OFS IP_DATA_OFS + 2 // checksum of ICMP-message (16 bit) 00107 #define ICMP_DATA_OFS IP_DATA_OFS + 4 00108 #define ICMP_HEADER_SIZE 4 00109 00110 #define ICMP_ECHO 8 // message is an echo request 00111 #define ICMP_ECHO_REPLY 0 // message is an echo reply 00112 00113 // TCP layer definitions 00114 #define TCP_SRCPORT_OFS IP_DATA_OFS + 0 // Source Port (16 bit) 00115 #define TCP_DESTPORT_OFS IP_DATA_OFS + 2 // Destination Port (16 bit) 00116 #define TCP_SEQNR_OFS IP_DATA_OFS + 4 // Sequence Number (32 bit) 00117 #define TCP_ACKNR_OFS IP_DATA_OFS + 8 // Acknowledge Number (32 bit) 00118 #define TCP_DATA_CODE_OFS IP_DATA_OFS + 12 // Data Offset and Control Bits (16 bit) 00119 #define TCP_WINDOW_OFS IP_DATA_OFS + 14 // Window Size (16 bit) 00120 #define TCP_CHKSUM_OFS IP_DATA_OFS + 16 // Checksum Field (16 bit) 00121 #define TCP_URGENT_OFS IP_DATA_OFS + 18 // Urgent Pointer (16 bit) 00122 #define TCP_DATA_OFS IP_DATA_OFS + 20 // Frame Data (if no options) 00123 #define TCP_HEADER_SIZE 20 // size w/o options 00124 00125 #define DATA_OFS_MASK 0xF000 // number of 32 bit words in the TCP Header 00126 00127 #define TCP_CODE_FIN 0x0001 00128 #define TCP_CODE_SYN 0x0002 00129 #define TCP_CODE_RST 0x0004 00130 #define TCP_CODE_PSH 0x0008 00131 #define TCP_CODE_ACK 0x0010 00132 #define TCP_CODE_URG 0x0020 00133 00134 #define TCP_OPT_MSS 0x0204 // Type 2, Option Length 4 (Max. Segment Size) 00135 #define TCP_OPT_MSS_SIZE 4 00136 00137 // define some TCP standard-ports, useful for testing... 00138 #define TCP_PORT_ECHO 7 // echo 00139 #define TCP_PORT_DISCARD 9 // discard 00140 #define TCP_PORT_DAYTIME 13 // daytime 00141 #define TCP_PORT_QOTD 17 // quote of the day 00142 #define TCP_PORT_CHARGEN 19 // character generator 00143 #define TCP_PORT_HTTP 80 // word wide web HTTP 00144 00145 // macros 00146 #define SWAPB(Word) ((unsigned short)((Word) << 8) | ((Word) >> 8)) 00147 // convert little <-> big endian 00148 00149 // typedefs 00150 typedef enum { // states of the TCP-state machine 00151 CLOSED, // according to RFC793 00152 LISTENING, 00153 SYN_SENT, 00154 SYN_RECD, 00155 ESTABLISHED, 00156 FIN_WAIT_1, 00157 FIN_WAIT_2, 00158 CLOSE_WAIT, 00159 CLOSING, 00160 LAST_ACK, 00161 TIME_WAIT 00162 } TTCPStateMachine; 00163 00164 typedef enum { // type of last frame sent. used 00165 ARP_REQUEST, // for retransmissions 00166 TCP_SYN_FRAME, 00167 TCP_SYN_ACK_FRAME, 00168 TCP_FIN_FRAME, 00169 TCP_DATA_FRAME 00170 } TLastFrameSent; 00171 00172 // constants 00173 00174 // Code Red 00175 // ifdef added as due to change to including .h files rather than .c files. 00176 // The use of ifdef reduces the coding changes that would otherwise be required, 00177 // depending upon which file is including this one. 00178 // the next 3 buffers must be word-aligned! 00179 // (here the 'RecdIPFrameLength' above does that) 00180 00181 extern unsigned short _TxFrame1[(ETH_HEADER_SIZE + IP_HEADER_SIZE + TCP_HEADER_SIZE + MAX_TCP_TX_DATA_SIZE)/2]; 00182 extern unsigned short _TxFrame2[(ETH_HEADER_SIZE + MAX_ETH_TX_DATA_SIZE)/2]; 00183 extern unsigned short _RxTCPBuffer[MAX_TCP_RX_DATA_SIZE/2]; // space for incoming TCP-data 00184 #define TxFrame1 ((unsigned char *)_TxFrame1) 00185 #define TxFrame2 ((unsigned char *)_TxFrame2) 00186 #define RxTCPBuffer ((unsigned char *)_RxTCPBuffer) 00187 00188 // 00189 // prototypes 00190 void DoNetworkStuff(void); 00191 00192 // Handlers for incoming frames 00193 void ProcessEthBroadcastFrame(void); 00194 void ProcessEthIAFrame(void); 00195 void ProcessICMPFrame(void); 00196 void ProcessTCPFrame(void); 00197 00198 // fill TX-buffers 00199 void PrepareARP_REQUEST(void); 00200 void PrepareARP_ANSWER(void); 00201 void PrepareICMP_ECHO_REPLY(void); 00202 void PrepareTCP_FRAME(unsigned short TCPCode); 00203 void PrepareTCP_DATA_FRAME(void); 00204 00205 // general help functions 00206 void SendFrame1(void); 00207 void SendFrame2(void); 00208 void TCPStartRetryTimer(void); 00209 void TCPStartTimeWaitTimer(void); 00210 void TCPRestartTimer(void); 00211 void TCPStopTimer(void); 00212 void TCPHandleRetransmission(void); 00213 void TCPHandleTimeout(void); 00214 unsigned short CalcChecksum(void *Start, unsigned short Count, unsigned char IsTCP); 00215 00216 // functions to work with big-endian numbers 00217 unsigned short SwapBytes(unsigned short Data); 00218 void WriteWBE(unsigned char *Add, unsigned short Data); 00219 void WriteDWBE(unsigned char *Add, unsigned long Data); 00220 00221 // easyWEB-API functions 00222 void TCPLowLevelInit(void); // setup timer, LAN-controller, flags... 00223 void TCPPassiveOpen(void); // listen for a connection 00224 void TCPActiveOpen(void); // open connection 00225 void TCPClose(void); // close connection 00226 void TCPReleaseRxBuffer(void); // indicate to discard rec'd packet 00227 void TCPTransmitTxBuffer(void); // initiate transfer after TxBuffer is filled 00228 // Code Red - added declaration for Timer0 ISR 00229 void TCPClockHandler(void); 00230 00231 // easyWEB-API global vars and flags 00232 extern unsigned short TCPRxDataCount; // nr. of bytes rec'd 00233 extern unsigned short TCPTxDataCount; // nr. of bytes to send 00234 00235 extern unsigned short TCPLocalPort; // TCP ports 00236 extern unsigned short TCPRemotePort; 00237 00238 extern unsigned short RemoteMAC[3]; // MAC and IP of current TCP-session 00239 extern unsigned short RemoteIP[2]; 00240 00241 extern unsigned char SocketStatus; 00242 #define SOCK_ACTIVE 0x01 // state machine NOT closed 00243 #define SOCK_CONNECTED 0x02 // user may send & receive data 00244 #define SOCK_DATA_AVAILABLE 0x04 // new data available 00245 #define SOCK_TX_BUF_RELEASED 0x08 // user may fill buffer 00246 00247 #define SOCK_ERROR_MASK 0xF0 // bit-mask to check for errors 00248 #define SOCK_ERR_OK 0x00 // no error 00249 #define SOCK_ERR_ARP_TIMEOUT 0x10 // timeout waiting for an ARP-REPLY 00250 #define SOCK_ERR_TCP_TIMEOUT 0x20 // timeout waiting for an ACK 00251 #define SOCK_ERR_CONN_RESET 0x30 // connection was reset by the other TCP 00252 #define SOCK_ERR_REMOTE 0x40 // remote TCP caused fatal error 00253 #define SOCK_ERR_ETHERNET 0x50 // network interface error (timeout) 00254 00255 // easyWEB-API buffer-pointers 00256 #define TCP_TX_BUF ((unsigned char *)TxFrame1 + ETH_HEADER_SIZE + IP_HEADER_SIZE + TCP_HEADER_SIZE) 00257 #define TCP_RX_BUF ((unsigned char *)RxTCPBuffer) 00258 00259 #endif 00260
Generated on Tue Jul 12 2022 18:57:49 by
 1.7.2
 1.7.2 
    