/*--------------------------------------------------------------------
|
/*--------------------------------------------------------------------
|
* TITLE: Plasma TCP/IP Protocol Stack
|
* TITLE: Plasma TCP/IP Protocol Stack
|
* AUTHOR: Steve Rhoads (rhoadss@yahoo.com)
|
* AUTHOR: Steve Rhoads (rhoadss@yahoo.com)
|
* DATE CREATED: 4/22/06
|
* DATE CREATED: 4/22/06
|
* FILENAME: tcpip.h
|
* FILENAME: tcpip.h
|
* PROJECT: Plasma CPU core
|
* PROJECT: Plasma CPU core
|
* COPYRIGHT: Software placed into the public domain by the author.
|
* COPYRIGHT: Software placed into the public domain by the author.
|
* Software 'as is' without warranty. Author liable for nothing.
|
* Software 'as is' without warranty. Author liable for nothing.
|
* DESCRIPTION:
|
* DESCRIPTION:
|
* Plasma TCP/IP Protocol Stack
|
* Plasma TCP/IP Protocol Stack
|
*--------------------------------------------------------------------*/
|
*--------------------------------------------------------------------*/
|
#ifndef __TCPIP_H__
|
#ifndef __TCPIP_H__
|
#define __TCPIP_H__
|
#define __TCPIP_H__
|
#define PACKET_SIZE 600
|
#define PACKET_SIZE 600
|
#define FRAME_COUNT 100
|
#define FRAME_COUNT 100
|
#define FRAME_COUNT_SYNC 50
|
#define FRAME_COUNT_SYNC 50
|
#define FRAME_COUNT_SEND 10
|
#define FRAME_COUNT_SEND 10
|
#define FRAME_COUNT_RCV 5
|
#define FRAME_COUNT_RCV 5
|
#define RETRANSMIT_TIME 110
|
#define RETRANSMIT_TIME 110
|
#define SOCKET_TIMEOUT 12
|
#define SOCKET_TIMEOUT 12
|
#define SEND_WINDOW 7000
|
#define SEND_WINDOW 7000
|
#define RECEIVE_WINDOW 5120
|
#define RECEIVE_WINDOW 5120
|
|
|
typedef enum IPMode_e {
|
typedef enum IPMode_e {
|
IP_MODE_UDP,
|
IP_MODE_UDP,
|
IP_MODE_TCP,
|
IP_MODE_TCP,
|
IP_MODE_PING
|
IP_MODE_PING
|
} IPMode_e;
|
} IPMode_e;
|
|
|
typedef enum IPState_e {
|
typedef enum IPState_e {
|
IP_LISTEN,
|
IP_LISTEN,
|
IP_PING,
|
IP_PING,
|
IP_UDP,
|
IP_UDP,
|
IP_SYN,
|
IP_SYN,
|
IP_TCP,
|
IP_TCP,
|
IP_FIN_CLIENT,
|
IP_FIN_CLIENT,
|
IP_FIN_SERVER,
|
IP_FIN_SERVER,
|
IP_CLOSED
|
IP_CLOSED
|
} IPState_e;
|
} IPState_e;
|
|
|
typedef void (*IPFuncPtr)();
|
typedef void (*IPFuncPtr)();
|
|
|
typedef struct IPFrame {
|
typedef struct IPFrame {
|
uint8 packet[PACKET_SIZE];
|
uint8 packet[PACKET_SIZE];
|
struct IPFrame *next, *prev;
|
struct IPFrame *next, *prev;
|
struct IPSocket *socket;
|
struct IPSocket *socket;
|
uint32 seqEnd;
|
uint32 seqEnd;
|
uint16 length;
|
uint16 length;
|
short timeout;
|
short timeout;
|
uint8 state, retryCnt;
|
uint8 state, retryCnt;
|
} IPFrame;
|
} IPFrame;
|
|
|
typedef struct IPSocket {
|
typedef struct IPSocket {
|
struct IPSocket *next, *prev;
|
struct IPSocket *next, *prev;
|
IPState_e state;
|
IPState_e state;
|
uint32 seq;
|
uint32 seq;
|
uint32 seqReceived;
|
uint32 seqReceived;
|
uint32 seqWindow;
|
uint32 seqWindow;
|
uint32 ack;
|
uint32 ack;
|
uint32 ackProcessed;
|
uint32 ackProcessed;
|
uint32 timeout;
|
uint32 timeout;
|
uint32 timeoutReset;
|
uint32 timeoutReset;
|
int resentDone;
|
int resentDone;
|
int dontFlush;
|
int dontFlush;
|
uint8 headerSend[38];
|
uint8 headerSend[38];
|
uint8 headerRcv[38];
|
uint8 headerRcv[38];
|
struct IPFrame *frameReadHead;
|
struct IPFrame *frameReadHead;
|
struct IPFrame *frameReadTail;
|
struct IPFrame *frameReadTail;
|
int readOffset;
|
int readOffset;
|
struct IPFrame *frameSend;
|
struct IPFrame *frameSend;
|
int sendOffset;
|
int sendOffset;
|
IPFuncPtr funcPtr;
|
IPFuncPtr funcPtr;
|
IPFuncPtr userFunc;
|
IPFuncPtr userFunc;
|
void *userPtr;
|
void *userPtr;
|
void *userPtr2;
|
void *userPtr2;
|
uint32 userData;
|
uint32 userData;
|
uint32 userData2;
|
uint32 userData2;
|
} IPSocket;
|
} IPSocket;
|
|
|
//ethernet.c
|
//ethernet.c
|
void EthernetSendPacket(const unsigned char *packet, int length); //Windows
|
void EthernetSendPacket(const unsigned char *packet, int length); //Windows
|
void EthernetInit(unsigned char MacAddress[6]);
|
void EthernetInit(unsigned char MacAddress[6]);
|
int EthernetReceive(unsigned char *buffer, int length);
|
int EthernetReceive(unsigned char *buffer, int length);
|
void EthernetTransmit(unsigned char *buffer, int length);
|
void EthernetTransmit(unsigned char *buffer, int length);
|
|
|
//tcpip.c
|
//tcpip.c
|
void IPInit(IPFuncPtr frameSendFunction, uint8 macAddress[6], char name[6]);
|
void IPInit(IPFuncPtr frameSendFunction, uint8 macAddress[6], char name[6]);
|
IPFrame *IPFrameGet(int freeCount);
|
IPFrame *IPFrameGet(int freeCount);
|
int IPProcessEthernetPacket(IPFrame *frameIn, int length);
|
int IPProcessEthernetPacket(IPFrame *frameIn, int length);
|
void IPTick(void);
|
void IPTick(void);
|
|
|
IPSocket *IPOpen(IPMode_e mode, uint32 ipAddress, uint32 port, IPFuncPtr funcPtr);
|
IPSocket *IPOpen(IPMode_e mode, uint32 ipAddress, uint32 port, IPFuncPtr funcPtr);
|
void IPWriteFlush(IPSocket *socket);
|
void IPWriteFlush(IPSocket *socket);
|
uint32 IPWrite(IPSocket *socket, const uint8 *buf, uint32 length);
|
uint32 IPWrite(IPSocket *socket, const uint8 *buf, uint32 length);
|
uint32 IPRead(IPSocket *socket, uint8 *buf, uint32 length);
|
uint32 IPRead(IPSocket *socket, uint8 *buf, uint32 length);
|
void IPClose(IPSocket *socket);
|
void IPClose(IPSocket *socket);
|
#ifdef IPPRINTF
|
#ifdef IPPRINTF
|
void IPPrintf(IPSocket *socket, char *message, int arg0, int arg1, int arg2, int arg3);
|
void IPPrintf(IPSocket *socket, char *message, int arg0, int arg1, int arg2, int arg3);
|
#else
|
#else
|
void IPPrintf(IPSocket *socket, char *message, ...);
|
void IPPrintf(IPSocket *socket, char *message, ...);
|
#endif
|
#endif
|
void IPResolve(char *name, IPFuncPtr resolvedFunc, void *arg);
|
void IPResolve(char *name, IPFuncPtr resolvedFunc, void *arg);
|
uint32 IPAddressSelf(void);
|
uint32 IPAddressSelf(void);
|
|
|
//http.c
|
//http.c
|
#define HTML_LENGTH_CALLBACK -2
|
#define HTML_LENGTH_CALLBACK -2
|
#define HTML_LENGTH_LIST_END -1
|
#define HTML_LENGTH_LIST_END -1
|
typedef struct PageEntry_s {
|
typedef struct PageEntry_s {
|
const char *name;
|
const char *name;
|
int length;
|
int length;
|
const char *page;
|
const char *page;
|
} PageEntry_t;
|
} PageEntry_t;
|
void HttpInit(const PageEntry_t *Pages, int UseFiles);
|
void HttpInit(const PageEntry_t *Pages, int UseFiles);
|
|
|
//html.c
|
//html.c
|
void HtmlInit(int UseFiles);
|
void HtmlInit(int UseFiles);
|
|
|
//netutil.c
|
//netutil.c
|
void FtpdInit(int UseFiles);
|
void FtpdInit(int UseFiles);
|
IPSocket *FtpTransfer(uint32 ip, char *user, char *passwd,
|
IPSocket *FtpTransfer(uint32 ip, char *user, char *passwd,
|
char *filename, uint8 *buf, int size,
|
char *filename, uint8 *buf, int size,
|
int send, void (*callback)(uint8 *data, int size));
|
int send, void (*callback)(uint8 *data, int size));
|
void TftpdInit(void);
|
void TftpdInit(void);
|
IPSocket *TftpTransfer(uint32 ip, char *filename, uint8 *buffer, int size,
|
IPSocket *TftpTransfer(uint32 ip, char *filename, uint8 *buffer, int size,
|
void (*callback)(uint8 *data, int bytes));
|
void (*callback)(uint8 *data, int bytes));
|
void ConsoleInit(void);
|
void ConsoleInit(void);
|
void *IPNameValue(const char *name, void *value);
|
void *IPNameValue(const char *name, void *value);
|
|
|
#endif //__TCPIP_H__
|
#endif //__TCPIP_H__
|
|
|