diff --git a/src/add-ons/kernel/network/interfaces/ppp/Jamfile b/src/add-ons/kernel/network/interfaces/ppp/Jamfile index 3b2cdd32ac..569c2ee233 100644 --- a/src/add-ons/kernel/network/interfaces/ppp/Jamfile +++ b/src/add-ons/kernel/network/interfaces/ppp/Jamfile @@ -9,10 +9,10 @@ UseHeaders [ FDirName $(OBOS_TOP) src add-ons kernel network ppp shared libkerne R5KernelAddon ppp : kernel network interfaces : ppp.cpp PPPManager.cpp + + : libkernelppp.a ; -LinkSharedOSLibs ppp : libkernelppp.a ; - # Installation OBOSInstall install-networking : /boot/home/config/add-ons/kernel/network/interfaces diff --git a/src/add-ons/kernel/network/ppp/ipcp/Jamfile b/src/add-ons/kernel/network/ppp/ipcp/Jamfile index befef70937..4cae201b14 100644 --- a/src/add-ons/kernel/network/ppp/ipcp/Jamfile +++ b/src/add-ons/kernel/network/ppp/ipcp/Jamfile @@ -9,9 +9,12 @@ UseHeaders [ FDirName $(OBOS_TOP) src add-ons kernel network ppp shared libkerne R5KernelAddon ipcp : kernel network ppp : + inet_addr.c + ipcp.cpp Protocol.cpp - inet_addr.c + + : libkernelppp.a ; SEARCH on [ FGristFiles inet_addr.c ] = [ FDirName $(OBOS_TOP) src kits network libnet ] ; diff --git a/src/add-ons/kernel/network/ppp/ipcp/Protocol.cpp b/src/add-ons/kernel/network/ppp/ipcp/Protocol.cpp index 4538624252..9bf80c492c 100644 --- a/src/add-ons/kernel/network/ppp/ipcp/Protocol.cpp +++ b/src/add-ons/kernel/network/ppp/ipcp/Protocol.cpp @@ -356,7 +356,7 @@ IPCP::ParseSideRequests(driver_parameter *requests, ppp_side side) void IPCP::UpdateAddresses() { - if(!Interface().IsUp() && !Interface().DoesDialOnDemand()) + if(State() != PPP_OPENED_STATE && !Interface().DoesDialOnDemand()) return; in_addr_t netmask; @@ -388,12 +388,8 @@ IPCP::UpdateAddresses() netmask = fLocalRequests.netmask; else if(State() != PPP_OPENED_STATE) netmask = INADDR_BROADCAST; - else if(IN_CLASSA(fLocalConfiguration.address)) - netmask = IN_CLASSA_NET; - else if(IN_CLASSB(fLocalConfiguration.address)) - netmask = IN_CLASSB_NET; else - netmask = IN_CLASSC_NET; + netmask = 0x80000000; inreq.ifra_mask.sin_addr.s_addr = netmask; inreq.ifra_mask.sin_len = sizeof(sockaddr_in); @@ -403,9 +399,13 @@ IPCP::UpdateAddresses() if(in_control(NULL, SIOCSIFDSTADDR, (caddr_t) &ifreqDestination, Interface().Ifnet()) != B_OK) printf("IPCP: UpdateAddress(): SIOCSIFDSTADDR returned error!\n"); - if(in_control(NULL, SIOCSIFNETMASK, (caddr_t) &inreq.ifra_mask, - Interface().Ifnet()) != B_OK) - printf("IPCP: UpdateAddress(): SIOCSIFNETMASK returned error!\n"); + + // the netmask is optional for PPP interfaces + if(fLocalRequests.netmask != INADDR_ANY) { + if(in_control(NULL, SIOCSIFNETMASK, (caddr_t) &inreq.ifra_mask, + Interface().Ifnet()) != B_OK) + printf("IPCP: UpdateAddress(): SIOCSIFNETMASK returned error!\n"); + } } diff --git a/src/add-ons/kernel/network/ppp/modem/Jamfile b/src/add-ons/kernel/network/ppp/modem/Jamfile index ae3ff54da3..b0552c40ca 100644 --- a/src/add-ons/kernel/network/ppp/modem/Jamfile +++ b/src/add-ons/kernel/network/ppp/modem/Jamfile @@ -12,10 +12,10 @@ R5KernelAddon modem : kernel network ppp : modem.cpp ModemDevice.cpp ACFCHandler.cpp + + : libkernelppp.a ; -LinkSharedOSLibs modem : libkernelppp.a ; - # Installation OBOSInstall install-networking : /boot/home/config/add-ons/kernel/network/ppp diff --git a/src/add-ons/kernel/network/ppp/modem/ModemDevice.cpp b/src/add-ons/kernel/network/ppp/modem/ModemDevice.cpp index 88dae0f032..04cfe17b81 100644 --- a/src/add-ons/kernel/network/ppp/modem/ModemDevice.cpp +++ b/src/add-ons/kernel/network/ppp/modem/ModemDevice.cpp @@ -527,5 +527,5 @@ ModemDevice::Receive(struct mbuf *packet, uint16 protocolNumber = 0) return B_ERROR; } - Interface().ReceiveFromDevice(packet); + return Interface().ReceiveFromDevice(packet); } diff --git a/src/add-ons/kernel/network/ppp/pap/Jamfile b/src/add-ons/kernel/network/ppp/pap/Jamfile index 4b94f08df6..5cc6efc97d 100644 --- a/src/add-ons/kernel/network/ppp/pap/Jamfile +++ b/src/add-ons/kernel/network/ppp/pap/Jamfile @@ -11,10 +11,10 @@ UseHeaders [ FDirName $(OBOS_TOP) src add-ons kernel network ppp shared libkerne R5KernelAddon pap : kernel network ppp : pap.cpp Protocol.cpp + + : libkernelppp.a ; -LinkSharedOSLibs pap : libkernelppp.a ; - # Installation OBOSInstall install-networking : /boot/home/config/add-ons/kernel/network/ppp diff --git a/src/add-ons/kernel/network/ppp/pppoe/Jamfile b/src/add-ons/kernel/network/ppp/pppoe/Jamfile index bdbd2e7cce..0846a60491 100644 --- a/src/add-ons/kernel/network/ppp/pppoe/Jamfile +++ b/src/add-ons/kernel/network/ppp/pppoe/Jamfile @@ -12,10 +12,10 @@ R5KernelAddon pppoe : kernel network ppp : pppoe.cpp PPPoEDevice.cpp DiscoveryPacket.cpp + + : libkernelppp.a ; -LinkSharedOSLibs pppoe : libkernelppp.a ; - # Installation OBOSInstall install-networking : /boot/home/config/add-ons/kernel/network/ppp diff --git a/src/add-ons/kernel/network/ppp/shared/libppp/Jamfile b/src/add-ons/kernel/network/ppp/shared/libppp/Jamfile index 2e230f62bb..2d7995f76d 100644 --- a/src/add-ons/kernel/network/ppp/shared/libppp/Jamfile +++ b/src/add-ons/kernel/network/ppp/shared/libppp/Jamfile @@ -13,5 +13,6 @@ StaticLibrary ppp : _libppputils.cpp PPPInterface.cpp + PPPInterfaceListener.cpp PPPManager.cpp ; diff --git a/src/add-ons/kernel/network/ppp/shared/libppp/PPPInterfaceListener.cpp b/src/add-ons/kernel/network/ppp/shared/libppp/PPPInterfaceListener.cpp new file mode 100644 index 0000000000..2eaa5a9c0b --- /dev/null +++ b/src/add-ons/kernel/network/ppp/shared/libppp/PPPInterfaceListener.cpp @@ -0,0 +1,60 @@ +//---------------------------------------------------------------------- +// This software is part of the OpenBeOS distribution and is covered +// by the OpenBeOS license. +// +// Copyright (c) 2003 Waldemar Kornewald, Waldemar.Kornewald@web.de +//--------------------------------------------------------------------- + +#include "PPPInterfaceListener.h" + +#include +#include + + +PPPInterfaceListener::PPPInterfaceListener(BHandler *target) + : fTarget(target) +{ + Construct(); +} + + +PPPInterfaceListener::PPPInterfaceListener(const PPPInterfaceListener& copy) + : fTarget(copy.Target()) +{ + Construct(); +} + + +PPPInterfaceListener::~PPPInterfaceListener() +{ + // TODO: send exit code to thread +// int32 tmp; +// wait_for_thread(fReportThread, &tmp); +} + + +status_t +PPPInterfaceListener::InitCheck() const +{ + if(fReportThread < 0) + return B_ERROR; + + return Manager()->InitCheck(); +} + + +void +PPPInterfaceListener::SetTarget(BHandler *target) +{ + LockerHelper locker(fLock); + + target = fTarget; +} + + +void +PPPInterfaceListener::Construct() +{ + // TODO: + // create report thread and register it as a receiver using PPPManager +} diff --git a/src/add-ons/kernel/network/ppp/shared/libppp/headers/PPPInterfaceListener.h b/src/add-ons/kernel/network/ppp/shared/libppp/headers/PPPInterfaceListener.h new file mode 100644 index 0000000000..5a7c1e79af --- /dev/null +++ b/src/add-ons/kernel/network/ppp/shared/libppp/headers/PPPInterfaceListener.h @@ -0,0 +1,52 @@ +//---------------------------------------------------------------------- +// This software is part of the OpenBeOS distribution and is covered +// by the OpenBeOS license. +// +// Copyright (c) 2003 Waldemar Kornewald, Waldemar.Kornewald@web.de +//--------------------------------------------------------------------- + +#ifndef _PPP_INTERFACE_LISTENER__H +#define _PPP_INTERFACE_LISTENER__H + +#include +#include + +class BHandler; + + +#define PPP_REPORT_MESSAGE 'P3RM' + // the what field of report messages + + +class PPPInterfaceListener { + public: + PPPInterfaceListener(BHandler *target); + PPPInterfaceListener(const PPPInterfaceListener& copy); + ~PPPInterfaceListener(); + + status_t InitCheck() const; + + BHandler *Target() const + { return fTarget; } + void SetTarget(BHandler *target); + + const PPPManager *Manager() const + { return &fManager; } + + PPPInterfaceListener& operator= (const PPPInterfaceListener& copy) + { SetTarget(copy.Target()); return *this; } + // all interface listeners have the same number of interfaces + + private: + void Construct(); + + private: + BHandler *fTarget; + thread_id fReportThread; + + PPPManager fManager; + BLocker fLock; +}; + + +#endif