<!--
{
  "availability" : [
    "DriverKit: -"
  ],
  "documentType" : "symbol",
  "framework" : "NetworkingDriverKit",
  "identifier" : "/documentation/NetworkingDriverKit/IOUserNetworkEthernet",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "NetworkingDriverKit"
    ],
    "preciseIdentifier" : "c:@S@IOUserNetworkEthernet"
  },
  "title" : "IOUserNetworkEthernet"
}
-->

# IOUserNetworkEthernet

The object you use to manage the setup, configuration, and teardown of your networking driver.

```
class IOUserNetworkEthernet;
```

## Overview

Subclass `IOUserNetworkEthernet` and override the methods you need to implement your driver’s behavior. Your subclass manages your driver’s overall life cycle, and facilitates communication between the hardware and the rest of the system. Use the <doc://com.apple.documentation/documentation/DriverKit/IOService/Start> method to establish a link to your hardware and to create the data structures needed to manage incoming and outgoing data packets. Use the <doc://com.apple.documentation/documentation/DriverKit/IOService/Stop> method to clean up the data structures you create in your <doc://com.apple.documentation/documentation/DriverKit/IOService/Start> method.

Override other methods of this class, and of the <doc://com.apple.documentation/documentation/DriverKit/IOService> parent class, as needed to enable your interface and implement other network-related behaviors. For example, you might want to override the inherited <doc://com.apple.documentation/documentation/kernel/ioservice/1532866-setpowerstate> method to respond to power-level changes.

### Specify the Driver’s Personality Information

When you subclass `IOUserNetworkEthernet`, update the `IOKitPersonalities` key of your driver extension’s `Info.plist` file with information to match your driver to appropriate hardware. For this class, always include the keys and values in the following table.

|Key                                                                                                       |Discussion                                                                                                                                              |
|----------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------|
|`IOClass`                                                                                                 |The value ``doc://com.apple.networkingdriverkit/documentation/NetworkingDriverKit/IOUserNetworkEthernet``.                                              |
|`IOProviderClass`                                                                                         |The provider class information. For USB-based network interfaces, specify <doc://com.apple.documentation/documentation/USBDriverKit/IOUSBHostInterface>.|
|`IOUserClass`                                                                                             |The name of your custom subclass.                                                                                                                       |
|<doc://com.apple.documentation/documentation/BundleResources/Information-Property-List/CFBundleIdentifier>|The bundle identifier of your driver.                                                                                                                   |
|`CFBundleIdentifierKernel`                                                                                |The value `com.apple.iokit.IOSkywalkFamily`.                                                                                                            |

You may add other keys to assist with the matching process. For example, you might include the `bInterfaceClass`, `bInterfaceProtocol`, and `bInterfaceSubClass` keys to match against specific USB device attributes. The USB specification defines which keys to include when matching your driver to a USB device. For information about the specific key combinations, see *Universal Serial Bus Common Class Specification* at <https://www.usb.org>.

## Topics

### Configuring the Driver Service

[`virtual bool init();`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/init)

Handles the basic initialization of the service.

[`virtual void free();`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/free)

Performs any final cleanup for the service.

[`virtual kern_return_t RegisterEthernetInterface(IOUserNetworkMACAddress macAddress, IOUserNetworkPacketBufferPool *pool, IOUserNetworkPacketQueue **queues, uint32_t queueCount);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/RegisterEthernetInterface-4jqw8)

Registers your driver with the networking stack.

### Declaring the Supported Media Types

[`virtual kern_return_t ReportAvailableMediaTypes(const IOUserNetworkMediaType *mediaTypes, uint32_t count);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/ReportAvailableMediaTypes)

Tells the system what types of networking media your driver supports.

[`virtual kern_return_t SelectMediaType(IOUserNetworkMediaType mediaType);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/SelectMediaType)

Selects the media type to use when communicating with the network stack.

[`typedef uint32_t IOUserNetworkMediaType;`](/documentation/NetworkingDriverKit/IOUserNetworkMediaType)

A structure describing a specific Ethernet type and configuration that your driver supports.

### Enabling Your Service

[`virtual kern_return_t SetInterfaceEnable(bool isEnable);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/SetInterfaceEnable-3v24g)

Enables or disables your service.

### Configuring Link Attributes

