xref: /haiku/src/add-ons/kernel/network/ppp/modem/modem.cpp (revision 1a76488fc88584bf66b9751d7fb9b6527ac20d87)
1 /*
2  * Copyright 2003-2004, Waldemar Kornewald <wkornew@gmx.net>
3  * Distributed under the terms of the MIT License.
4  */
5 
6 
7 #include <KernelExport.h>
8 #include <driver_settings.h>
9 
10 #include <KPPPInterface.h>
11 #include <KPPPModule.h>
12 
13 #include "ModemDevice.h"
14 
15 
16 #define MODEM_MODULE_NAME		NETWORK_MODULES_ROOT "ppp/modem"
17 
18 net_stack_module_info *gStackModule = NULL;
19 net_buffer_module_info *gBufferModule = NULL;
20 status_t std_ops(int32 op, ...);
21 
22 
23 static bool
24 add_to(KPPPInterface& mainInterface, KPPPInterface *subInterface,
25 	driver_parameter *settings, ppp_module_key_type type)
26 {
27 	if (mainInterface.Mode() != PPP_CLIENT_MODE || type != PPP_DEVICE_KEY_TYPE)
28 		return B_ERROR;
29 
30 	ModemDevice *device;
31 	bool success;
32 	if (subInterface) {
33 		device = new ModemDevice(*subInterface, settings);
34 		success = subInterface->SetDevice(device);
35 	} else {
36 		device = new ModemDevice(mainInterface, settings);
37 		success = mainInterface.SetDevice(device);
38 	}
39 
40 	TRACE("Modem: add_to(): %s\n",
41 		success && device && device->InitCheck() == B_OK ? "OK" : "ERROR");
42 
43 	return success && device && device->InitCheck() == B_OK;
44 }
45 
46 
47 static ppp_module_info modem_module = {
48 	{
49 		MODEM_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,
65 					(module_info**)&gStackModule) != B_OK)
66 				return B_ERROR;
67 			if (get_module(NET_BUFFER_MODULE_NAME,
68 					(module_info **)&gBufferModule) != B_OK) {
69 				put_module(NET_STACK_MODULE_NAME);
70 				return B_ERROR;
71 			}
72 		return B_OK;
73 
74 		case B_MODULE_UNINIT:
75 			put_module(NET_BUFFER_MODULE_NAME);
76 			put_module(NET_STACK_MODULE_NAME);
77 		break;
78 
79 		default:
80 			return B_ERROR;
81 	}
82 
83 	return B_OK;
84 }
85 
86 
87 _EXPORT
88 module_info *modules[] = {
89 	(module_info*) &modem_module,
90 	NULL
91 };
92