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