1
0
This repository has been archived on 2024-07-22. You can view files and clone it, but cannot push or open issues or pull requests.
TP-Link_Archer-XR500v/EN7526G_3.18Kernel_SDK/apps/public/xl2tpd/xl2tpd-1.2.4/call.h
2024-07-22 01:58:46 -03:00

109 lines
4.7 KiB
C
Executable File

/*
* Layer Two Tunnelling Protocol Daemon
* Copyright (C) 1998 Adtran, Inc.
* Copyright (C) 2002 Jeff McAdams
*
* Mark Spencer
*
* This software is distributed under the terms
* of the GPL, which you should have received
* along with this source.
*
* Handle a call as a separate thread (header file)
*/
#include <sys/time.h>
#include "misc.h"
#include "common.h"
#include "ipsecmast.h"
#define CALL_CACHE_SIZE 256
struct call
{
/* int rbit; Set the "R" bit on the next packet? */
int lbit; /* Should we send length field? */
/* int throttle; Throttle the connection? */
int seq_reqd; /* Sequencing required? */
int tx_pkts; /* Transmitted packets */
int rx_pkts; /* Received packets */
int tx_bytes; /* transmitted bytes */
int rx_bytes; /* received bytes */
struct schedule_entry *zlb_xmit;
/* Scheduled ZLB transmission */
/* struct schedule_entry *dethrottle; */
/* Scheduled dethrottling (overrun) */
/* int timeout; Has our timeout expired? If so, we'll go ahead
and transmit, full window or not, and set the
R-bit on this packet. */
int prx; /* What was the last packet we sent
as an Nr? Used to manage payload ZLB's */
int state; /* Current state */
int frame; /* Framing being used */
struct call *next; /* Next call, for linking */
int debug;
int msgtype; /* What kind of message are we
working with right now? */
int ourcid; /* Our call number */
int cid; /* Their call number */
int qcid; /* Quitting CID */
int bearer; /* Bearer type of call */
unsigned int serno; /* Call serial number */
unsigned int addr; /* Address reserved for this call */
int txspeed; /* Transmit speed */
int rxspeed; /* Receive speed */
int ppd; /* Packet processing delay (of peer) */
int physchan; /* Physical channel ID */
char dialed[MAXSTRLEN]; /* Number dialed for call */
char dialing[MAXSTRLEN]; /* Original caller ID */
char subaddy[MAXSTRLEN]; /* Sub address */
int needclose; /* Do we need to close this call? */
int closing; /* Are we actually in the process of closing? */
/*
needclose closing state
========= ======= =====
0 0 Running
1 0 Send Closing notice
1 1 Waiting for closing notice
0 1 Closing ZLB received, actulaly close
*/
struct tunnel *container; /* Tunnel we belong to */
int fd; /* File descriptor for pty */
struct termios *oldptyconf;
int die;
int nego; /* Show negotiation? */
int pppd; /* PID of pppd */
int result; /* Result code */
int error; /* Error code */
int fbit; /* Use sequence numbers? */
int ourfbit; /* Do we want sequence numbers? */
/* int ourrws; Our RWS for the call */
int cnu; /* Do we need to send updated Ns, Nr values? */
int pnu; /* ditto for payload packet */
char errormsg[MAXSTRLEN]; /* Error message */
/* int rws; Receive window size, or -1 for none */
struct timeval lastsent; /* When did we last send something? */
_u16 data_seq_num; /* Sequence for next payload packet */
_u16 data_rec_seq_num; /* Sequence for next received payload packet */
_u16 closeSs; /* What number was in Ns when we started to
close? */
int pLr; /* Last packet received by peer */
struct lns *lns; /* LNS that owns us */
struct lac *lac; /* LAC that owns us */
char dial_no[128]; /* jz: dialing number for outgoing call */
};
extern void push_handler (int);
extern void toss (struct buffer *);
extern struct call *get_call (int tunnel, int call, unsigned int addr,
int port,
IPsecSAref_t refme, IPsecSAref_t refhim);
extern struct call *get_tunnel (int, unsigned int, int);
extern void destroy_call (struct call *);
extern struct call *new_call (struct tunnel *);
extern void set_error (struct call *, int, const char *, ...);
void *call_thread_init (void *);
void call_close (struct call *);