|
|
1.1 root 1: #ifdef XT
2: #ifndef NPCBUFS
3: #include "sys/xtproto.h"
4: #endif
5: #define freepkts outen
6: #define user flags
7: #else XT
8:
9: /*
10: ** Definition of a structure to hold status information
11: ** for a conversation with a channel.
12: */
13:
14: #define NPCBUFS 2 /* Double buffered protocol */
15:
16: struct Pktstate
17: {
18: struct Packet pkt; /* The packet */
19: short timo; /* Timeout count */
20: unsigned char state; /* Protocol state */
21: unsigned char size; /* Packet size */
22: };
23:
24: typedef struct Pktstate *Pks_p;
25:
26: struct Pchannel
27: {
28: struct Pktstate pkts[NPCBUFS]; /* The packets */
29: Pks_p nextpkt; /* Next packet to be acknowledged */
30: unsigned char cdata[SEQMOD]; /* Remember control data */
31: unsigned char rseq; /* Next receive sequence number */
32: unsigned char xseq; /* Next transmit sequence number */
33: char freepkts; /* Number of free buffers */
34: char user; /* Spare byte for users */
35: };
36:
37: typedef struct Pchannel * Pch_p;
38:
39: /** Transmit packet states **/
40:
41: enum pxenum /* required to have name for m32 sgs */ { px_null, px_wait, px_ok };
42:
43: #define PX_NULL (int)px_null /* Empty packet */
44: #define PX_WAIT (int)px_wait /* Packet awaiting acknowledgement */
45: #define PX_OK (int)px_ok /* Packet has been acknowledged */
46:
47: /** Receive packet states **/
48:
49: enum prenum /* required to have name for m32 sgs */ { pr_null, pr_size, pr_data };
50:
51: #define PR_NULL (int)pr_null /* New packet expected */
52: #define PR_SIZE (int)pr_size /* Size byte next */
53: #define PR_DATA (int)pr_data /* Receiving data */
54: #endif XT
55:
56: /*
57: ** Interface routines
58: */
59:
60: extern int psend(); /* Send data to channel */
61: extern void precv(); /* Receive data/control from channel */
62: extern void ptimeout(); /* Catch alarm timeouts */
63: extern int pinit(); /* Initialise conversations */
64:
65: /*
66: ** Pointers to externally declared data and functions
67: */
68:
69: extern struct Pchannel pconvs[]; /* Array of conversations */
70: extern Pch_p pconvsend; /* Pointer to end of pconvs */
71:
72: /*
73: ** Receiver data
74: */
75:
76: extern struct Pktstate precvpkt; /* Current receive packet */
77: extern Pbyte pseqtable[]; /* Table of ordered sequence numbers */
78:
79: #ifdef EBUG
80: /*
81: ** Debugging
82: */
83:
84: #define PDEBUG 1
85: #ifndef PSTATISTICS
86: #define PSTATISTICS 1
87: #endif
88: #ifndef PSTATSDESC
89: #define PSTATSDESC 1
90: #endif
91: #define PKTHIST 40
92: #define PLOGIN 0
93: #define PLOGOUT 1
94:
95: #include <stdio.h>
96:
97: extern FILE * ptracefd;
98: extern void ptracepkt();
99: extern void plogpkt();
100: extern void pdumphist();
101:
102: #define ptrace(A) fprintf(ptracefd,"trace: %s\n",A)
103:
104: #else EBUG
105:
106: #define ptrace(A)
107: #define ptracepkt(A,B)
108: #define plogpkt(A,B)
109: #define pdumphist(A)
110:
111: #endif EBUG
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.