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

# IOUserNetworkPacket

A network packet containing the data for your driver to process.

```
class IOUserNetworkPacket;
```

## Overview

An [`IOUserNetworkPacket`](/documentation/NetworkingDriverKit/IOUserNetworkPacket) contains meta information about a network packet being trasmitted to or from your device. You do not create network packets directly. Instead, you dequeue them from an appropriate submission queue, such as an [`IOUserNetworkRxSubmissionQueue`](/documentation/NetworkingDriverKit/IOUserNetworkRxSubmissionQueue). You a packet object to get the length of the packet data and the location of that data in its memory buffer, accommodating for any extra headroom bytes at the beginning of the packet.

## Topics

### Configuring the Network Packet

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

Initializes the network packet object.

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

Performs any final cleanup for the network packet.

### Configuring the Packet State Information

[`virtual kern_return_t SetHeadroom(uint8_t headroom);`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/SetHeadroom)

Changes the number of bytes to reserve at the front of the packet’s buffer to the specified value.

[`virtual kern_return_t SetLinkHeaderLength(uint8_t length);`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/SetLinkHeaderLength-9fqmg)

Changes the number of bytes to use for the link header to the specified value.

[`virtual kern_return_t SetDataOffset(uint16_t offset);`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/SetDataOffset-16kx3)

Changes the offset to the beginning of the packet’s data to the specified value.

[`virtual kern_return_t SetDataLength(uint32_t length);`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/SetDataLength-788b)

Changes the number of bytes of data in the packet to the specified value.

### Getting the Packet Information

[`virtual kern_return_t GetHeadroom(uint8_t *headroom) const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/GetHeadroom)

Gets the number of bytes reserved at the front of the packet’s buffer.

[`virtual kern_return_t GetLinkHeaderLength(uint8_t *length) const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/GetLinkHeaderLength-8dlhu)

Gets the number of bytes to use for the link header.

[`virtual kern_return_t GetDataOffset(uint16_t *offset) const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/GetDataOffset-4tw7y)

Gets the offset to the beginning of the packet’s data.

[`virtual kern_return_t GetDataLength(uint32_t *length) const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/GetDataLength-8km3n)

Gets the number of bytes of data in the packet.

[`virtual kern_return_t GetMemorySegmentOffset(uint64_t *offset) const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/GetMemorySegmentOffset-39e4c)

Gets the offset to the beginning of the packet in the corresponding memory buffer.

### Getting the Packet’s Buffer Pool

[`virtual kern_return_t GetPacketBufferPool(IOUserNetworkPacketBufferPool **pool) const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/GetPacketBufferPool-63snl)

Gets the memory buffer that contains the pakcet.

### Instance Methods

[`virtual IOReturn clearTimestamp();`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/clearTimestamp)

[`virtual uint64_t getDataIOVirtualAddress() const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/getDataIOVirtualAddress)

[`virtual uint32_t getDataLength() const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/getDataLength-1niks)

[`virtual size_t getDataOff() const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/getDataOff)

[`virtual uint16_t getDataOffset() const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/getDataOffset-2h6cf)

[`virtual uint64_t getDataVirtualAddress() const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/getDataVirtualAddress)

[`virtual IOReturn getExpiryTime(uint64_t *time) const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/getExpiryTime)

[`virtual uint8_t getLinkHeaderLength() const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/getLinkHeaderLength-3gau2)

[`virtual uint16_t getMSS() const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/getMSS)

[`virtual uint64_t getMemorySegmentOffset() const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/getMemorySegmentOffset-2nuj3)

[`virtual IOUserNetworkPacketBufferPool * getPacketBufferPool() const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/getPacketBufferPool-5dqqj)

[`virtual IOReturn getRxChecksumInfo(IOUserNetworkPacketRxChecksumFlags *flags, uint16_t *value) const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/getRxChecksumInfo)

[`virtual uint32_t getServiceClass() const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/getServiceClass)

[`virtual IOReturn getTSOInfo(uint16_t *segsz, IOUserNetworkPacketTSOFlags *flags) const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/getTSOInfo)

[`virtual IOReturn getTimestamp(uint64_t *timestamp) const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/getTimestamp)

[`virtual uint32_t getTraceID() const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/getTraceID)

[`virtual IOReturn getTxChecksumInfo(IOUserNetworkPacketTxChecksumFlags *flags, uint16_t *start, uint16_t *stuff) const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/getTxChecksumInfo)

[`virtual uint32_t getTxCsumFlags() const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/getTxCsumFlags)

[`bool getVlanTag(uint16_t *vlanTag) const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/getVlanTag)

[`virtual bool initWithPool(IOUserNetworkPacketBufferPool *pool, IOUserNetworkPacketDescriptor *descriptor, IOOptionBits options);`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/initWithPool)

[`virtual bool isLinkBroadcast() const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/isLinkBroadcast)

[`virtual bool isLinkMulticast() const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/isLinkMulticast)

[`virtual bool isTimestampRequested() const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/isTimestampRequested)

[`virtual bool isTransportTrafficBackground() const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/isTransportTrafficBackground)

[`virtual bool isTransportTrafficRealtime() const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/isTransportTrafficRealtime)

[`virtual IOReturn prepareWithQueue(IOUserNetworkPacketQueue *queue, IOUserNetworkPacketDirection direction);`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/prepareWithQueue)

[`virtual void setCompletionStatus(IOReturn status);`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/setCompletionStatus)

[`virtual IOReturn setDataLength(uint32_t length);`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/setDataLength-9uo6r)

[`virtual IOReturn setDataOff(size_t offset);`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/setDataOff)

[`virtual IOReturn setDataOffAndLen(size_t offset, size_t length);`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/setDataOffAndLen)

[`virtual IOReturn setDataOffset(uint16_t offset);`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/setDataOffset-459jc)

[`virtual IOReturn setDataOffsetAndLength(uint16_t offset, uint32_t length);`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/setDataOffsetAndLength)

[`IOReturn setIsLinkMulticast(bool isMulticast);`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/setIsLinkMulticast)

[`virtual IOReturn setLROInfo(IOUserNetworkPacketLROFlags flags, uint8_t segcount);`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/setLROInfo)

[`virtual IOReturn setLinkHeaderLength(uint8_t length);`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/setLinkHeaderLength-23dbd)

[`virtual IOReturn setRxChecksumInfo(IOUserNetworkPacketRxChecksumFlags flags, uint16_t value);`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/setRxChecksumInfo)

[`virtual IOReturn setTimestamp(uint64_t timestamp);`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/setTimestamp)

[`void setVlanTag(uint16_t vlanTag);`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/setVlanTag)

[`virtual void setWakeFlag();`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/setWakeFlag)

[`virtual void traceEvent(uint32_t event) const;`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/traceEvent)

### Type Methods

[`static IOUserNetworkPacket * withPool(IOUserNetworkPacketBufferPool *pool, IOUserNetworkPacketDescriptor *descriptor, IOOptionBits options);`](/documentation/NetworkingDriverKit/IOUserNetworkPacket/withPool)

## Relationships

### Inherits From

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

---

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)