summaryrefslogtreecommitdiff
path: root/accel-pptpd/ppp.h
blob: e640229f8c917f9468d76415a3b8fc51a36d0432 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#ifndef PPP_H
#define PPP_H

#include <sys/types.h>
#include "ppp_fsm.h"

/*
 * Packet header = Code, id, length.
 */
#define PPP_HEADERLEN	4
#define PPP_MTU 1500

/*
 * Timeouts.
 */
#define DEFTIMEOUT	3	/* Timeout time in seconds */
#define DEFMAXTERMREQS	2	/* Maximum Terminate-Request transmissions */
#define DEFMAXCONFREQS	10	/* Maximum Configure-Request transmissions */
#define DEFMAXNAKLOOPS	5	/* Maximum number of nak loops */

/*
 * Protocol field values.
 */
#define PPP_IP		0x21	/* Internet Protocol */
#define PPP_AT		0x29	/* AppleTalk Protocol */
#define PPP_IPX		0x2b	/* IPX protocol */
#define	PPP_VJC_COMP	0x2d	/* VJ compressed TCP */
#define	PPP_VJC_UNCOMP	0x2f	/* VJ uncompressed TCP */
#define PPP_IPV6	0x57	/* Internet Protocol Version 6 */
#define PPP_COMP	0xfd	/* compressed packet */
#define PPP_IPCP	0x8021	/* IP Control Protocol */
#define PPP_ATCP	0x8029	/* AppleTalk Control Protocol */
#define PPP_IPXCP	0x802b	/* IPX Control Protocol */
#define PPP_IPV6CP	0x8057	/* IPv6 Control Protocol */
#define PPP_CCP		0x80fd	/* Compression Control Protocol */
#define PPP_ECP		0x8053	/* Encryption Control Protocol */
#define PPP_LCP		0xc021	/* Link Control Protocol */
#define PPP_PAP		0xc023	/* Password Authentication Protocol */
#define PPP_LQR		0xc025	/* Link Quality Report protocol */
#define PPP_CHAP	0xc223	/* Cryptographic Handshake Auth. Protocol */
#define PPP_CBCP	0xc029	/* Callback Control Protocol */
#define PPP_EAP		0xc227	/* Extensible Authentication Protocol */


struct ppp_t
{
	struct triton_md_handler_t *h;
	int fd;
	int chan_fd;
	int unit_fd;

	int chan_idx;
	int unit_idx;

	char *chan_name;

	int mtu,mru;
	int require_mppe:1;
	int require_pap:1;
	int require_chap:1;
	int require_mschap:1;
	int require_mschap_v2:1;

	int allow_mppe:1;
	int allow_pap:1;
	int allow_chap:1;
	int allow_mschap:1;
	int allow_mschap_v2:1;
	
	int log:1;

	void *out_buf;
	int out_buf_size;
	int out_buf_pos;

	void *in_buf;
	int in_buf_size;

	struct ppp_layer_t *lcp_layer;
	struct list_head layers;
};

struct ppp_fsm_handler_t
{
	void (*reset_conf)(struct ppp_t *ppp);		/* Reset our Configuration Information */
	int  (*conf_length)(struct ppp_t *ppp);		/* Length of our Configuration Information */
	void (*add_conf)(struct ppp_t *ppp, unsigned char *, int *); 		/* Add our Configuration Information */
	int  (*ack_conf)(struct ppp_t *ppp, unsigned char *,int);		/* ACK our Configuration Information */
	int  (*nak_conf)(struct ppp_t *ppp, unsigned char *,int,int);		/* NAK our Configuration Information */
	int  (*rej_conf)(struct ppp_t *ppp, unsigned char *,int);		/* Reject our Configuration Information */
	int  (*req_conf)(struct ppp_t *ppp, unsigned char *,int *,int);		/* Request peer's Configuration Information */
	void (*opened)(struct ppp_t *ppp);			/* Called when fsm reaches OPENED state */
	void (*down)(struct ppp_t *ppp);		/* Called when fsm leaves OPENED state */
	void (*starting)(struct ppp_t *ppp);		/* Called when we want the lower layer */
	void (*finished)(struct ppp_t *ppp);		/* Called when we don't want the lower layer */
	void (*protreject)(struct ppp_t *ppp,int);		/* Called when Protocol-Reject received */
	void (*retransmit)(struct ppp_t *ppp);		/* Retransmission is necessary */
	int  (*extcode)(struct ppp_t *ppp, int, int, unsigned char *, int);		/* Called when unknown code received */
	char *proto_name;		/* String name for protocol (for messages) */
};

struct ppp_hdr_t
{
	u_int8_t code;
	u_int8_t id;
	u_int16_t len;
	u_int8_t data[100];
}__attribute__((packed));

struct ppp_opt_t
{
	u_int8_t type;
	u_int16_t len;
	u_int8_t data[100];
}__attribute__((packed));

struct ppp_t *alloc_ppp(void);
int establish_ppp(struct ppp_t *ppp);
int ppp_send(struct ppp_t *ppp, void *data, int size);

void ppp_init(void);

struct ppp_layer_t* ppp_lcp_init(struct ppp_t *ppp);

#endif