00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00064 #ifndef INCLUDE_TCP_IP_H
00065 #define INCLUDE_TCP_IP_H
00066
00067 #include <inet/datatypes.h>
00068 #include <inet/ethernet.h>
00069 #include <inet/ip.h>
00070
00071
00072
00081 #define NO_OF_TCPSOCKETS 8
00082
00091 #define NO_OF_UDPSOCKETS 4
00092
00100 #define TCP_PORTS_END 1023
00101
00109 #define UDP_PORTS_END 1023
00110
00111
00112
00122 #define UDP_OPT_NONE 0
00123
00132 #define UDP_OPT_SEND_CS 1
00133
00140 #define UDP_OPT_CHECK_CS 2
00141
00142 #define UDP_SEND_MTU ETH_MTU - ETH_HEADER_LEN - UDP_HLEN - IP_MAX_HLEN
00143
00144 #define UDP_HLEN 8
00146 #define MIN_TCP_HLEN 20
00147 #define MAX_TCP_OPTLEN 40
00148 #define TCP_DEF_MTU 512
00149
00160 #define TCP_DEF_RETRIES 7
00161
00171 #define TCP_DEF_KEEPALIVE 4
00172
00180 #define TCP_DEF_RETRY_TOUT 2
00181
00188 #define TCP_TOS_NORMAL 0
00189
00199 #define TCP_DEF_TOUT 120
00200
00201 #define TCP_HALF_SEQ_SPACE 0x0000FFFF
00202
00203
00204
00205
00206 #define ICMP_TYPE_DEST_UNREACHABLE 3
00207 #define ICMP_ECHO_REQUEST 8
00208 #define ICMP_ECHO_REPLY 0
00209 #define ICMP_CODE_FRAGMENTATION_NEEDED_DF_SET 4
00210 #define ICMP_MTUMSG_LEN 16
00211 #define ICMP_ECHOREQ_HLEN 8
00212 #define ICMP_TEMPIPSET_DATALEN 102
00213
00214
00215
00216
00223 #define UDP_STATE_FREE 1
00224
00232 #define UDP_STATE_CLOSED 2
00233
00240 #define UDP_STATE_OPENED 3
00241
00242
00243
00250 #define UDP_EVENT_DATA 64
00251
00252
00253
00254
00255 #define TCP_FLAG_ACK 0x10
00256 #define TCP_FLAG_PUSH 0x08
00257 #define TCP_FLAG_RESET 0x04
00258 #define TCP_FLAG_SYN 0x02
00259 #define TCP_FLAG_FIN 0x01
00260
00261
00262
00263 #define TCP_INTFLAGS_CLOSEPENDING 0x01
00264
00265
00274 #define TCP_TYPE_NONE 0x00
00275
00284 #define TCP_TYPE_SERVER 0x01
00285
00294 #define TCP_TYPE_CLIENT 0x02
00295
00303 #define TCP_TYPE_CLIENT_SERVER 0x03
00304
00305
00306
00307 #define TCP_STATE_FREE 1
00308 #define TCP_STATE_RESERVED 2
00309 #define TCP_STATE_CLOSED 3
00310 #define TCP_STATE_LISTENING 4
00313 #define TCP_STATE_SYN_RECEIVED 5
00317 #define TCP_STATE_SYN_SENT 6
00320 #define TCP_STATE_FINW1 7
00323 #define TCP_STATE_FINW2 8
00327 #define TCP_STATE_CLOSING 9
00330 #define TCP_STATE_LAST_ACK 10
00333 #define TCP_STATE_TIMED_WAIT 11
00336 #define TCP_STATE_CONNECTED 12
00342
00343
00361 #define TCP_EVENT_CONREQ 1
00362
00371 #define TCP_EVENT_CONNECTED 2
00372
00379 #define TCP_EVENT_CLOSE 4
00380
00392 #define TCP_EVENT_ABORT 8
00393
00402 #define TCP_EVENT_ACK 16
00403
00411 #define TCP_EVENT_REGENERATE 32
00412
00419 #define TCP_EVENT_DATA 64
00420
00421
00422
00423
00424
00433 #define TCP_APP_OFFSET MIN_TCP_HLEN
00434
00435
00445 #define UDP_APP_OFFSET UDP_HLEN
00446
00447
00448
00449
00450
00462 struct udp_frame
00463 {
00464 UINT16 sport;
00465 UINT16 dport;
00466 UINT16 tlen;
00467 UINT16 checksum;
00468 UINT16 buf_index;
00471 };
00472
00480 struct ucb
00481 {
00490 UINT8 state;
00491
00497 UINT8 tos;
00498
00499 UINT16 locport;
00513 UINT8 opts;
00514
00520 INT32 (*event_listener)
00521 (INT8, UINT8, UINT32, UINT16, UINT16, UINT16 );
00522 };
00523
00524
00525
00526
00527
00538 struct tcp_frame
00539 {
00540 UINT16 sport;
00541 UINT16 dport;
00542 UINT32 seqno;
00543 UINT32 ackno;
00544 UINT16 hlen_flags;
00545 UINT16 window;
00546 UINT16 checksum;
00547 UINT16 urgent;
00548 UINT8 opt[MAX_TCP_OPTLEN + 1];
00549 UINT16 buf_index;
00552 };
00553
00563 struct tcb
00564 {
00583 UINT8 state;
00584
00595 UINT8 type;
00596 UINT8 flags;
00597 UINT32 rem_ip;
00598 UINT16 remport;
00599 UINT16 locport;
00600 UINT32 send_unacked;
00601 UINT8 myflags;
00602 UINT32 send_next;
00603 UINT16 send_mtu;
00604 UINT16 tout;
00605 UINT8 tos;
00606 UINT32 receive_next;
00607 UINT16 persist_timerh;
00608 UINT16 retransmit_timerh;
00609 UINT8 retries_left;
00618 INT32 (*event_listener)(INT8, UINT8, UINT32, UINT32);
00619
00620 };
00621
00622
00623
00624 INT16 process_icmp_in(struct ip_frame*, UINT16);
00625
00626
00627 INT8 udp_init (void);
00628 INT8 udp_getsocket (UINT8 , INT32 (* )(INT8, UINT8, UINT32, UINT16, UINT16, UINT16), UINT8 );
00629 INT8 udp_releasesocket (INT8 );
00630 INT8 udp_open (INT8 , UINT16 );
00631 INT8 udp_close (INT8 );
00632 INT16 udp_send (INT8 , UINT32 , UINT16 , UINT8* , UINT16 , UINT16 );
00633 INT16 process_udp_in(struct ip_frame* , UINT16 );
00634 UINT16 udp_getfreeport(void);
00635
00636
00637
00638 INT16 process_tcp_in(struct ip_frame*, UINT16);
00639 INT16 process_tcp_out(INT8, UINT8*, UINT16, UINT16);
00640 INT8 tcp_init(void);
00641 INT8 tcp_listen(UINT8, UINT16);
00642 INT8 tcp_mapsocket(struct ip_frame*, struct tcp_frame*);
00643 UINT8 tcp_check_cs(struct ip_frame*, UINT16);
00644 void tcp_sendcontrol(UINT8);
00645 UINT32 tcp_initseq(void);
00646 void tcp_poll(void);
00647 void tcp_newstate(struct tcb*, UINT8);
00648 INT8 tcp_getsocket(UINT8, UINT8, UINT16, INT32 (*)(INT8, UINT8, UINT32, UINT32) );
00649 INT8 tcp_releasesocket(INT8);
00650 INT8 tcp_connect(UINT8, UINT32, UINT16, UINT16);
00651 INT16 tcp_send(INT8, UINT8*, UINT16, UINT16);
00652 INT8 tcp_close(UINT8);
00653 void tcp_sendreset(struct tcp_frame*, UINT32);
00654 INT8 tcp_getstate(UINT8);
00655 UINT16 tcp_getfreeport(void);
00656 INT16 tcp_checksend(UINT8);
00657 INT8 tcp_abort(UINT8);
00658
00659
00660
00661 #endif
00662
00663