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.
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 22:58:15 by
1.7.2