#ifndef PPPoE_DEVICE__H
#define PPPoE_DEVICE__H
#include "PPPoE.h"
#include <KPPPDevice.h>
#include <net/if_types.h>
#include <net_stack.h>
enum pppoe_state {
INITIAL,
PADI_SENT,
PADR_SENT,
OPENED
};
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