wattcp.h
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C头文件 代码 · 共 509 行 · 第 1/2 页
H
509 行
BYTE flags;
WORD window;
WORD checksum;
WORD urgent;
} tcp_Header;
#define tcp_FlagFIN 0x01
#define tcp_FlagSYN 0x02
#define tcp_FlagRST 0x04
#define tcp_FlagPUSH 0x08
#define tcp_FlagACK 0x10
#define tcp_FlagURG 0x20
#define tcp_FlagMASK 0x3F
/*
* The TCP/UDP Pseudo Header
*/
typedef struct tcp_PseudoHeader {
DWORD src;
DWORD dst;
BYTE mbz;
BYTE protocol;
WORD length;
WORD checksum;
} tcp_PseudoHeader;
/*
* Internet Group Management Protocol Packet
*/
typedef struct IGMP_packet {
int type : 4;
int version : 4;
BYTE mbz;
WORD checksum;
DWORD address;
} IGMP_packet;
#define IGMP_VERSION 1
#define IGMP_QUERY 1
#define IGMP_REPORT 2
/*
* ARP/RARP headers
*/
typedef struct arp_Header {
WORD hwType;
WORD protType;
BYTE hwAddrLen; /* MAC addr. length (6) */
BYTE protoAddrLen; /* IP addr. length (4) */
WORD opcode;
eth_address srcEthAddr;
DWORD srcIPAddr;
eth_address dstEthAddr;
DWORD dstIPAddr;
} arp_Header;
#define rarp_Header arp_Header
/*
* ARP definitions
*/
#define ARP_REQUEST 0x0100 /* ARP/RARP op codes, Request */
#define ARP_REPLY 0x0200 /* Reply */
#define RARP_REQUEST 0x0300
#define RARP_REPLY 0x0400
#define ARP_MAX (sizeof(eth_Header) + sizeof(arp_Header))
#include <sys/packoff.h> /* restore default packing */
/*
* TCP states, from tcp specification RFC-793.
* Note: close-wait state is bypassed by automatically closing a connection
* when a FIN is received. This is easy to undo.
*/
#define tcp_StateLISTEN 0 /* listening for connection */
#define tcp_StateSYNSENT 1 /* SYN sent, active open */
#define tcp_StateSYNREC 2 /* SYN received, ACK+SYN sent. */
#define tcp_StateESTAB 3 /* established */
#define tcp_StateESTCL 4 /* established, but will FIN */
#define tcp_StateFINWT1 5 /* sent FIN */
#define tcp_StateFINWT2 6 /* sent FIN, received FINACK */
#define tcp_StateCLOSWT 7 /* received FIN waiting for close */
#define tcp_StateCLOSING 8 /* sent FIN, received FIN (waiting for FINACK) */
#define tcp_StateLASTACK 9 /* FIN received, FINACK+FIN sent */
#define tcp_StateTIMEWT 10 /* dally after sending final FINACK */
#define tcp_StateCLOSED 11 /* FINACK received */
#define tcp_MaxBufSize 2048 /* maximum bytes to buffer on input */
#define udp_MaxBufSize tcp_MaxBufSize
#define tcp_MaxTxBufSize tcp_MaxBufSize /* and on tcp output */
/*
* Fields common to UDP & TCP socket definition.
* Tries to keep members on natural boundaries (words on word-boundary,
* dwords on dword boundary)
*/
#define UDP_TCP_COMMON \
WORD ip_type; /* UDP_PROTO or TCPPROTO */ \
BYTE ttl; /* Time To Live */ \
BYTE fill_1; \
const char *err_msg; /* null when all is ok */ \
void (*usr_yield)(void); /* yield while waiting */ \
sol_upcall sol_callb; /* socket-layer callback (icmp) */ \
BYTE rigid; \
BYTE stress; \
WORD sockmode; /* a logical OR of bits */ \
DWORD usertimer; /* ip_timer_set, ip_timer_timeout */ \
ProtoHandler protoHandler; /* call with incoming data */ \
eth_address hisethaddr; /* peer's ethernet address */ \
WORD fill_2; \
\
DWORD myaddr; /* my ip-address */ \
DWORD hisaddr; /* peer's internet address */ \
WORD hisport; /* peer's source port */ \
WORD myport; /* my source port */ \
WORD locflags; /* local option flags */ \
WORD fill_3; \
\
UINT queuelen; /* optional Tx queue length */ \
const BYTE *queue; \
\
int rdatalen; /* Rx length, must be signed */ \
UINT maxrdatalen; \
BYTE *rdata; /* received data pointer */ \
BYTE rddata[tcp_MaxBufSize+1]; /* received data buffer */ \
DWORD safetysig /* magic marker */
/*
* UDP socket definition
*/
typedef struct udp_Socket {
struct udp_Socket *next;
UDP_TCP_COMMON;
} udp_Socket;
/*
* TCP Socket definition (fields common to udp_Socket must come first)
*/
typedef struct tcp_Socket {
struct tcp_Socket *next; /* link to next tcp-socket */
UDP_TCP_COMMON;
UINT state; /* tcp connection state */
DWORD acknum; /* data ACK'ed */
DWORD seqnum; /* sequence number */
#if defined(USE_DEBUG)
DWORD last_acknum[2]; /* for pcdbug.c; to follow SEQ/ACK */
DWORD last_seqnum[2]; /* increments */
#endif
DWORD timeout; /* timeout, in milliseconds */
BYTE unhappy; /* flag, indicates retransmitting segt's */
BYTE recent; /* 1 if recently transmitted */
WORD flags; /* tcp flags for last packet sent */
UINT window; /* other guy's window */
UINT datalen; /* number of bytes of data to send */
int unacked; /* unacked data, must be signed */
BYTE cwindow; /* Congestion window */
BYTE wwindow; /* Van Jacobson's algorithm */
WORD fill_4;
DWORD vj_sa; /* VJ's alg, standard average (SRTT) */
DWORD vj_sd; /* VJ's alg, standard deviation (RTTVAR) */
DWORD vj_last; /* last transmit time */
UINT rto; /* retransmission timeout */
BYTE karn_count; /* count of packets */
BYTE tos; /* priority */
WORD fill_5;
DWORD rtt_time; /* Round Trip Time value */
DWORD rtt_lasttran; /* RTT at last transmission */
DWORD ts_sent; /* last TimeStamp value sent */
DWORD ts_recent; /* last TimeStamp value received */
DWORD ts_echo; /* last TimeStamp echo received */
UINT max_seg;
DWORD missed_seg[2]; /* S. Lawson - handle one dropped segment */
DWORD inactive_to; /* for the inactive flag */
DWORD datatimer; /* EE 99.08.23, note broken connections */
int sock_delay;
BYTE send_wscale; /* to-do!!: window scales shifts, tx/rx */
BYTE recv_wscale;
BYTE data[tcp_MaxBufSize+1]; /* data for transmission */
DWORD safetytcp; /* extra magic marker */
} tcp_Socket;
/*
* Raw IP socket definition. Only used in BSD-socket API.
*/
typedef struct raw_Socket {
struct raw_Socket *next;
WORD ip_type; /* same ofs as for udp/tcp Socket */
BOOL used; /* used flag; packet not read yet */
struct in_Header ip;
BYTE data [MAX_FRAG_SIZE]; /* room for 1 jumbo IP packet */
} raw_Socket;
/*
* sock_type used for socket I/O
*/
typedef union sock_type {
udp_Socket udp;
tcp_Socket tcp;
raw_Socket raw;
} sock_type;
typedef struct watt_sockaddr {
WORD s_type;
WORD s_port;
DWORD s_ip;
BYTE s_spares[6]; /* unused in TCP realm */
} watt_sockaddr;
/*
* A simple RTT cache based on Phil Karn's KA9Q.
* # of TCP round-trip-time cache entries
*/
#define RTTCACHE 16
struct tcp_rtt {
DWORD ip;
UINT rto;
};
/*
* Stuff for Multicast Support - JRM 6/7/93
*/
#define CLASS_D_MASK 0xE0000000UL /* the mask that defines IP Class D */
#define IPMULTI_MASK 0x007FFFFFUL /* to get the low-order 23 bits */
#define ETH_MULTI 0x01005EUL /* high order bits of multi eth addr */
#define IPMULTI_SIZE 20 /* the size of the ipmulti table */
#define ALL_SYSTEMS 0xE0000001UL /* the default mcast addr 224.0.0.1 */
typedef struct multicast {
DWORD ina; /* IP address of group */
eth_address ethaddr; /* Ethernet address of group */
BYTE processes; /* number of interested processes */
DWORD replytime; /* IGMP query reply timer */
BYTE active; /* is this an active entry */
} multicast;
#endif /* __WATTCP_H */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?