#ifndef _IONETWORKSTACK_H
#define _IONETWORKSTACK_H
#define kIONetworkStackUserCommand "IONetworkStackUserCommand"
#ifdef KERNEL
class IONetworkInterface;
class IONetworkStack : public IOService
{
OSDeclareDefaultStructors( IONetworkStack )
protected:
OSOrderedSet * _ifSet;
OSDictionary * _ifDict;
IONotifier * _interfaceNotifier;
bool _registerPrimaryInterface;
struct ExpansionData { };
ExpansionData *_reserved;
static bool interfacePublished( void * target,
void * param,
IOService * service );
static void unregisterBSDInterface( IONetworkInterface * netif );
static void registerBSDInterface( IONetworkInterface * netif );
static SInt32 orderRegisteredInterfaces( const OSMetaClassBase * obj1,
const OSMetaClassBase * obj2,
void * ref );
static void completeRegistrationUsingArray( OSArray * array );
static void completeRegistration( OSArray * array, bool isSync );
virtual void free();
virtual bool addInterface( IONetworkInterface * netif );
virtual void removeInterface( IONetworkInterface * netif );
virtual IONetworkInterface * getInterface( UInt32 index );
virtual bool containsInterface( IONetworkInterface * netif );
virtual bool addRegisteredInterface( IONetworkInterface * netif );
virtual void removeRegisteredInterface( IONetworkInterface * netif );
virtual IONetworkInterface * getRegisteredInterface( const char * name,
UInt32 unit );
virtual IONetworkInterface * getLastRegisteredInterface(const char * name);
virtual UInt32 getNextAvailableUnitNumber( const char * name,
UInt32 startingUnit = 0 );
virtual bool preRegisterInterface( IONetworkInterface * netif,
const char * name,
UInt32 unit,
OSArray * array,
bool fixedUnit = false );
public:
enum {
kRegisterInterfaceWithFixedUnit = 0,
kRegisterInterface,
kRegisterAllInterfaces
};
static IONetworkStack * getNetworkStack();
static int bsdInterfaceWasUnregistered( struct ifnet * ifp );
virtual bool init( OSDictionary * properties );
virtual bool start( IOService * provider );
virtual void stop( IOService * provider );
virtual IOReturn registerAllInterfaces();
virtual IOReturn registerPrimaryInterface( bool enable );
virtual IOReturn registerInterface( IONetworkInterface * netif,
const char * name,
UInt32 unit = 0,
bool isSync = true,
bool fixedUnit = false );
virtual IOReturn message( UInt32 type,
IOService * provider,
void * argument = 0 );
virtual IOReturn newUserClient( task_t owningTask,
void * security_id,
UInt32 type,
IOUserClient ** handler );
virtual IOReturn setProperties( OSObject * properties );
OSMetaClassDeclareReservedUnused( IONetworkStack, 0);
OSMetaClassDeclareReservedUnused( IONetworkStack, 1);
OSMetaClassDeclareReservedUnused( IONetworkStack, 2);
OSMetaClassDeclareReservedUnused( IONetworkStack, 3);
};
#endif
#endif