TCPPB.h

/* 
    TCPPB.h 
    C definitions of parameter block entries needed for TCP calls
 
    Copyright Apple Computer, Inc. 1988-89
    All rights reserved
    
*/
 
 
/* Command codes */
 
#define TCPCreate           30
#define TCPPassiveOpen      31
#define TCPActiveOpen       32
#define TCPSend             34
#define TCPNoCopyRcv        35
#define TCPRcvBfrReturn     36
#define TCPRcv              37
#define TCPClose            38
#define TCPAbort            39
#define TCPStatus           40
#define TCPExtendedStat     41
#define TCPRelease          42
#define TCPGlobalInfo       43
#define TCPCtlMax           49
 
typedef enum TCPEventCode {
    TCPClosing = 1,
    TCPULPTimeout,
    TCPTerminate,
    TCPDataArrival,
    TCPUrgent,
    TCPICMPReceived,
    lastEvent = 65535
};
 
typedef enum TCPTerminationReason {
    TCPRemoteAbort = 2,
    TCPNetworkFailure,
    TCPSecPrecMismatch,
    TCPULPTimeoutTerminate,
    TCPULPAbort,
    TCPULPClose,
    TCPServiceError,
    lastReason = 65535
}; 
 
typedef pascal void (*TCPNotifyProc) (
        StreamPtr tcpStream,
        unsigned short eventCode,
        Ptr userDataPtr,
        unsigned short terminReason,
        struct ICMPReport *icmpMsg);
 
typedef void (*TCPIOCompletionProc) (struct TCPiopb *iopb);
 
typedef unsigned short tcp_port;
 
typedef unsigned char byte;
 
enum {                  /* ValidityFlags */
    timeoutValue = 0x80,
    timeoutAction = 0x40,
    typeOfService = 0x20,
    precedence = 0x10
};
 
enum {                  /* TOSFlags */
    lowDelay = 0x01,
    throughPut = 0x02,
    reliability = 0x04
};
 
typedef struct TCPCreatePB {
    Ptr         rcvBuff;
    unsigned long rcvBuffLen;
    TCPNotifyProc   notifyProc;
    Ptr         userDataPtr;
}TCPCreatePB;
 
typedef struct TCPOpenPB {
    byte ulpTimeoutValue;
    byte ulpTimeoutAction;
    byte validityFlags;
    byte commandTimeoutValue;
    ip_addr remoteHost;
    tcp_port remotePort;
    ip_addr localHost;
    tcp_port localPort;
    byte tosFlags;
    byte precedence;
    Boolean dontFrag;
    byte timeToLive;
    byte security;
    byte optionCnt;
    byte options[40];
    Ptr userDataPtr;
}TCPOpenPB;
    
typedef struct TCPSendPB {
    byte ulpTimeoutValue;
    byte ulpTimeoutAction;
    byte validityFlags;
    Boolean pushFlag;
    Boolean urgentFlag;
    Ptr wdsPtr;
    unsigned long sendFree;
    unsigned short sendLength;
    Ptr userDataPtr;
}TCPSendPB;
    
 
typedef struct TCPReceivePB {       /* for receive and return rcv buff calls */
    byte commandTimeoutValue;
    byte filler;
    Boolean markFlag;
    Boolean urgentFlag;
    Ptr rcvBuff;
    unsigned short rcvBuffLen;
    Ptr rdsPtr;
    unsigned short rdsLength;
    unsigned short secondTimeStamp;
    Ptr userDataPtr;
}TCPReceivePB;
    
typedef struct TCPClosePB {
    byte ulpTimeoutValue;
    byte ulpTimeoutAction;
    byte validityFlags;
    Ptr userDataPtr;
}TCPClosePB;
    
typedef struct HistoBucket {
    unsigned short value;
    unsigned long counter;
};
    
#define NumOfHistoBuckets   7
 
typedef struct TCPConnectionStats {
    unsigned long dataPktsRcvd;
    unsigned long dataPktsSent;
    unsigned long dataPktsResent;
    unsigned long bytesRcvd;
    unsigned long bytesRcvdDup;
    unsigned long bytesRcvdPastWindow;
    unsigned long  bytesSent;
    unsigned long bytesResent;
    unsigned short numHistoBuckets;
    struct HistoBucket sentSizeHisto[NumOfHistoBuckets];
    unsigned short lastRTT;
    unsigned short tmrSRTT;
    unsigned short rttVariance;
    unsigned short tmrRTO;
    byte sendTries;
    byte sourchQuenchRcvd;
}TCPConnectionStats;
    
typedef struct TCPStatusPB {
    byte ulpTimeoutValue;
    byte ulpTimeoutAction;
    long unused;
    ip_addr remoteHost;
    tcp_port remotePort;
    ip_addr localHost;
    tcp_port localPort;
    byte tosFlags;
    byte precedence;
    byte connectionState;
    unsigned short sendWindow;
    unsigned short rcvWindow;
    unsigned short amtUnackedData;
    unsigned short amtUnreadData;
    Ptr securityLevelPtr;
        /* HEMS-HEMP stats */
    unsigned long sendUnacked;
    unsigned long sendNext;
    unsigned long congestionWindow;
    unsigned long rcvNext;
    unsigned long srtt;
    unsigned long lastRTT;
    unsigned long sendMaxSegSize;
    struct TCPConnectionStats *connStatPtr;
    Ptr userDataPtr;
}TCPStatusPB;
    
typedef struct TCPAbortPB {
    Ptr userDataPtr;
}TCPAbortPB;
    
typedef struct TCPParam {
    unsigned long tcpRtoA;
    unsigned long tcpRtoMin;
    unsigned long tcpRtoMax;
    unsigned long tcpMaxSegSize;
    unsigned long tcpMaxConn;
    unsigned long tcpMaxWindow;
}TCPParam;
 
typedef struct TCPStats {
    unsigned long tcpConnAttempts;
    unsigned long tcpConnOpened;
    unsigned long tcpConnAccepted;
    unsigned long tcpConnClosed;
    unsigned long tcpConnAborted;
    unsigned long tcpOctetsIn;
    unsigned long tcpOctetsOut;
    unsigned long tcpOctetsInDup;
    unsigned long tcpOctetsRetrans;
    unsigned long tcpInputPkts;
    unsigned long tcpOutputPkts;
    unsigned long tcpDupPkts;
    unsigned long tcpRetransPkts;
}TCPStats;
    
typedef struct TCPGlobalInfoPB {
    struct TCPParam *tcpParamPtr;
    struct TCPStats *tcpStatsPtr;
    unsigned long *tcpCDBTable;
    Ptr userDataPtr;
}TCPGlobalInfoPB;
    
typedef struct TCPiopb {
    char                fill12[12];
    TCPIOCompletionProc ioCompletion;
    short               ioResult;
    char                *ioNamePtr;     
    short               ioVRefNum;      
    short               ioCRefNum;          
    short               csCode;
    StreamPtr           tcpStream;              
    union {
        struct TCPCreatePB create;
        struct TCPOpenPB open;
        struct TCPSendPB send;
        struct TCPReceivePB receive;
        struct TCPClosePB close;
        struct TCPAbortPB abort;
        struct TCPStatusPB status;
        struct TCPGlobalInfoPB globalInfo;
        } csParam;
}TCPiopb;