⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 l2tp.h

📁 第二层隧道模块l2tp源码,开发环境为linux
💻 H
字号:
/* * 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. * * Protocol and implementation information, * structures and constants. *//*typedef unsigned short _u16;typedef unsigned long long _u64; */#ifndef _L2TP_H#define _L2TP_H#define MAXSTRLEN 120           /* Maximum length of common strings */#include <netinet/in.h>#include <termios.h>#include "osport.h"#include "scheduler.h"#include "misc.h"#include "file.h"#include "call.h"#include "avp.h"#include "control.h"#include "aaa.h"#include "common.h"#define CONTROL_PIPE "/var/run/l2tp-control"#define BINARY "l2tpd"#define SERVER_VERSION "0.69"#define VENDOR_NAME "l2tpd.org"#define PPPD		"/usr/sbin/pppd"#define CALL_PPP_OPTS "defaultroute"#define FIRMWARE_REV	0x0690  /* Revision of our firmware (software, in this case) */#define DEF_MAX_TUNNELS 32      /* By default only allow this many                                   tunnels to exist */#define HELLO_DELAY 60          /* How often to send a Hello message */struct control_hdr{    _u16 ver;                   /* Version and more */    _u16 length;                /* Length field */    _u16 tid;                   /* Tunnel ID */    _u16 cid;                   /* Call ID */    _u16 Ns;                    /* Next sent */    _u16 Nr;                    /* Next received */};#define CTBIT(ver) (ver & 0x8000)       /* Determins if control or not */#define CLBIT(ver) (ver & 0x4000)       /* Length bit present.  Must be 1                                           for control messages */#define CZBITS(ver) (ver &0x37F8)       /* Reserved bits:  We must drop                                            anything with these there */#define CFBIT(ver) (ver & 0x0800)       /* Presence of Ns and Nr fields                                           flow bit? */#define CVER(ver) (ver & 0x0007)        /* Version of encapsulation */struct payload_hdr{    _u16 ver;                   /* Version and friends */    _u16 length;                /* Optional Length */    _u16 tid;                   /* Tunnel ID */    _u16 cid;                   /* Caller ID */    _u16 Ns;                    /* Optional next sent */    _u16 Nr;                    /* Optional next received */    _u16 o_size;                /* Optional offset size */    _u16 o_pad;                 /* Optional offset padding */};#define NZL_TIMEOUT_DIVISOR 4   /* Divide TIMEOUT by this and                                   you know how often to send                                   a zero byte packet */#define PAYLOAD_BUF 10          /* Provide 10 expansion bytes                                   so we can "decompress" the                                   payloads and simplify coding */#define DEFAULT_MAX_RETRIES 5   /* Recommended value from spec */#define DEFAULT_RWS_SIZE   4    /* Default max outstanding                                    control packets in queue */#define DEFAULT_TX_BPS		10000000        /* For outgoing calls, report this speed */#define DEFAULT_RX_BPS		10000000#define DEFAULT_MAX_BPS		10000000        /* jz: outgoing calls max bps */#define DEFAULT_MIN_BPS		10000   /* jz: outgoing calls min bps */#define PAYLOAD_FUDGE		2       /* How many packets we're willing to drop */#define MIN_PAYLOAD_HDR_LEN 6#define UDP_LISTEN_PORT  1701                                /* FIXME: MAX_RECV_SIZE, what is it? */#define MAX_RECV_SIZE 4096      /* Biggest packet we'll accept */#define OUR_L2TP_VERSION 0x100  /* We support version 1, revision 0 */#define PTBIT(ver) CTBIT(ver)   /* Type bit:  Must be zero for us */#define PLBIT(ver) CLBIT(ver)   /* Length specified? */#define PFBIT(ver) CFBIT(ver)   /* Flow control specified? */#define PVER(ver) CVER(ver)     /* Version */#define PZBITS(ver) (ver & 0x14F8)      /* Reserved bits */#define PRBIT(ver) (ver & 0x2000)       /* Reset Sr bit */#define PSBIT(ver) (ver & 0x0200)       /* Offset size bit */#define PPBIT(ver) (ver & 0x0100)       /* Preference bit */struct tunnel{    struct call *call_head;     /* Member calls */    struct tunnel *next;        /* Allows us to be linked easily */    int fc;                     /* Framing capabilities of peer */    struct schedule_entry *hello;    int ourfc;                  /* Our framing capabilities */    int bc;                     /* Peer's bearer channels */    int hbit;                   /* Allow hidden AVP's? */    int ourbc;                  /* Our bearer channels */    _u64 tb;                    /* Their tie breaker */    _u64 ourtb;                 /* Our tie breaker */    int tid;                    /* Peer's tunnel identifier */    int ourtid;                 /* Our tunnel identifier */    int qtid;                   /* TID for disconnection */    int firmware;               /* Peer's firmware revision */#if 0    unsigned int addr;          /* Remote address */    unsigned short port;        /* Port on remote end */#else    struct sockaddr_in peer;    /* Peer's Address */#endif    int debug;                  /* Are we debugging or not? */    int nego;                   /* Show Negotiation? */    int count;                  /* How many membmer calls? */    int state;                  /* State of tunnel */    _u16 control_seq_num;       /* Sequence for next packet */    _u16 control_rec_seq_num;   /* Next expected to receive */    int cLr;                    /* Last packet received by peer */    char hostname[MAXSTRLEN];   /* Remote hostname */    char vendor[MAXSTRLEN];     /* Vendor of remote product */    struct challenge chal_us;   /* Their Challenge to us */    struct challenge chal_them; /* Our challenge to them */    char secret[MAXSTRLEN];     /* Secret to use */#ifdef SANITY    int sanity;                 /* check for sanity? */#endif    int rws;                    /* Peer's Receive Window Size */    int ourrws;                 /* Receive Window Size */    struct call *self;    struct lns *lns;            /* LNS that owns us */    struct lac *lac;            /* LAC that owns us */};struct tunnel_list{    struct tunnel *head;    int count;    int calls;};/* Values for version */#define VER_L2TP 2#define VER_PPTP 3/* Some PPP sync<->async stuff */#define fcstab  ppp_crc16_table#define PPP_FLAG 0x7e#define PPP_ESCAPE 0x7d#define PPP_TRANS 0x20#define PPP_INITFCS 0xffff#define PPP_GOODFCS 0xf0b8#define PPP_FCS(fcs,c) (((fcs) >> 8) ^ fcstab[((fcs) ^ (c)) & 0xff])/* Values for Randomness sources */#define RAND_DEV 0x0#define RAND_SYS 0x1#define RAND_EGD 0x2/* Error Values */extern struct tunnel_list tunnels;extern void tunnel_close (struct tunnel *t);extern void network_thread ();extern int init_network ();extern int debug_tunnel;extern int packet_dump;extern int debug_avp;extern int debug_state;extern int max_tunnels;extern int kernel_support;extern int server_socket;extern struct tunnel *new_tunnel ();extern struct packet_queue xmit_udp;extern void destroy_tunnel (struct tunnel *);extern struct buffer *new_payload (struct sockaddr_in);extern void recycle_payload (struct buffer *, struct sockaddr_in);extern void add_payload_hdr (struct tunnel *, struct call *, struct buffer *);extern int read_packet (struct buffer *, int, int);extern void udp_xmit (struct buffer *);extern void control_xmit (void *);extern int ppd;extern int switch_io;           /* jz */extern int control_fd;extern int start_pppd (struct call *c, struct ppp_opts *);extern void magic_lac_dial (void *);extern int get_entropy (char *, int);#ifndef MIN#define MIN(a,b) (((a)<(b)) ? (a) : (b))#endif#endif/*  * This is just some stuff to take * care of kernel definitions */#ifdef USE_KERNEL#include <linux/sockios.h>#ifndef SIOCSETL2TP#warning This kernel source does not have l2tp support#undef USE_KERNEL#else#include <asm/types.h>#include <linux/l2tp.h>#endif#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -