1    | /*
2    |  * Layer Two Tunnelling Protocol Daemon
3    |  * Copyright (C) 1998 Adtran, Inc.
4    |  *
5    |  * Mark Spencer
6    |  *
7    |  * This software is distributed under the terms
8    |  * of the GPL, which you should have received
9    |  * along with this source.
10   |  *
11   |  * Handle a call as a separate thread (header file)
12   |  */
13   | #include <sys/time.h>
14   | #include "misc.h"
15   | #include "common.h"
16   | 
17   | #define CALL_CACHE_SIZE 256
18   | 
19   | struct call
20   | {
21   | /*	int rbit;		Set the "R" bit on the next packet? */
22   |     int lbit;			/* Should we send length field? */
23   | /*	int throttle;	Throttle the connection? */
24   |     int seq_reqd;		/* Sequencing required? */
25   |     int tx_pkts;		/* Transmitted packets */
26   |     int rx_pkts;		/* Received packets */
27   |     int tx_bytes;		/* transmitted bytes */
28   |     int rx_bytes;		/* received bytes */
29   |     struct schedule_entry *zlb_xmit;
30   |     /* Scheduled ZLB transmission */
31   | /*	struct schedule_entry *dethrottle; */
32   |     /* Scheduled dethrottling (overrun) */
33   | /*	int timeout;	Has our timeout expired? If so, we'll go ahead
34   | 					 and transmit, full window or not, and set the
35   | 					 R-bit on this packet.  */
36   |     int prx;			/* What was the last packet we sent
37   | 				   as an Nr? Used to manage payload ZLB's */
38   |     int state;			/* Current state */
39   |     int frame;			/* Framing being used */
40   |     struct call *next;		/* Next call, for linking */
41   |     int debug;
42   |     int msgtype;		/* What kind of message are we
43   | 				   working with right now? */
44   | 
45   |     int ourcid;			/* Our call number */
46   |     int cid;			/* Their call number */
47   |     int qcid;			/* Quitting CID */
48   |     int bearer;			/* Bearer type of call */
49   |     unsigned int serno;		/* Call serial number */
50   |     unsigned int addr;		/* Address reserved for this call */
51   |     int txspeed;		/* Transmit speed */
52   |     int rxspeed;		/* Receive speed */
53   |     int ppd;			/* Packet processing delay (of peer) */
54   |     int physchan;		/* Physical channel ID */
55   |     char dialed[MAXSTRLEN];	/* Number dialed for call */
56   |     char dialing[MAXSTRLEN];	/* Original caller ID */
57   |     char subaddy[MAXSTRLEN];	/* Sub address */
58   | 
59   |     int needclose;		/* Do we need to close this call? */
60   |     int closing;		/* Are we actually in the process of closing? */
61   |     /*
62   |        needclose            closing         state
63   |        =========            =======         =====
64   |        0                       0            Running
65   |        1                       0            Send Closing notice
66   |        1                       1            Waiting for closing notice
67   |        0                       1            Closing ZLB received, actulaly close
68   |      */
69   |     struct tunnel *container;	/* Tunnel we belong to */
70   |     int fd;			/* File descriptor for pty */
71   |     struct termios *oldptyconf;
72   |     int die;
73   |     int nego;			/* Show negotiation? */
74   |     int pppd;			/* PID of pppd */
75   |     int result;			/* Result code */
76   |     int error;			/* Error code */
77   |     int fbit;			/* Use sequence numbers? */
78   |     int ourfbit;		/* Do we want sequence numbers? */
79   | /*	int ourrws;		Our RWS for the call */
80   |     int cnu;			/* Do we need to send updated Ns, Nr values? */
81   |     int pnu;			/* ditto for payload packet */
82   |     char errormsg[MAXSTRLEN];	/* Error message */
83   | /*	int rws;		Receive window size, or -1 for none */
84   |     struct timeval lastsent;	/* When did we last send something? */
85   |     _u16 pSs;			/* Sequence for next payload packet */
86   |     _u16 pSr;			/* Sequence for next received payload packet */
87   |     _u16 closeSs;		/* What number was in Ns when we started to close? */
88   |     int pLr;			/* Last packet received by peer */
89   |     struct lns *lns;		/* LNS that owns us */
90   |     struct lac *lac;		/* LAC that owns us */
91   |     char dial_no[128];		/* jz: dialing number for outgoing call */
92   | };
93   | 
94   | 
95   | extern void push_handler (int);
96   | extern void toss (struct buffer *);
97   | extern struct call *get_call (int, int, unsigned int, int);
98   | extern struct call *get_tunnel (int, unsigned int, int);
99   | extern void destroy_call (struct call *);
100  | extern struct call *new_call (struct tunnel *);
101  | extern void set_error (struct call *, int, const char *, ...);
102  | void *call_thread_init (void *);
103  | void call_close (struct call *);