diff --git a/src/add-ons/kernel/network/interfaces/ppp/PPPManager.cpp b/src/add-ons/kernel/network/interfaces/ppp/PPPManager.cpp index 085c86080b..344f5fd7fd 100644 --- a/src/add-ons/kernel/network/interfaces/ppp/PPPManager.cpp +++ b/src/add-ons/kernel/network/interfaces/ppp/PPPManager.cpp @@ -419,12 +419,11 @@ PPPManager::Control(uint32 op, void *data, size_t length) return B_ERROR; char name[B_PATH_NAME_LENGTH]; - strcpy(name, PPP_MODULES_PATH); - strcat(name, args->name); + sprintf(name, "%s/%s", PPP_MODULES_PATH, args->name); ppp_module_info *module; if(get_module(name, (module_info**) &module) != B_OK || !module->control) - return B_ERROR; + return B_NAME_NOT_FOUND; return module->control(args->op, args->data, args->length); } break; diff --git a/src/add-ons/kernel/network/ppp/TODO b/src/add-ons/kernel/network/ppp/TODO index d855e79582..6692dde934 100644 --- a/src/add-ons/kernel/network/ppp/TODO +++ b/src/add-ons/kernel/network/ppp/TODO @@ -1,3 +1,3 @@ - add CHAP - add ISDN (CAPI) -- add PPP over TCP/IP (this is a virtual device that uses TCP/IP to connect to some other PPP server on the net) +- add PPTP (this is a virtual device that uses TCP/IP to connect to some other PPP server on the net) diff --git a/src/add-ons/kernel/network/ppp/modem/Modem.h b/src/add-ons/kernel/network/ppp/modem/Modem.h index 977da7a626..e9d4c0b8c7 100644 --- a/src/add-ons/kernel/network/ppp/modem/Modem.h +++ b/src/add-ons/kernel/network/ppp/modem/Modem.h @@ -37,7 +37,7 @@ extern struct core_module_info *core; #if DEBUG // defined in ModemDevice.cpp -void dump_packet(struct mbuf *packet); +extern void dump_packet(struct mbuf *packet); #endif // DEBUG diff --git a/src/add-ons/kernel/network/ppp/pppoe/PPPoE.h b/src/add-ons/kernel/network/ppp/pppoe/PPPoE.h index 2637e60e13..ef1095add0 100644 --- a/src/add-ons/kernel/network/ppp/pppoe/PPPoE.h +++ b/src/add-ons/kernel/network/ppp/pppoe/PPPoE.h @@ -29,7 +29,7 @@ class PPPoEDevice; #define PPPoE_VERSION 0x1 #define PPPoE_TYPE 0x1 -#define PPPoE_INTERFACE_KEY "interface" +#define PPPoE_INTERFACE_KEY "Interface" #define PPPoE_AC_NAME_KEY "ACName" #define PPPoE_SERVICE_NAME_KEY "ServiceName" @@ -62,14 +62,14 @@ typedef struct complete_pppoe_header { // defined in pppoe.cpp -ifnet *FindPPPoEInterface(const char *name); -uint32 NewHostUniq(); -void add_device(PPPoEDevice *device); -void remove_device(PPPoEDevice *device); +extern ifnet *FindPPPoEInterface(const char *name); +extern uint32 NewHostUniq(); +extern void add_device(PPPoEDevice *device); +extern void remove_device(PPPoEDevice *device); #if DEBUG // defined in PPPoEDevice.cpp -void dump_packet(struct mbuf *packet); +extern void dump_packet(struct mbuf *packet); #endif // DEBUG diff --git a/src/add-ons/kernel/network/ppp/pppoe/TODO b/src/add-ons/kernel/network/ppp/pppoe/TODO index 78891b1e18..af32d27e88 100644 --- a/src/add-ons/kernel/network/ppp/pppoe/TODO +++ b/src/add-ons/kernel/network/ppp/pppoe/TODO @@ -1,2 +1,3 @@ - add support for server mode -- add service-query support (for userland preflet) +- test service-query feature +- test if AC and Service settings specifications are handled correctly diff --git a/src/add-ons/kernel/network/ppp/pppoe/pppoe.cpp b/src/add-ons/kernel/network/ppp/pppoe/pppoe.cpp index 071bc7405a..0484908026 100644 --- a/src/add-ons/kernel/network/ppp/pppoe/pppoe.cpp +++ b/src/add-ons/kernel/network/ppp/pppoe/pppoe.cpp @@ -243,12 +243,13 @@ control(uint32 op, void *data, size_t length) ifnet *current = get_interfaces(); for(; current; current = current->if_next) { - if(current->if_type == IFT_ETHER && current->name) { - if(position + strlen(current->name) + 1 > length) + if(current->if_type == IFT_ETHER && current->if_name) { + if(position + strlen(current->if_name) + 1 > length) return B_NO_MEMORY; - strcpy(names + position, current->name); - position += strlen(current->name) + 1; + strcpy(names + position, current->if_name); + position += strlen(current->if_name); + names[position++] = 0; ++count; } } diff --git a/src/add-ons/kernel/network/ppp/shared/libppp/PPPManager.cpp b/src/add-ons/kernel/network/ppp/shared/libppp/PPPManager.cpp index c7a2964cde..f456fa724c 100644 --- a/src/add-ons/kernel/network/ppp/shared/libppp/PPPManager.cpp +++ b/src/add-ons/kernel/network/ppp/shared/libppp/PPPManager.cpp @@ -55,6 +55,22 @@ PPPManager::Control(uint32 op, void *data, size_t length) const } +status_t +PPPManager::ControlModule(const char *name, uint32 op, void *data, + size_t length) const +{ + if(!name) + return B_ERROR; + + control_net_module_args args; + args.name = name; + args.op = op; + args.data = data; + args.length = length; + return Control(PPPC_CONTROL_MODULE, &args, sizeof(args)); +} + + ppp_interface_id PPPManager::CreateInterface(const driver_settings *settings, const driver_settings *profile = NULL) const diff --git a/src/add-ons/kernel/network/ppp/shared/libppp/headers/PPPManager.h b/src/add-ons/kernel/network/ppp/shared/libppp/headers/PPPManager.h index 3209fabfe6..99b58b36b6 100644 --- a/src/add-ons/kernel/network/ppp/shared/libppp/headers/PPPManager.h +++ b/src/add-ons/kernel/network/ppp/shared/libppp/headers/PPPManager.h @@ -24,6 +24,8 @@ class PPPManager { status_t InitCheck() const; status_t Control(uint32 op, void *data, size_t length) const; + status_t ControlModule(const char *name, uint32 op, void *data, + size_t length) const; ppp_interface_id CreateInterface(const driver_settings *settings, const driver_settings *profile = NULL) const;