]> rtime.felk.cvut.cz Git - fpga/plasma.git/blob - kernel/tcpip.h
Local copy of Plasma MIPS project.
[fpga/plasma.git] / 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        15
21 #define SEND_WINDOW           7000
22 #define RECEIVE_WINDOW        5120
23
24 typedef enum IPMode_e {
25    IP_MODE_UDP,
26    IP_MODE_TCP,
27    IP_MODE_PING
28 } IPMode_e;
29
30 typedef 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
41 typedef void (*IPFuncPtr)();
42
43 typedef 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
53 typedef 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;\r
73    void *fileIn;\r
74    IPFuncPtr funcPtr;
75    IPFuncPtr userFunc;
76    void *userPtr;
77    void *userPtr2;
78    uint32 userData;
79    uint32 userData2;
80 } IPSocket;
81
82 //ethernet.c
83 void EthernetSendPacket(const unsigned char *packet, int length); //Windows
84 void EthernetInit(unsigned char MacAddress[6]);
85 int EthernetReceive(unsigned char *buffer, int length);
86 void EthernetTransmit(unsigned char *buffer, int length);
87
88 //tcpip.c
89 void IPInit(IPFuncPtr frameSendFunction, uint8 macAddress[6], char name[6]);
90 IPFrame *IPFrameGet(int freeCount);
91 int IPProcessEthernetPacket(IPFrame *frameIn, int length);
92 void IPTick(void);
93
94 IPSocket *IPOpen(IPMode_e mode, uint32 ipAddress, uint32 port, IPFuncPtr funcPtr);
95 void IPWriteFlush(IPSocket *socket);
96 uint32 IPWrite(IPSocket *socket, const uint8 *buf, uint32 length);
97 uint32 IPRead(IPSocket *socket, uint8 *buf, uint32 length);
98 void IPClose(IPSocket *socket);
99 #ifdef IPPRINTF
100 void IPPrintf(IPSocket *socket, char *message, int arg0, int arg1, int arg2, int arg3);
101 #else
102 void IPPrintf(IPSocket *socket, char *message, ...);
103 #endif
104 void IPResolve(char *name, IPFuncPtr resolvedFunc, void *arg);
105 uint32 IPAddressSelf(void);
106
107 //http.c
108 #define HTML_LENGTH_CALLBACK  -2
109 #define HTML_LENGTH_LIST_END  -1
110 typedef struct PageEntry_s {
111    const char *name;
112    int length;
113    const char *page;
114 } PageEntry_t;
115 void HttpInit(const PageEntry_t *Pages, int UseFiles);
116
117 //html.c
118 void HtmlInit(int UseFiles);
119
120 //netutil.c
121 void FtpdInit(int UseFiles);
122 IPSocket *FtpTransfer(uint32 ip, char *user, char *passwd, 
123                       char *filename, uint8 *buf, int size, 
124                       int send, void (*callback)(uint8 *data, int size));
125 void TftpdInit(void);
126 IPSocket *TftpTransfer(uint32 ip, char *filename, uint8 *buffer, int size,
127                        void (*callback)(uint8 *data, int bytes));
128 void ConsoleInit(void);
129 void *IPNameValue(const char *name, void *value);
130
131 #endif //__TCPIP_H__