#ifndef _IONETWORKSTACK_H
#define _IONETWORKSTACK_H
#define kIONetworkStackUserCommandKey "IONetworkStackUserCommand"
#define kIONetworkStackUserCommand "IONetworkStackUserCommand"
enum {
kIONetworkStackRegisterInterfaceWithUnit = 0,
kIONetworkStackRegisterInterfaceWithLowestUnit = 1,
kIONetworkStackRegisterInterfaceAll = 2
};
#ifdef KERNEL
class IONetworkInterface;
class IONetworkStack : public IOService
{
OSDeclareFinalStructors( IONetworkStack )
protected:
OSSet * _ifListNaming;
OSArray * _ifListDetach;
OSDictionary * _ifPrefixDict;
IONotifier * _ifNotifier;
IOLock * _stateLock;
thread_call_t _asyncThread;
static SInt32 orderNetworkInterfaces(
const OSMetaClassBase * obj1,
const OSMetaClassBase * obj2,
void * ref );
virtual void free( void );
bool interfacePublished(
void * refCon,
IOService * service,
IONotifier * notifier );
void asyncWork( void );
bool insertNetworkInterface(
IONetworkInterface * netif );
void removeNetworkInterface(
IONetworkInterface * netif );
uint32_t getNextAvailableUnitNumber(
const char * name,
uint32_t startingUnit );
bool reserveInterfaceUnitNumber(
IONetworkInterface * netif,
uint32_t unit,
bool isUnitFixed );
IOReturn attachNetworkInterfaceToBSD(
IONetworkInterface * netif );
IOReturn registerAllNetworkInterfaces( void );
IOReturn registerNetworkInterface(
IONetworkInterface * netif,
uint32_t unit,
bool isUnitFixed );
public:
virtual bool start( IOService * provider );
virtual bool didTerminate( IOService *, IOOptionBits, bool * );
virtual IOReturn setProperties( OSObject * properties );
};
#endif
#endif