xref: /haiku/src/add-ons/kernel/network/ppp/pap/pap.cpp (revision 385ee03ba83b7a40d315e17b03031b3ca37820c0)
1 /*
2  * Copyright 2003-2004, Waldemar Kornewald <wkornew@gmx.net>
3  * Distributed under the terms of the MIT License.
4  */
5 
6 #include <KernelExport.h>
7 #include <driver_settings.h>
8 
9 #include <net_buffer.h>
10 #include <net_stack.h>
11 
12 #include <KPPPInterface.h>
13 #include <KPPPModule.h>
14 
15 #include "Protocol.h"
16 
17 #define PAP_MODULE_NAME		NETWORK_MODULES_ROOT "/ppp/pap"
18 
19 net_stack_module_info *gStackModule = NULL;
20 net_buffer_module_info *gBufferModule = NULL;
21 status_t std_ops(int32 op, ...);
22 
23 static bool
24 add_to(KPPPInterface& mainInterface, KPPPInterface *subInterface,
25 	driver_parameter *settings, ppp_module_key_type type)
26 {
27 	if (type != PPP_AUTHENTICATOR_KEY_TYPE)
28 		return B_ERROR;
29 
30 	PAP *pap;
31 	bool success;
32 	if (subInterface) {
33 		pap = new PAP(*subInterface, settings);
34 		success = subInterface->AddProtocol(pap);
35 	} else {
36 		pap = new PAP(mainInterface, settings);
37 		success = mainInterface.AddProtocol(pap);
38 	}
39 
40 	TRACE("PAP: add_to(): %s\n",
41 		success && pap && pap->InitCheck() == B_OK ? "OK" : "ERROR");
42 
43 	return success && pap && pap->InitCheck() == B_OK;
44 }
45 
46 
47 static ppp_module_info pap_module = {
48 	{
49 		PAP_MODULE_NAME,
50 		0,
51 		std_ops
52 	},
53 	NULL,
54 	add_to
55 };
56 
57 
58 _EXPORT
59 status_t
60 std_ops(int32 op, ...)
61 {
62 	switch (op) {
63 		case B_MODULE_INIT:
64 			if (get_module(NET_STACK_MODULE_NAME, (module_info**) &gStackModule) != B_OK)
65 				return B_ERROR;
66 			if (get_module(NET_BUFFER_MODULE_NAME,
67 				(module_info **)&gBufferModule) != B_OK) {
68 				put_module(NET_STACK_MODULE_NAME);
69 				return B_ERROR;
70 			}
71 		return B_OK;
72 
73 		case B_MODULE_UNINIT:
74 			put_module(NET_BUFFER_MODULE_NAME);
75 			put_module(NET_STACK_MODULE_NAME);
76 		break;
77 
78 		default:
79 			return B_ERROR;
80 	}
81 
82 	return B_OK;
83 }
84 
85 
86 _EXPORT
87 module_info *modules[] = {
88 	(module_info*) &pap_module,
89 	NULL
90 };
91