1/*
2 * Copyright 2003-2005, Haiku Inc.
3 * Distributed under the terms of the MIT License.
4 */
5
6#ifndef _PPP_DEFS__H
7#define _PPP_DEFS__H
8
9#include <SupportDefs.h>
10
11#include <directories.h>
12
13
14typedef uint32 ppp_interface_id;
15
16
17// settings keys
18#define PPP_USERNAME_KEY					"Username"
19#define PPP_PASSWORD_KEY					"Password"
20#define PPP_ASK_BEFORE_CONNECTING_KEY		"AskBeforeConnecting"
21#define PPP_DISONNECT_AFTER_IDLE_SINCE_KEY	"DisonnectAfterIdleSince"
22#define PPP_MODE_KEY						"Mode"
23#define PPP_CONNECT_RETRIES_LIMIT_KEY		"ConnectRetriesLimit"
24#define PPP_CONNECT_RETRY_DELAY_KEY			"ConnectRetryDelay"
25#define PPP_AUTO_RECONNECT_KEY				"AutoReconnect"
26#define PPP_RECONNECT_DELAY_KEY				"ReconnectDelay"
27#define PPP_LOAD_MODULE_KEY					"LoadModule"
28#define PPP_PROTOCOL_KEY					"Protocol"
29#define PPP_DEVICE_KEY						"Device"
30#define PPP_AUTHENTICATOR_KEY				"Authenticator"
31#define PPP_MULTILINK_KEY					"Multilink-Protocol"
32
33// settings values
34#define PPP_CLIENT_MODE_VALUE				"Client"
35#define PPP_SERVER_MODE_VALUE				"Server"
36
37// path defines
38#define NETWORK_MODULES_ROOT "network"
39#define PPP_MODULES_PATH			NETWORK_MODULES_ROOT "/ppp"
40#define PTP_INTERFACE_SETTINGS_PATH	\
41	kUserSettingsDirectory "/kernel/drivers/ptpnet"
42		// TODO: should be: /etc/ptpnet
43#define PTP_SETTINGS_PATH \
44	kUserSettingsDirectory "/kernel/drivers/ptpnet.settings"
45		// TODO: should be: /etc/ptpnet.settings
46
47// built-in protocols
48#define PPP_LCP_PROTOCOL					0xC021
49
50
51#define PPP_ERROR_BASE						B_ERRORS_END + 1
52
53
54// this is used when talking to the interface manager
55enum ppp_interface_filter {
56	PPP_ALL_INTERFACES,
57	PPP_REGISTERED_INTERFACES,
58	PPP_UNREGISTERED_INTERFACES
59};
60
61// return values for Send()/Receive() methods in addition to B_ERROR and B_OK
62// PPP_UNHANDLED is also used by KPPPOptionHandler
63enum ppp_return_values {
64	// B_ERROR means that the packet is corrupted
65	// B_OK means the packet was handled correctly
66
67	// return values for KPPPProtocol
68	PPP_UNHANDLED = PPP_ERROR_BASE,
69		// The packet does not belong to this protocol.
70		// Do not delete the packet when you return this!
71
72	// return values of KPPPInterface::Receive()
73	PPP_DISCARDED,
74		// packet was silently discarded
75	PPP_REJECTED,
76		// a protocol-reject was sent
77
78	PPP_NO_CONNECTION
79		// could not send a packet because device is not connected
80};
81
82//!	PFC options. Should be set by KPPPDevice.
83enum ppp_pfc_options {
84	PPP_REQUEST_PFC = 0x01,
85		//!< Try requesting PFC (does not fail if not successful).
86	PPP_ALLOW_PFC = 0x02,
87		//!< Allow PFC if other side requests it.
88	PPP_FORCE_PFC_REQUEST = 0x04,
89		//!< If PFC request fails the connection attempt will terminate.
90	PPP_FREEZE_PFC_OPTIONS = 0x80
91		//!< Options cannot be changed if this flag is set (mainly used by KPPPDevice).
92};
93
94//!	PFC state constants.
95enum ppp_pfc_state {
96	PPP_PFC_DISABLED,
97		//!< PFC is disabled.
98	PPP_PFC_ACCEPTED,
99		//!< PFC was accepted by other side.
100	PPP_PFC_REJECTED
101		//!< PFC was rejected by other side. Not used for peer state.
102};
103
104//!	Protocol flags.
105enum ppp_protocol_flags {
106	PPP_NO_FLAGS = 0x00,
107		//!< No flags.
108	PPP_ALWAYS_ALLOWED = 0x01,
109		//!< Protocol may send/receive in Phase() >= PPP_ESTABLISHMENT_PHASE.
110		// But only LCP is allowed in State() != PPP_OPENED_STATE!
111	PPP_NOT_IMPORTANT = 0x02,
112		//!< If this protocol fails to go up we do not disconnect.
113
114	/*!	\brief This protocol includes the corresponding NCP protocol (e.g.: IPCP + IP).
115
116		All protocol values will also be checked against Protocol() & 0x7FFF.
117	*/
118	PPP_INCLUDES_NCP = 0x04
119};
120
121// phase when the protocol is brought up
122enum ppp_phase {
123	// the following may be used by protocols
124	PPP_AUTHENTICATION_PHASE = 15,
125	PPP_NCP_PHASE = 20,
126	PPP_ESTABLISHED_PHASE = 25,
127		// only use PPP_ESTABLISHED_PHASE if
128		// you want to activate this protocol after
129		// the normal protocols like IP (i.e., IPCP)
130
131	// the following must not be used by protocols!
132	PPP_DOWN_PHASE = 0,
133	PPP_TERMINATION_PHASE = 1,
134		// this is the selected phase when we are GOING down
135	PPP_ESTABLISHMENT_PHASE = 2
136		// in this phase some protocols (with PPP_ALWAYS_ALLOWED
137		// flag set) may be used
138};
139
140// this defines the order in which the packets get encapsulated
141enum ppp_level {
142	PPP_DEVICE_LEVEL = 0,
143	PPP_INTERFACE_LEVEL = 1,
144		// only used by KPPPInterface
145	PPP_MULTILINK_LEVEL = 2,
146	PPP_ENCRYPTION_LEVEL = 5,
147	PPP_COMPRESSION_LEVEL = 10,
148	PPP_PROTOCOL_LEVEL = 1000
149		// highest level possible; use for protocols that do not encapsulate
150};
151
152// we can be a ppp client or a ppp server interface
153enum ppp_mode {
154	PPP_CLIENT_MODE = 0,
155	PPP_SERVER_MODE
156};
157
158// which side the protocol works for
159enum ppp_side {
160	PPP_NO_SIDE,
161	PPP_LOCAL_SIDE,
162	PPP_PEER_SIDE,
163	PPP_BOTH_SIDES
164};
165
166// authentication status
167enum ppp_authentication_status {
168	PPP_AUTHENTICATION_FAILED = -1,
169	PPP_NOT_AUTHENTICATED = 0,
170	PPP_AUTHENTICATION_SUCCESSFUL = 1,
171	PPP_AUTHENTICATING = 0xFF
172};
173
174// PPP states as defined in RFC 1661
175enum ppp_state {
176	PPP_INITIAL_STATE,
177	PPP_STARTING_STATE,
178	PPP_CLOSED_STATE,
179	PPP_STOPPED_STATE,
180	PPP_CLOSING_STATE,
181	PPP_STOPPING_STATE,
182	PPP_REQ_SENT_STATE,
183	PPP_ACK_RCVD_STATE,
184	PPP_ACK_SENT_STATE,
185	PPP_OPENED_STATE
186};
187
188#endif
189