xref: /haiku/src/add-ons/kernel/network/ppp/shared/libkernelppp/headers/KPPPLCPExtension.h (revision 83b1a68c52ba3e0e8796282759f694b7fdddf06d)
1 /*
2  * Copyright 2003-2005, Haiku Inc.
3  * Distributed under the terms of the MIT License.
4  */
5 
6 #ifndef __K_PPP_LCP_EXTENSION__H
7 #define __K_PPP_LCP_EXTENSION__H
8 
9 #include <KPPPDefs.h>
10 
11 #ifndef _K_PPP_INTERFACE__H
12 #include <KPPPInterface.h>
13 #endif
14 
15 
16 class KPPPLCPExtension {
17 	protected:
18 		// KPPPLCPExtension must be subclassed
19 		KPPPLCPExtension(const char *name, uint8 code, KPPPInterface& interface,
20 			driver_parameter *settings);
21 
22 	public:
23 		virtual ~KPPPLCPExtension();
24 
25 		virtual status_t InitCheck() const;
26 
27 		//!	Returns the name of this LCP extension.
28 		const char *Name() const
29 			{ return fName; }
30 
31 		//!	Returns the owning interface.
32 		KPPPInterface& Interface() const
33 			{ return fInterface; }
34 		//!	Returns the LCP extension's settings.
35 		driver_parameter *Settings() const
36 			{ return fSettings; }
37 
38 		//!	Enables or disables this extension.
39 		void SetEnabled(bool enabled = true)
40 			{ fEnabled = enabled; }
41 		//!	Returns if the extension is enabled.
42 		bool IsEnabled() const
43 			{ return fEnabled; }
44 
45 		//!	Returns the LCP packet code this extension can handle.
46 		uint8 Code() const
47 			{ return fCode; }
48 
49 		virtual status_t Control(uint32 op, void *data, size_t length);
50 		virtual status_t StackControl(uint32 op, void *data);
51 			// called by netstack (forwarded by KPPPInterface)
52 
53 		//!	Must be overridden. Called when an LCP packet with your code is received.
54 		virtual status_t Receive(struct mbuf *packet, uint8 code) = 0;
55 
56 		virtual void Reset();
57 		virtual void Pulse();
58 
59 	protected:
60 		status_t fInitStatus;
61 
62 	private:
63 		char *fName;
64 		KPPPInterface& fInterface;
65 		driver_parameter *fSettings;
66 		uint8 fCode;
67 
68 		bool fEnabled;
69 };
70 
71 
72 #endif
73