[`kern_return_t SetTxPacketHeadroom(uint16_t numBytes);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/SetTxPacketHeadroom)

Reserves the specified number of bytes at the front of each packet.

[`kern_return_t SetTxPacketTailroom(uint16_t numBytes);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/SetTxPacketTailroom)

Reserves the specified number of bytes at the end of each packet.

[`kern_return_t SetSoftwareVlanSupport(bool isSupported);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/SetSoftwareVlanSupport)

Enables software VLAN support.

[`virtual kern_return_t SetMulticastAddresses(const IOUserNetworkMACAddress *addresses, uint32_t count);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/SetMulticastAddresses-7wjbn)

Sets the device addresses to use for multicast filtering.

[`virtual kern_return_t SetAllMulticastModeEnable(bool enable);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/SetAllMulticastModeEnable-5rtva)

Enables or disables multicast support for your service.

[`virtual kern_return_t SetPromiscuousModeEnable(bool enable);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/SetPromiscuousModeEnable-82bt)

Enables or disables support for monitoriong all network packets.

[`kern_return_t SetWakeOnMagicPacketSupport(bool isSupported);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/SetWakeOnMagicPacketSupport)

Tells the system whether the device supports being woken up when a specially formatted packet arrives.

[`virtual kern_return_t SetWakeOnMagicPacketEnable(bool enable);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/SetWakeOnMagicPacketEnable)

Enables or disables support for waking up the device when a specially formatted packet arrives.

[`struct IOUserNetworkMACAddress;`](/documentation/NetworkingDriverKit/IOUserNetworkMACAddress)

A hardware address for a device.

### Reporting the Connection Status

[`virtual kern_return_t ReportLinkStatus(IOUserNetworkLinkStatus linkStatus, IOUserNetworkMediaType activeMediaType);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/ReportLinkStatus-5cxiq)

Reports the status of the link between the device and your driver to the system.

[`virtual IOReturn ReportLinkQuality(IOUserNetworkLinkQuality linkQuality);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/ReportLinkQuality-4noh0)

Reports the quality of the link between the device and your driver to the system.

[`virtual kern_return_t ReportDataBandwidths(uint64_t maxInputBandwidth, uint64_t maxOutputBandwidth, uint64_t effectiveInputBandwidth, uint64_t effectiveOutputBandwidth);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/ReportDataBandwidths-10ssx)

Reports the input and output bandwidth between the device and your driver to the system.

[`typedef uint32_t IOUserNetworkLinkStatus;`](/documentation/NetworkingDriverKit/IOUserNetworkLinkStatus)

A type for specifying the state of your device’s connection.

[`typedef uint32_t IOUserNetworkLinkQuality;`](/documentation/NetworkingDriverKit/IOUserNetworkLinkQuality)

A type for specifying the quality of your device’s connection to the host.

### Instance Methods

[`virtual kern_return_t GetHardwareAssists(uint32_t *hardwareAssists);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/GetHardwareAssists-4kj3q)

[`virtual kern_return_t GetMaxTransferUnit(uint32_t *mtu);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/GetMaxTransferUnit-mvla)

[`virtual kern_return_t RegisterEthernetInterface(ether_addr_t macAddress, IOUserNetworkPacketBufferPool *pool, IOUserNetworkPacketQueue **queues, uint32_t queueCount);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/RegisterEthernetInterface-fffz)

[`virtual kern_return_t ReportNicProxyLimits(nicproxy_limits_info_s nicproxy_limits_info);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/ReportNicProxyLimits-9yg2x)

[`virtual kern_return_t SetHardwareAssists(uint32_t hardwareAssists);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/SetHardwareAssists-5dvbf)

[`virtual kern_return_t SetMTU(uint32_t mtu);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/SetMTU)

[`virtual IOReturn addHardwareCountsWithInterfaceStatistics(const IOUserNetworkHardwareCounts *stats);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/addHardwareCountsWithInterfaceStatistics)

[`virtual IOReturn bpfAttach(uint32_t dataLinkType, uint32_t headerLength);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/bpfAttach)

[`virtual int bpfTap(uint32_t dataLinkType, uint32_t mode);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/bpfTap)

[`virtual void bpfTapInputPacket(uint32_t dataLinkType, IOUserNetworkPacket *packet, void *header, size_t headerLength);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/bpfTapInputPacket)

[`virtual void bpfTapOutputPacket(uint32_t dataLinkType, IOUserNetworkPacket *packet, void *header, size_t headerLength);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/bpfTapOutputPacket)

