#ifndef TCP_H #define TCP_H typedef unsigned short int WORD; typedef unsigned long int DWORD; typedef int BOOL; #define TRUE 1 #define FALSE 0 // TCP Header stuff #define TCPIP_HEADER_SIZE 40 // size in bytes // Header for a TCP/IP packet typedef struct TCPIP_Packet { // IP fields WORD ver_len_qos; // check against common value WORD length; // data len = length - 20, if ver_len_qos check passes WORD ident; // sequence number, should ignore WORD flags_offset;// check against common value WORD ttl_proto; // check against common value WORD header_checksum; // have to calc and verify this DWORD source_IP; // should ignore, will need for ACK DWORD dest_IP; // should ignore // TCP fields DWORD ports; // Put two ports together for one comparison // WORD source_port; // handled by NI, will need for ACK // WORD dest_port; // handled by NI DWORD seq_number; // check that this is next expected sequence number DWORD ack_number; // use to update non-stable packet list WORD off_flags; // check against common value WORD window; // use to update window value short checksum; // have to check this, should be done by NI WORD urgent_ptr; // should ignore WORD data; } TCPIP_Packet; // Current maximum queue size #define MAX_Q_SIZE 64 // What a queue entry holds typedef struct Q { DWORD head, tail; // tail points to first free buffer DWORD number[MAX_Q_SIZE]; // sequence number last byte in packet...not always used void *header[MAX_Q_SIZE]; // pointer to header...not always used void *data[MAX_Q_SIZE]; // pointer to data or packet } Q; // Wrap-around int operations #define LESS_THAN(A, B) ((A)-(B)<0) #define EQUAL(A,B) (A==B) #define GREATER_THAN(A,B) ((A)-(B)>0) typedef struct SocketInfo { // This holds info about a socket DWORD next_seq_number; // next expected seq number DWORD highest_ack; // highest ack we have received int bytes_unacked; // number of bytes we have received without // sending an ACK WORD window; // how much can we send? (receiver's window) WORD congestionWindow; // window limit for congestion WORD maxSegmentSize; // DWORD highest_seq_number; // The highest sequence number we have received // This may be different than next_seq_num WORD receiveWindow; // max value we can receive at present moment WORD maxReceiveWindow; // max value we can receive period DWORD senderSeqNumber; // Sender's sequence number WORD slowStartThreshold; // Threshold where slow start ends TCPIP_Packet sendHeader; // cached values for packet to be sent } SocketInfo; #define MAX_OUTSTANDING 64 // Maximum # of packets we can have outstanding at a time #define MAX_OUT_Q // Maximum # of packets we can have in our outgoing Q #define TCP_PROTO_NUMBER 4 // This isn't right...fix #endif //TCP.H