IONetworkController
Implements the framework for a generic network controller.
Declaration
class IONetworkController : IOServiceOverview
A subclass of IONetworkController must provide additional functionality specific for a particular networking type. In addition, the driver must implement (override) a basic set of hardware dependent methods to create a working driver.
IONetworkController attaches itself to the data link layer (DLIL) via an IONetworkInterface object. A controller object without a companion interface is not accessible to the networking system. The controller interacts with DLIL by calling methods defined by the interface object. And conversely, DLIL will issue commands and packets to the controller through the interface object.
IONetworkController will create an IOCommandGate and attach this event source to an IOWorkLoop object. All commands sent from the interface object are handled through the IOCommandGate object, which will serialize access to the controller. Outbound packets sent from the interface to the controller have no implicit serialization. Drivers must implement an output function that is thread safe, or use an IOOutputQueue object which will provide a serialization model.
Note: IONetworkController internally uses some private messaging constants in the sys_iokit | sub_iokit_networking range defined in "IONetworkControllerPrivate.h". If you create a client for your controller (for example an IOUserClient), and it overrides the IOService::message method, your client may receive these messages. It should ignore these messages and pass them to super::message()
Topics
Miscellaneous
allocatePacketattachDebuggerClientattachInterfaceconfigureInterfacecopyMediumDictionarycopyPacketcreateInterfacecreateOutputQueuecreateWorkLoopdetachDebuggerClientdetachInterfacedisabledisable(IONetworkInterface *)disable(IOService *)disablePacketFilterdoDisabledoEnableenableenable(IONetworkInterface *)enable(IOService *)enablePacketFilterexecuteCommandfreefreePacketgetChecksumDemandgetChecksumSupportgetCommandClientgetCommandGategetDebuggerLinkStatusgetFeaturesgetHardwareAddressgetMaxPacketSizegetMediumDictionarygetMinPacketSizegetOutputHandlergetOutputQueuegetPacketBufferConstraintsgetPacketFiltersgetSelectedMediumhandleClosehandleIsOpenhandleOpeninitmessagenewModelStringnewRevisionStringnewVendorStringoutputPacketpreparepublishMediumDictionarypublishPropertiesreceivePacketregisterWithPolicyMakerreleaseDebuggerLockreleaseFreePacketsreplaceOrCopyPacketreplacePacketreserveDebuggerLockselectMediumselectMediumWithNamesendPacketsetChecksumResultsetDebuggerModesetHardwareAddresssetLinkStatussetMaxPacketSizesetSelectedMediumstartstopsystemWillShutdown
Callbacks
Constants
Instance Variables
Instance Methods
allocatePacketallocatePacketNoWaitattachDebuggerClientattachInterfaceconfigureInterfacecopyMediumDictionarycopyPacketcreateInterfacecreateOutputQueuecreateWorkLoopdetachDebuggerClientdetachInterfacedisabledisabledisabledisablePacketFilterdoDisabledoEnableenableenableenableenablePacketFilterexecuteCommandfreefreePacketgetChecksumDemandgetChecksumSupportgetCommandClientgetCommandGategetCurrentMediumgetDebuggerLinkStatusgetFeaturesgetHardwareAddressgetMaxPacketSizegetMediumDictionarygetMetaClassgetMinPacketSizegetOutputHandlergetOutputQueuegetPacketBufferConstraintsgetPacketFiltersgetSelectedMediumhandleClosehandleIsOpenhandleOpeninitmessagenewModelStringnewRevisionStringnewVendorStringoutputPacketpreparepublishMediumDictionarypublishPropertiesreceivePacketregisterWithPolicyMakerreleaseDebuggerLockreleaseFreePacketsreplaceOrCopyPacketreplacePacketreserveDebuggerLockselectMediumselectMediumWithNamesendPacketsetAggressivenesssetChecksumResultsetCurrentMediumsetDebuggerModesetHardwareAddresssetHardwareAssistssetLinkStatussetMaxPacketSizesetSelectedMediumstartstopsystemWillShutdown