[`virtual const char * getBSDName() const;`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/getBSDName)

[`virtual const char * getBSDNamePrefix();`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/getBSDNamePrefix)

[`virtual int32_t getBSDUnitNumber();`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/getBSDUnitNumber)

[`virtual uint32_t getFeatureFlags();`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/getFeatureFlags)

[`virtual IOReturn getHardwareAddress(ether_addr_t *addr);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/getHardwareAddress)

[`virtual uint32_t getHardwareAssists();`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/getHardwareAssists-7o0q0)

[`virtual MediaWord getInitialMedia();`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/getInitialMedia)

[`virtual uint32_t getInterfaceSubFamily();`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/getInterfaceSubFamily)

[`virtual uint32_t getMaxTransferUnit();`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/getMaxTransferUnit-3iokl)

[`virtual IOReturn getSupportedMediaArray(MediaWord *mediaArray, uint32_t *mediaCount);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/getSupportedMediaArray)

[`virtual IOReturn getTSOOptions(IOUserNetworkTSOOptions *options);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/getTSOOptions)

[`virtual uint16_t getTxDataOffset();`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/getTxDataOffset)

[`virtual IOReturn handleChosenMedia(MediaWord chosenMedia);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/handleChosenMedia)

[`virtual void hwConfigNicProxyData(nicproxy_info_t *handoff);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/hwConfigNicProxyData-345tz)

[`virtual void hwConfigNicProxyData(offload_info_s *handoff);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/hwConfigNicProxyData-7u8wb)

[`virtual IOReturn processInterfaceCommand(ifdrv_t *cmd_data);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/processInterfaceCommand)

[`virtual IOReturn registerEthernetInterface(ether_addr_t macAddress, IOUserNetworkPacketQueue **queues, uint32_t numQueues, IOUserNetworkPacketBufferPool *txPool, IOUserNetworkPacketBufferPool *rxPool);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/registerEthernetInterface-8pzu9)

[`virtual IOReturn registerEthernetInterface(IOUserNetworkPacketQueue **queues, uint32_t numQueues, IOUserNetworkPacketBufferPool *txPool, IOUserNetworkPacketBufferPool *rxPool);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/registerEthernetInterface-948c9)

[`virtual IOReturn reportDataBandwidths(uint64_t maxInputBandwidth, uint64_t maxOutputBandwidth, uint64_t effectiveInputBandwidth, uint64_t effectiveOutputBandwidth);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/reportDataBandwidths-95d7h)

[`virtual IOReturn reportLinkQuality(LinkQuality linkQuality);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/reportLinkQuality-2tcue)

[`virtual IOReturn reportLinkStatus(LinkStatus linkStatus, MediaWord activeMediaType);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/reportLinkStatus-4qtrf)

[`virtual IOReturn reportNicProxyLimits(nicproxy_limits_info_t nicproxy_limits_info);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/reportNicProxyLimits-6p2r1)

[`virtual IOReturn setAllMulticastModeEnable(bool enable);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/setAllMulticastModeEnable-3aocm)

[`virtual IOReturn setHardwareAddress(ether_addr_t *addr);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/setHardwareAddress)

[`virtual IOReturn setHardwareAssists(uint32_t hardwareAssists);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/setHardwareAssists-2uqz7)

[`virtual IOReturn setHardwareAssists(uint32_t hardwareAssists, uint32_t hardwareAssistsMask);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/setHardwareAssists-3vpkr)

[`virtual IOReturn setInterfaceEnable(bool enable);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/setInterfaceEnable-6pfsx)

[`virtual IOReturn setMaxTransferUnit(uint32_t mtu);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/setMaxTransferUnit)

[`virtual IOReturn setMulticastAddresses(const ether_addr_t *addresses, uint32_t count);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/setMulticastAddresses-1o4z3)

[`virtual IOReturn setPowerState(unsigned long powerState, IOService *whatDevice);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/setPowerState)

[`virtual IOReturn setPromiscuousModeEnable(bool enable);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/setPromiscuousModeEnable-34fjm)

[`virtual bool start(IOService *provider);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/start)

[`virtual void stop(IOService *provider);`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/stop)

[`IOReturn updateInterfaceDescriptor();`](/documentation/NetworkingDriverKit/IOUserNetworkEthernet/updateInterfaceDescriptor)

## Relationships

### Inherits From

[`IOService`](/documentation/DriverKit/IOService)

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)