15a4503c3SWaldemar Kornewald //---------------------------------------------------------------------- 25a4503c3SWaldemar Kornewald // This software is part of the OpenBeOS distribution and is covered 35a4503c3SWaldemar Kornewald // by the OpenBeOS license. 45a4503c3SWaldemar Kornewald // 55a4503c3SWaldemar Kornewald // Copyright (c) 2003 Waldemar Kornewald, Waldemar.Kornewald@web.de 65a4503c3SWaldemar Kornewald //--------------------------------------------------------------------- 75a4503c3SWaldemar Kornewald 85a4503c3SWaldemar Kornewald #ifndef DISCOVERY_PACKET__H 95a4503c3SWaldemar Kornewald #define DISCOVERY_PACKET__H 105a4503c3SWaldemar Kornewald 115a4503c3SWaldemar Kornewald #include "PPPoE.h" 125a4503c3SWaldemar Kornewald 135a4503c3SWaldemar Kornewald #include <List.h> 145a4503c3SWaldemar Kornewald 155a4503c3SWaldemar Kornewald 165a4503c3SWaldemar Kornewald enum PPPoE_TAG_TYPE { 175a4503c3SWaldemar Kornewald END_OF_LIST = 0x0000, 185a4503c3SWaldemar Kornewald SERVICE_NAME = 0x0101, 195a4503c3SWaldemar Kornewald AC_NAME = 0x0102, 205a4503c3SWaldemar Kornewald HOST_UNIQ = 0x0103, 215a4503c3SWaldemar Kornewald AC_COOKIE = 0x0104, 225a4503c3SWaldemar Kornewald VENDOR_SPECIFIC = 0x0105, 235a4503c3SWaldemar Kornewald RELAY_SESSION_ID = 0x0110, 245a4503c3SWaldemar Kornewald SERVICE_NAME_ERROR = 0x0201, 255a4503c3SWaldemar Kornewald AC_SYSTEM_ERROR = 0x0202, 265a4503c3SWaldemar Kornewald GENERIC_ERROR = 0x0203 275a4503c3SWaldemar Kornewald }; 285a4503c3SWaldemar Kornewald 295a4503c3SWaldemar Kornewald enum PPPoE_CODE { 305a4503c3SWaldemar Kornewald PADI = 0x09, 315a4503c3SWaldemar Kornewald PADO = 0x07, 325a4503c3SWaldemar Kornewald PADR = 0x19, 335a4503c3SWaldemar Kornewald PADS = 0x65, 345a4503c3SWaldemar Kornewald PADT = 0xA7 355a4503c3SWaldemar Kornewald }; 365a4503c3SWaldemar Kornewald 375a4503c3SWaldemar Kornewald 385a4503c3SWaldemar Kornewald typedef struct pppoe_tag { 395a4503c3SWaldemar Kornewald uint16 type; 405a4503c3SWaldemar Kornewald uint16 length; 415a4503c3SWaldemar Kornewald uint8 data[0]; 425a4503c3SWaldemar Kornewald }; 435a4503c3SWaldemar Kornewald 445a4503c3SWaldemar Kornewald 455a4503c3SWaldemar Kornewald class DiscoveryPacket { 465a4503c3SWaldemar Kornewald public: 475a4503c3SWaldemar Kornewald DiscoveryPacket(uint8 code, uint16 sessionID = 0x0000); 48*4e0ad752SWaldemar Kornewald DiscoveryPacket(struct mbuf *packet, uint32 start = 0); 495a4503c3SWaldemar Kornewald ~DiscoveryPacket(); 505a4503c3SWaldemar Kornewald 51*4e0ad752SWaldemar Kornewald status_t InitCheck() const 52*4e0ad752SWaldemar Kornewald { return fInitStatus; } 53*4e0ad752SWaldemar Kornewald 545a4503c3SWaldemar Kornewald void SetCode(uint8 code) 555a4503c3SWaldemar Kornewald { fCode = code; } 565a4503c3SWaldemar Kornewald uint8 Code() const 575a4503c3SWaldemar Kornewald { return fCode; } 585a4503c3SWaldemar Kornewald 595a4503c3SWaldemar Kornewald void SetSessionID(uint16 sessionID) 605a4503c3SWaldemar Kornewald { fSessionID = sessionID; } 615a4503c3SWaldemar Kornewald uint16 SessionID() const 625a4503c3SWaldemar Kornewald { return fSessionID; } 635a4503c3SWaldemar Kornewald 645a4503c3SWaldemar Kornewald bool AddTag(uint16 type, uint16 length, void *data, int32 index = -1); 655a4503c3SWaldemar Kornewald bool RemoveTag(pppoe_tag *tag); 665a4503c3SWaldemar Kornewald int32 CountTags() const 675a4503c3SWaldemar Kornewald { return fTags.CountItems(); } 685a4503c3SWaldemar Kornewald pppoe_tag *TagAt(int32 index) const; 695a4503c3SWaldemar Kornewald pppoe_tag *TagWithType(uint16 type) const; 705a4503c3SWaldemar Kornewald 71*4e0ad752SWaldemar Kornewald struct mbuf *ToMbuf(uint32 MTU, uint32 reserve = ETHER_HDR_LEN); 725a4503c3SWaldemar Kornewald // the user is responsible for freeing the mbuf 735a4503c3SWaldemar Kornewald 745a4503c3SWaldemar Kornewald private: 755a4503c3SWaldemar Kornewald uint8 fCode; 765a4503c3SWaldemar Kornewald uint16 fSessionID; 775a4503c3SWaldemar Kornewald List<pppoe_tag*> fTags; 78*4e0ad752SWaldemar Kornewald status_t fInitStatus; 795a4503c3SWaldemar Kornewald }; 805a4503c3SWaldemar Kornewald 815a4503c3SWaldemar Kornewald 825a4503c3SWaldemar Kornewald #endif 83