mirror of
https://github.com/slackhq/nebula.git
synced 2025-11-22 16:34:25 +01:00
137 lines
5.0 KiB
Go
137 lines
5.0 KiB
Go
package virtio
|
|
|
|
// Feature contains feature bits that describe a virtio device or driver.
|
|
type Feature uint64
|
|
|
|
// Device-independent feature bits.
|
|
//
|
|
// Source: https://docs.oasis-open.org/virtio/virtio/v1.2/csd01/virtio-v1.2-csd01.html#x1-6600006
|
|
const (
|
|
// FeatureIndirectDescriptors indicates that the driver can use descriptors
|
|
// with an additional layer of indirection.
|
|
FeatureIndirectDescriptors Feature = 1 << 28
|
|
|
|
// FeatureVersion1 indicates compliance with version 1.0 of the virtio
|
|
// specification.
|
|
FeatureVersion1 Feature = 1 << 32
|
|
)
|
|
|
|
// Feature bits for networking devices.
|
|
//
|
|
// Source: https://docs.oasis-open.org/virtio/virtio/v1.2/csd01/virtio-v1.2-csd01.html#x1-2200003
|
|
const (
|
|
// FeatureNetDeviceCsum indicates that the device can handle packets with
|
|
// partial checksum (checksum offload).
|
|
FeatureNetDeviceCsum Feature = 1 << 0
|
|
|
|
// FeatureNetDriverCsum indicates that the driver can handle packets with
|
|
// partial checksum.
|
|
FeatureNetDriverCsum Feature = 1 << 1
|
|
|
|
// FeatureNetCtrlDriverOffloads indicates support for dynamic offload state
|
|
// reconfiguration.
|
|
FeatureNetCtrlDriverOffloads Feature = 1 << 2
|
|
|
|
// FeatureNetMTU indicates that the device reports a maximum MTU value.
|
|
FeatureNetMTU Feature = 1 << 3
|
|
|
|
// FeatureNetMAC indicates that the device provides a MAC address.
|
|
FeatureNetMAC Feature = 1 << 5
|
|
|
|
// FeatureNetDriverTSO4 indicates that the driver supports the TCP
|
|
// segmentation offload for received IPv4 packets.
|
|
FeatureNetDriverTSO4 Feature = 1 << 7
|
|
|
|
// FeatureNetDriverTSO6 indicates that the driver supports the TCP
|
|
// segmentation offload for received IPv6 packets.
|
|
FeatureNetDriverTSO6 Feature = 1 << 8
|
|
|
|
// FeatureNetDriverECN indicates that the driver supports the TCP
|
|
// segmentation offload with ECN for received packets.
|
|
FeatureNetDriverECN Feature = 1 << 9
|
|
|
|
// FeatureNetDriverUFO indicates that the driver supports the UDP
|
|
// fragmentation offload for received packets.
|
|
FeatureNetDriverUFO Feature = 1 << 10
|
|
|
|
// FeatureNetDeviceTSO4 indicates that the device supports the TCP
|
|
// segmentation offload for received IPv4 packets.
|
|
FeatureNetDeviceTSO4 Feature = 1 << 11
|
|
|
|
// FeatureNetDeviceTSO6 indicates that the device supports the TCP
|
|
// segmentation offload for received IPv6 packets.
|
|
FeatureNetDeviceTSO6 Feature = 1 << 12
|
|
|
|
// FeatureNetDeviceECN indicates that the device supports the TCP
|
|
// segmentation offload with ECN for received packets.
|
|
FeatureNetDeviceECN Feature = 1 << 13
|
|
|
|
// FeatureNetDeviceUFO indicates that the device supports the UDP
|
|
// fragmentation offload for received packets.
|
|
FeatureNetDeviceUFO Feature = 1 << 14
|
|
|
|
// FeatureNetMergeRXBuffers indicates that the driver can handle merged
|
|
// receive buffers.
|
|
// When this feature is negotiated, devices may merge multiple descriptor
|
|
// chains together to transport large received packets. [NetHdr.NumBuffers]
|
|
// will then contain the number of merged descriptor chains.
|
|
FeatureNetMergeRXBuffers Feature = 1 << 15
|
|
|
|
// FeatureNetStatus indicates that the device configuration status field is
|
|
// available.
|
|
FeatureNetStatus Feature = 1 << 16
|
|
|
|
// FeatureNetCtrlVQ indicates that a control channel virtqueue is
|
|
// available.
|
|
FeatureNetCtrlVQ Feature = 1 << 17
|
|
|
|
// FeatureNetCtrlRX indicates support for RX mode control (e.g. promiscuous
|
|
// or all-multicast) for packet receive filtering.
|
|
FeatureNetCtrlRX Feature = 1 << 18
|
|
|
|
// FeatureNetCtrlVLAN indicates support for VLAN filtering through the
|
|
// control channel.
|
|
FeatureNetCtrlVLAN Feature = 1 << 19
|
|
|
|
// FeatureNetDriverAnnounce indicates that the driver can send gratuitous
|
|
// packets.
|
|
FeatureNetDriverAnnounce Feature = 1 << 21
|
|
|
|
// FeatureNetMQ indicates that the device supports multiqueue with automatic
|
|
// receive steering.
|
|
FeatureNetMQ Feature = 1 << 22
|
|
|
|
// FeatureNetCtrlMACAddr indicates that the MAC address can be set through
|
|
// the control channel.
|
|
FeatureNetCtrlMACAddr Feature = 1 << 23
|
|
|
|
// FeatureNetDeviceUSO indicates that the device supports the UDP
|
|
// segmentation offload for received packets.
|
|
FeatureNetDeviceUSO Feature = 1 << 56
|
|
|
|
// FeatureNetHashReport indicates that the device can report a per-packet
|
|
// hash value and type.
|
|
FeatureNetHashReport Feature = 1 << 57
|
|
|
|
// FeatureNetDriverHdrLen indicates that the driver can provide the exact
|
|
// header length value (see [NetHdr.HdrLen]).
|
|
// Devices may benefit from knowing the exact header length.
|
|
FeatureNetDriverHdrLen Feature = 1 << 59
|
|
|
|
// FeatureNetRSS indicates that the device supports RSS (receive-side
|
|
// scaling) with configurable hash parameters.
|
|
FeatureNetRSS Feature = 1 << 60
|
|
|
|
// FeatureNetRSCExt indicates that the device can process duplicated ACKs
|
|
// and report the number of coalesced segments and duplicated ACKs.
|
|
FeatureNetRSCExt Feature = 1 << 61
|
|
|
|
// FeatureNetStandby indicates that the device may act as a standby for a
|
|
// primary device with the same MAC address.
|
|
FeatureNetStandby Feature = 1 << 62
|
|
|
|
// FeatureNetSpeedDuplex indicates that the device can report link speed and
|
|
// duplex mode.
|
|
FeatureNetSpeedDuplex Feature = 1 << 63
|
|
)
|