/* * Copyright 2003-2006, Waldemar Kornewald * Distributed under the terms of the MIT License. */ #ifndef PPPoE_DEVICE__H #define PPPoE_DEVICE__H #include "PPPoE.h" #include #include #include enum pppoe_state { INITIAL, // the same as IsDown() == true PADI_SENT, PADR_SENT, OPENED // the same as IsUp() == true }; class PPPoEDevice : public KPPPDevice { public: PPPoEDevice(KPPPInterface& interface, driver_parameter *settings); net_device *EthernetIfnet() const { return fEthernetIfnet; } const uint8 *Peer() const { return fPeer; } uint16 SessionID() const { return fSessionID; } uint32 HostUniq() const { return fHostUniq; } const char *ACName() const { return fACName; } const char *ServiceName() const { return fServiceName; } virtual status_t InitCheck() const; virtual bool Up(); virtual bool Down(); virtual uint32 InputTransferRate() const; virtual uint32 OutputTransferRate() const; virtual uint32 CountOutputBytes() const; virtual status_t Send(net_buffer *packet, uint16 protocolNumber = 0); virtual status_t Receive(net_buffer *packet, uint16 protocolNumber = 0); virtual void Pulse(); private: net_device *fEthernetIfnet; uint8 fPeer[6]; uint8 fEtherAddr[6]; uint16 fSessionID; uint32 fHostUniq; const char *fACName, *fServiceName; const char *finterfaceName; uint32 fAttempts; bigtime_t fNextTimeout; pppoe_state fState; }; #endif