Root/plasma/kernel/tcpip.h

1/*--------------------------------------------------------------------
2 * TITLE: Plasma TCP/IP Protocol Stack
3 * AUTHOR: Steve Rhoads (rhoadss@yahoo.com)
4 * DATE CREATED: 4/22/06
5 * FILENAME: tcpip.h
6 * PROJECT: Plasma CPU core
7 * COPYRIGHT: Software placed into the public domain by the author.
8 * Software 'as is' without warranty. Author liable for nothing.
9 * DESCRIPTION:
10 * Plasma TCP/IP Protocol Stack
11 *--------------------------------------------------------------------*/
12#ifndef __TCPIP_H__
13#define __TCPIP_H__
14#define PACKET_SIZE 600
15#define FRAME_COUNT 100
16#define FRAME_COUNT_SYNC 50
17#define FRAME_COUNT_SEND 10
18#define FRAME_COUNT_RCV 5
19#define RETRANSMIT_TIME 110
20#define SOCKET_TIMEOUT 12
21#define SEND_WINDOW 7000
22#define RECEIVE_WINDOW 5120
23
24typedef enum IPMode_e {
25   IP_MODE_UDP,
26   IP_MODE_TCP,
27   IP_MODE_PING
28} IPMode_e;
29
30typedef enum IPState_e {
31   IP_LISTEN,
32   IP_PING,
33   IP_UDP,
34   IP_SYN,
35   IP_TCP,
36   IP_FIN_CLIENT,
37   IP_FIN_SERVER,
38   IP_CLOSED
39} IPState_e;
40
41typedef void (*IPFuncPtr)();
42
43typedef struct IPFrame {
44   uint8 packet[PACKET_SIZE];
45   struct IPFrame *next, *prev;
46   struct IPSocket *socket;
47   uint32 seqEnd;
48   uint16 length;
49   short timeout;
50   uint8 state, retryCnt;
51} IPFrame;
52
53typedef struct IPSocket {
54   struct IPSocket *next, *prev;
55   IPState_e state;
56   uint32 seq;
57   uint32 seqReceived;
58   uint32 seqWindow;
59   uint32 ack;
60   uint32 ackProcessed;
61   uint32 timeout;
62   uint32 timeoutReset;
63   int resentDone;
64   int dontFlush;
65   uint8 headerSend[38];
66   uint8 headerRcv[38];
67   struct IPFrame *frameReadHead;
68   struct IPFrame *frameReadTail;
69   int readOffset;
70   struct IPFrame *frameSend;
71   int sendOffset;
72   void *fileOut;
73   void *fileIn;
74   IPFuncPtr funcPtr;
75   IPFuncPtr userFunc;
76   void *userPtr;
77   void *userPtr2;
78   uint32 userData;
79   uint32 userData2;
80} IPSocket;
81
82//ethernet.c
83void EthernetSendPacket(const unsigned char *packet, int length); //Windows
84void EthernetInit(unsigned char MacAddress[6]);
85int EthernetReceive(unsigned char *buffer, int length);
86void EthernetTransmit(unsigned char *buffer, int length);
87
88//tcpip.c
89void IPInit(IPFuncPtr frameSendFunction, uint8 macAddress[6], char name[6]);
90IPFrame *IPFrameGet(int freeCount);
91int IPProcessEthernetPacket(IPFrame *frameIn, int length);
92void IPTick(void);
93
94IPSocket *IPOpen(IPMode_e mode, uint32 ipAddress, uint32 port, IPFuncPtr funcPtr);
95void IPWriteFlush(IPSocket *socket);
96uint32 IPWrite(IPSocket *socket, const uint8 *buf, uint32 length);
97uint32 IPRead(IPSocket *socket, uint8 *buf, uint32 length);
98void IPClose(IPSocket *socket);
99#ifdef IPPRINTF
100void IPPrintf(IPSocket *socket, char *message, int arg0, int arg1, int arg2, int arg3);
101#else
102void IPPrintf(IPSocket *socket, char *message, ...);
103#endif
104void IPResolve(char *name, IPFuncPtr resolvedFunc, void *arg);
105uint32 IPAddressSelf(void);
106
107//http.c
108#define HTML_LENGTH_CALLBACK -2
109#define HTML_LENGTH_LIST_END -1
110typedef struct PageEntry_s {
111   const char *name;
112   int length;
113   const char *page;
114} PageEntry_t;
115void HttpInit(const PageEntry_t *Pages, int UseFiles);
116
117//html.c
118void HtmlInit(int UseFiles);
119
120//netutil.c
121void FtpdInit(int UseFiles);
122IPSocket *FtpTransfer(uint32 ip, char *user, char *passwd,
123                      char *filename, uint8 *buf, int size,
124                      int send, void (*callback)(uint8 *data, int size));
125void TftpdInit(void);
126IPSocket *TftpTransfer(uint32 ip, char *filename, uint8 *buffer, int size,
127                       void (*callback)(uint8 *data, int bytes));
128void ConsoleInit(void);
129void *IPNameValue(const char *name, void *value);
130
131#endif //__TCPIP_H__
132

Archive Download this file

Branches:
master



interactive