iouring

package
v0.3.0-alpha Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 14, 2023 License: Apache-2.0 Imports: 11 Imported by: 0

Documentation

Index

Constants

View Source
const (
	CQEFBuffer uint32 = 1 << iota
	CQEFMore
	CQEFSockNonempty
	CQEFNotif
)
View Source
const (
	EnterGetEvents uint32 = 1 << iota
	EnterSQWakeup
	EnterSQWait
	EnterExtArg
	EnterRegisteredRing
)
View Source
const (
	OpNop uint8 = iota
	OpReadv
	OpWritev
	OpFsync
	OpReadFixed
	OpWriteFixed
	OpPollAdd
	OpPollRemove
	OpSyncFileRange
	OpSendmsg
	OpRecvmsg
	OpTimeout
	OpTimeoutRemove
	OpAccept
	OpAsyncCancel
	OpLinkTimeout
	OpConnect
	OpFallocate
	OpOpenat
	OpClose
	OpFilesUpdate
	OpStatx
	OpRead
	OpWrite
	OpFadvise
	OpMadvise
	OpSend
	OpRecv
	OpOpenat2
	OpEpollCtl
	OpSplice
	OpProvideBuffers
	OpRemoveBuffers
	OpTee
	OpShutdown
	OpRenameat
	OpUnlinkat
	OpMkdirat
	OpSymlinkat
	OpLinkat
	OpMsgRing
	OpFsetxattr
	OpSetxattr
	OpFgetxattr
	OpGetxattr
	OpSocket
	OpUringCmd
	OpSendZC
	OpSendMsgZC

	OpLast
)
View Source
const (
	RestrictionRegisterOp uint32 = iota
	RestrictionSQEOp
	RestrictionSQEFlagsAllowed
	RestrictionSQEFlagsRequired

	RestrictionLast
)
View Source
const (
	RegisterBuffers uint = iota
	UnregisterBuffers

	RegisterFiles
	UnregisterFiles

	RegisterEventFD
	UnregisterEventFD

	RegisterFilesUpdate
	RegisterEventFDAsync
	RegisterProbe

	RegisterPersonality
	UnregisterPersonality

	RegisterRestrictions
	UnregisterEnableRings

	RegisterFiles2
	RegisterFilesUpdate2
	RegisterBuffers2
	RegisterBuffersUpdate

	RegisterIOWQAff
	UnregisterIOWQAff

	RegisterIOWQMaxWorkers

	RegisterRingFDs
	UnregisterRingFDs

	RegisterPbufRing
	UnregisterPbufRing

	RegisterSyncCancel

	RegisterFileAllocRange

	RegisterLast
)
View Source
const (
	IOWQBound uint = iota
	IOWQUnbound
)
View Source
const (
	SQNeedWakeup uint32 = 1 << iota
	SQCQOverflow
	SQTaskrun
)
View Source
const (
	SetupIOPoll uint32 = 1 << iota
	SetupSQPoll
	SetupSQAff
	SetupSQSize
	SetupClamp
	SetupAttachWQ
	SetupRDisabled
	SetupSubmitAll
	SetupCoopTaskrun
	SetupTaskrunFlag
	SetupSQE128
	SetupSQE32
	SetupSingleIssuer
	SetupDeferTaskrun
)
View Source
const (
	FeatSingleMMap uint32 = 1 << iota
	FeatNoDrop
	FeatSubmitStable
	FeatRWCurPos
	FeatCurPersonality
	FeatFastPoll
	FeatPoll32Bits
	FeatSQPollNonfixed
	FeatExtArg
	FeatNativeWorkers
	FeatRcrcTags
	FeatCQESkip
	FeatLinkedFile
)
View Source
const (
	SqeFixedFile uint8 = 1 << iota
	SqeIODrain
	SqeIOLink
	SqeIOHardlink
	SqeAsync
	SqeBufferSelect
	SqeCQESkipSuccess
)
View Source
const (
	TimeoutAbs uint32 = 1 << iota
	TimeoutUpdate
	TimeoutBoottime
	TimeoutRealtime
	LinkTimeoutUpdate
	TimeoutETimeSuccess
	TimeoutClockMask  = TimeoutBoottime | TimeoutRealtime
	TimeoutUpdateMask = TimeoutUpdate | LinkTimeoutUpdate
)
View Source
const (
	PollAddMulti uint32 = 1 << iota
	PollUpdateEvents
	PollUpdateUserData
	PollAddLevel
)
View Source
const (
	AsyncCancelAll uint32 = 1 << iota
	AsyncCancelFd
	AsyncCancelAny
	AsyncCancelFdFixed
)
View Source
const (
	RecvsendPollFirst uint16 = 1 << iota
	RecvMultishot
	RecvsendFixedBuf
)
View Source
const (
	MsgData uint32 = iota
	MsgSendFd
)
View Source
const (
	AcceptMultishot uint16 = 1 << iota
)
View Source
const CQEBufferShift uint32 = 16
View Source
const CQEventFdDisabled uint32 = 1 << 0
View Source
const FileIndexAlloc uint = 4294967295
View Source
const FsyncDatasync uint32 = 1 << 0
View Source
const (
	IntFlagRegRing uint8 = 1
)
View Source
const (
	MsgRingCQESkip uint32 = 1 << iota
)
View Source
const RegisterFilesSkip int = -2
View Source
const (
	RsrcRegisterSparse uint32 = 1 << iota
)
View Source
const SpliceFFdInFixed uint32 = 1 << 31

Variables

View Source
var (
	ErrNotImplemented     = errors.New("not implemented")
	ErrNotSupported       = errors.New("not supported")
	ErrTimerExpired       = errors.New("timer expired")
	ErrInterrupredSyscall = errors.New("interrupred system call")
	ErrAgain              = errors.New("try again")
	ErrSQEOverflow        = errors.New("SQE overflow")
)

Functions

func CheckAvailableFeatures

func CheckAvailableFeatures() (string, error)

func ErrorSQEOverflow

func ErrorSQEOverflow(overflowValue uint32) error

func IsOpSupported

func IsOpSupported(opCode uint8) (bool, error)

Types

type CQRingOffsets

type CQRingOffsets struct {
	// contains filtered or unexported fields
}

type CompletionQueue

type CompletionQueue struct {
	// contains filtered or unexported fields
}

type CompletionQueueEvent

type CompletionQueueEvent struct {
	// contains filtered or unexported fields
}

func (*CompletionQueueEvent) Flags

func (c *CompletionQueueEvent) Flags() uint32

func (*CompletionQueueEvent) FlagsString

func (c *CompletionQueueEvent) FlagsString() string

func (*CompletionQueueEvent) Res

func (c *CompletionQueueEvent) Res() int32

func (*CompletionQueueEvent) UserData

func (c *CompletionQueueEvent) UserData() uint64

type FilesUpdate

type FilesUpdate struct {
	Offset uint32
	Resv   uint32
	Fds    uint64
}

type Params

type Params struct {
	// contains filtered or unexported fields
}

type Probe

type Probe struct {
	LastOp uint8
	OpsLen uint8
	Res    uint16
	Res2   [3]uint32
	Ops    [probeOpsSize]probeOp
}

func (Probe) IsSupported

func (p Probe) IsSupported(op uint8) bool

type Ring

type Ring struct {
	// contains filtered or unexported fields
}

func CreateRing

func CreateRing() (*Ring, error)

func (*Ring) CQAdvance

func (ring *Ring) CQAdvance(numberOfCQEs uint32)

func (*Ring) CQESeen

func (ring *Ring) CQESeen(event *CompletionQueueEvent)

func (*Ring) Close

func (ring *Ring) Close() error

func (*Ring) Fd

func (ring *Ring) Fd() int

func (*Ring) FlushSQ

func (ring *Ring) FlushSQ() uint32

func (*Ring) GetSQE

func (ring *Ring) GetSQE() (*SubmissionQueueEntry, error)

func (*Ring) PeekBatchCQE

func (ring *Ring) PeekBatchCQE(cqes []*CompletionQueueEvent) int

func (*Ring) QueueExit

func (ring *Ring) QueueExit() error

func (*Ring) QueueInit

func (ring *Ring) QueueInit(entries uint, flags uint32) error

func (*Ring) QueueInitParams

func (ring *Ring) QueueInitParams(entries uint) error

func (*Ring) Register

func (ring *Ring) Register(op uint, arg unsafe.Pointer, nrArgs int) (uintptr, uintptr, error)

func (*Ring) RegisterBuffers

func (ring *Ring) RegisterBuffers(iovecs []syscall.Iovec) (uintptr, uintptr, error)

func (*Ring) RegisterFiles

func (ring *Ring) RegisterFiles(files unsafe.Pointer, nrFiles int) (uintptr, error)

func (*Ring) RegisterFilesSparse

func (ring *Ring) RegisterFilesSparse(nrFiles uint32) (uintptr, error)

func (*Ring) RegisterIOWQMaxWorkers

func (ring *Ring) RegisterIOWQMaxWorkers(args []uint) (uintptr, uintptr, error)

func (*Ring) RegisterProbe

func (ring *Ring) RegisterProbe() (*Probe, error)

func (*Ring) RegisterRingFd

func (ring *Ring) RegisterRingFd() (uintptr, error)

func (*Ring) SQReady

func (ring *Ring) SQReady() uint32

func (*Ring) SQSpaceLeft

func (ring *Ring) SQSpaceLeft() uint32

func (*Ring) Submit

func (ring *Ring) Submit() (uint, error)

func (*Ring) SubmitAndWait

func (ring *Ring) SubmitAndWait(waitNr uint64) (uint, error)

func (*Ring) SubmitAndWaitInternal

func (ring *Ring) SubmitAndWaitInternal(waitNr uint64) (uint, error)

func (*Ring) SubmitAndWaitTimeout

func (ring *Ring) SubmitAndWaitTimeout(waitNr uint32, timeSpec *syscall.Timespec) (*CompletionQueueEvent, error)

func (*Ring) SubmitInternal

func (ring *Ring) SubmitInternal(submitted uint32, waitNr uint64) (uint, error)

func (*Ring) UnmapRings

func (ring *Ring) UnmapRings() error

func (*Ring) UnregisterBuffers

func (ring *Ring) UnregisterBuffers() (uintptr, uintptr, error)

func (*Ring) UnregisterRingFd

func (ring *Ring) UnregisterRingFd() (uintptr, error)

func (*Ring) WaitCQE

func (ring *Ring) WaitCQE() (*CompletionQueueEvent, error)

func (*Ring) WaitCQENr

func (ring *Ring) WaitCQENr(waitNr uint32) (*CompletionQueueEvent, error)

type RsrcRegister

type RsrcRegister struct {
	Nr    uint32
	Resv  uint32
	Resv2 uint32
	Data  uint64
	Tags  uint64
}

type RsrcUpdate

type RsrcUpdate struct {
	Offset uint32
	Resv   uint32
	Data   uint64
}

type RsrcUpdate2

type RsrcUpdate2 struct {
	Offset uint32
	Resv   uint32
	Data   uint64
	Tags   uint64
	Nr     uint32
	Resv2  uint32
}

type SQRingOffsets

type SQRingOffsets struct {
	// contains filtered or unexported fields
}

type SubmissionQueue

type SubmissionQueue struct {
	// contains filtered or unexported fields
}

type SubmissionQueueEntry

type SubmissionQueueEntry struct {
	OpCode      uint8
	Flags       uint8
	IoPrio      uint16
	Fd          int32
	Off         uint64
	Addr        uint64
	Len         uint32
	OpcodeFlags uint32
	UserData    uint64

	BufIG       uint16
	Personality uint16
	SpliceFdIn  int32
	// contains filtered or unexported fields
}

func (*SubmissionQueueEntry) PrepareAccept

func (entry *SubmissionQueueEntry) PrepareAccept(fd int, addr uintptr, addrLen uint64, flags uint32)

func (*SubmissionQueueEntry) PrepareAcceptDirect

func (entry *SubmissionQueueEntry) PrepareAcceptDirect(
	fd int, addr uintptr, addrLen uint64, flags uint32, fileIndex uint,
)

func (*SubmissionQueueEntry) PrepareCancel

func (entry *SubmissionQueueEntry) PrepareCancel(_ uint64, _ int)

PrepareCancel has not been implemented yet.

func (*SubmissionQueueEntry) PrepareClose

func (entry *SubmissionQueueEntry) PrepareClose(fd int)

func (*SubmissionQueueEntry) PrepareCloseDirect

func (entry *SubmissionQueueEntry) PrepareCloseDirect(fileIndex uint)

func (*SubmissionQueueEntry) PrepareConnect

func (entry *SubmissionQueueEntry) PrepareConnect(_ int, _ uintptr, _ uint64)

PrepareConnect has not been implemented yet.

func (*SubmissionQueueEntry) PrepareConnectFilesUpdate

func (entry *SubmissionQueueEntry) PrepareConnectFilesUpdate(_ []int, _ uint64, _ uint)

PrepareConnectFilesUpdate has not been implemented yet.

func (*SubmissionQueueEntry) PrepareEpollCtrl

func (entry *SubmissionQueueEntry) PrepareEpollCtrl()

PrepareEpollCtrl has not been implemented yet.

func (*SubmissionQueueEntry) PrepareFadvise

func (entry *SubmissionQueueEntry) PrepareFadvise(
	_ int,
	_ uint64,
	_ uint32,
	_ int,
)

PrepareFadvise has not been implemented yet.

func (*SubmissionQueueEntry) PrepareFallocate

func (entry *SubmissionQueueEntry) PrepareFallocate(_ int, _ int, _ uint64, _ uint64)

PrepareFallocate has not been implemented yet.

func (*SubmissionQueueEntry) PrepareFgetxattr

func (entry *SubmissionQueueEntry) PrepareFgetxattr()

PrepareFgetxattr has not been implemented yet.

func (*SubmissionQueueEntry) PrepareFsetxattr

func (entry *SubmissionQueueEntry) PrepareFsetxattr()

PrepareFsetxattr has not been implemented yet.

func (*SubmissionQueueEntry) PrepareFsync

func (entry *SubmissionQueueEntry) PrepareFsync(_ int, _ uint)

PrepareFsync has not been implemented yet.

func (*SubmissionQueueEntry) PrepareGetxattr

func (entry *SubmissionQueueEntry) PrepareGetxattr()

PrepareGetxattr has not been implemented yet.

func (entry *SubmissionQueueEntry) PrepareLink()

PrepareLink has not been implemented yet.

func (*SubmissionQueueEntry) PrepareLinkTimeout

func (entry *SubmissionQueueEntry) PrepareLinkTimeout(_ *syscall.Timespec, _ uint)

PrepareLinkTimeout has not been implemented yet.

func (*SubmissionQueueEntry) PrepareLinkat

func (entry *SubmissionQueueEntry) PrepareLinkat()

PrepareLinkat has not been implemented yet.

func (*SubmissionQueueEntry) PrepareMadvise

func (entry *SubmissionQueueEntry) PrepareMadvise(
	_ uintptr,
	_ uint32,
	_ int,
)

PrepareMadvise has not been implemented yet.

func (*SubmissionQueueEntry) PrepareMkdir

func (entry *SubmissionQueueEntry) PrepareMkdir()

PrepareMkdir has not been implemented yet.

func (*SubmissionQueueEntry) PrepareMkdirat

func (entry *SubmissionQueueEntry) PrepareMkdirat()

PrepareMkdirat has not been implemented yet.

func (*SubmissionQueueEntry) PrepareMsgRing

func (entry *SubmissionQueueEntry) PrepareMsgRing(fd int, length uint32, data uint64, flags uint32)

func (*SubmissionQueueEntry) PrepareNop

func (entry *SubmissionQueueEntry) PrepareNop()

func (*SubmissionQueueEntry) PrepareOpenat

func (entry *SubmissionQueueEntry) PrepareOpenat(_ int, _ string, _ int, _ uint32)

PrepareOpenat has not been implemented yet.

func (*SubmissionQueueEntry) PrepareOpenat2

func (entry *SubmissionQueueEntry) PrepareOpenat2()

PrepareOpenat2 has not been implemented yet.

func (*SubmissionQueueEntry) PrepareOpenat2Direct

func (entry *SubmissionQueueEntry) PrepareOpenat2Direct()

PrepareOpenat2Direct has not been implemented yet.

func (*SubmissionQueueEntry) PrepareOpenatDirect

func (entry *SubmissionQueueEntry) PrepareOpenatDirect(_ int, _ string, _ int, _ uint32, _ uint)

PrepareOpenatDirect has not been implemented yet.

func (*SubmissionQueueEntry) PreparePollAdd

func (entry *SubmissionQueueEntry) PreparePollAdd(_ int, _ uint)

PreparePollAdd has not been implemented yet.

func (*SubmissionQueueEntry) PreparePollMultishot

func (entry *SubmissionQueueEntry) PreparePollMultishot(_ int, _ uint)

PreparePollMultishot has not been implemented yet.

func (*SubmissionQueueEntry) PreparePollRemove

func (entry *SubmissionQueueEntry) PreparePollRemove(_ int, _ uint64)

PreparePollRemove has not been implemented yet.

func (*SubmissionQueueEntry) PreparePollUpdate

func (entry *SubmissionQueueEntry) PreparePollUpdate(_ int, _, _ uint64, _, _ uint)

PreparePollUpdate has not been implemented yet.

func (*SubmissionQueueEntry) PrepareProvideBuffers

func (entry *SubmissionQueueEntry) PrepareProvideBuffers(
	addr uintptr,
	length uint32,
	fileDescriptor int,
	bgid uint64,
	off uint64,
)

func (*SubmissionQueueEntry) PrepareRead

func (entry *SubmissionQueueEntry) PrepareRead(
	_ int,
	_ uintptr,
	_ uint32,
	_ uint64,
)

PrepareRead has not been implemented yet.

func (*SubmissionQueueEntry) PrepareReadFixed

func (entry *SubmissionQueueEntry) PrepareReadFixed(
	fileDescriptor int,
	vectors uintptr,
	length uint32,
	offset uint64,
	index int,
)

func (*SubmissionQueueEntry) PrepareReadv

func (entry *SubmissionQueueEntry) PrepareReadv(fd int, iovecs uintptr, nrVecs uint32, offset uint64)

func (*SubmissionQueueEntry) PrepareReadv2

func (entry *SubmissionQueueEntry) PrepareReadv2(fd int, iovecs uintptr, nrVecs uint32, offset uint64, flags uint32)

func (*SubmissionQueueEntry) PrepareRecv

func (entry *SubmissionQueueEntry) PrepareRecv(
	fileDescriptor int,
	addr uintptr,
	length uint32,
	flags uint32,
)

func (*SubmissionQueueEntry) PrepareRecvMsg

func (entry *SubmissionQueueEntry) PrepareRecvMsg(
	fileDescriptor int,
	msg *syscall.Msghdr,
	flags uint32,
)

func (*SubmissionQueueEntry) PrepareRecvMultishot

func (entry *SubmissionQueueEntry) PrepareRecvMultishot(
	fileDescriptor int,
	addr uintptr,
	length uint32,
	flags uint32,
)

func (*SubmissionQueueEntry) PrepareRemoveBuffers

func (entry *SubmissionQueueEntry) PrepareRemoveBuffers()

PrepareRemoveBuffers has not been implemented yet.

func (*SubmissionQueueEntry) PrepareRemoveTimeout2

func (entry *SubmissionQueueEntry) PrepareRemoveTimeout2(ts *syscall.Timespec, count uint64, flags uint32)

func (*SubmissionQueueEntry) PrepareRename

func (entry *SubmissionQueueEntry) PrepareRename()

PrepareRename has not been implemented yet.

func (*SubmissionQueueEntry) PrepareRenameat

func (entry *SubmissionQueueEntry) PrepareRenameat()

PrepareRenameat has not been implemented yet.

func (*SubmissionQueueEntry) PrepareSend

func (entry *SubmissionQueueEntry) PrepareSend(
	fileDescriptor int,
	addr uintptr,
	length uint32,
	flags uint32,
)

func (*SubmissionQueueEntry) PrepareSendMsg

func (entry *SubmissionQueueEntry) PrepareSendMsg(
	fileDescriptor int,
	msg *syscall.Msghdr,
	flags uint32,
)

func (*SubmissionQueueEntry) PrepareSendSetAddr

func (entry *SubmissionQueueEntry) PrepareSendSetAddr(
	_ uintptr,
	_ uint16,
)

PrepareSendSetAddr has not been implemented yet.

func (*SubmissionQueueEntry) PrepareSendZC

func (entry *SubmissionQueueEntry) PrepareSendZC(
	_ int,
	_ uintptr,
	_ uint32,
	_ uint32,
	_ uint,
)

PrepareSendZC has not been implemented yet.

func (*SubmissionQueueEntry) PrepareSetxattr

func (entry *SubmissionQueueEntry) PrepareSetxattr()

PrepareSetxattr has not been implemented yet.

func (*SubmissionQueueEntry) PrepareShutdown

func (entry *SubmissionQueueEntry) PrepareShutdown()

PrepareShutdown has not been implemented yet.

func (*SubmissionQueueEntry) PrepareSocket

func (entry *SubmissionQueueEntry) PrepareSocket()

PrepareSocket has not been implemented yet.

func (*SubmissionQueueEntry) PrepareSocketDirect

func (entry *SubmissionQueueEntry) PrepareSocketDirect()

PrepareSocketDirect has not been implemented yet.

func (*SubmissionQueueEntry) PrepareSocketDirectAlloc

func (entry *SubmissionQueueEntry) PrepareSocketDirectAlloc()

PrepareSocketDirectAlloc has not been implemented yet.

func (*SubmissionQueueEntry) PrepareSplice

func (entry *SubmissionQueueEntry) PrepareSplice(
	_ int, _ int64, _ int, _ int64, _ uint, _ uint,
)

PrepareSplice has not been implemented yet.

func (*SubmissionQueueEntry) PrepareStatx

func (entry *SubmissionQueueEntry) PrepareStatx(
	_ int,
	_ string,
	_ int,
	_ uint,
	_ uintptr,
)

PrepareStatx has not been implemented yet.

func (entry *SubmissionQueueEntry) PrepareSymlink()

PrepareSymlink has not been implemented yet.

func (*SubmissionQueueEntry) PrepareSymlinkat

func (entry *SubmissionQueueEntry) PrepareSymlinkat()

PrepareSymlinkat has not been implemented yet.

func (*SubmissionQueueEntry) PrepareSyncFileRange

func (entry *SubmissionQueueEntry) PrepareSyncFileRange()

PrepareSyncFileRange has not been implemented yet.

func (*SubmissionQueueEntry) PrepareTee

func (entry *SubmissionQueueEntry) PrepareTee(_ int, _ int, _ uint, _ uint)

PrepareTee has not been implemented yet.

func (*SubmissionQueueEntry) PrepareTimeout

func (entry *SubmissionQueueEntry) PrepareTimeout(duration time.Duration, count uint64, flags uint32)

func (*SubmissionQueueEntry) PrepareTimeout2

func (entry *SubmissionQueueEntry) PrepareTimeout2(ts *syscall.Timespec, count uint64, flags uint32)

func (*SubmissionQueueEntry) PrepareTimeoutRemove

func (entry *SubmissionQueueEntry) PrepareTimeoutRemove(duration time.Duration, count uint64, flags uint32)

func (*SubmissionQueueEntry) PrepareTimeoutUpdate

func (entry *SubmissionQueueEntry) PrepareTimeoutUpdate(duration time.Duration, count uint64, flags uint32)
func (entry *SubmissionQueueEntry) PrepareUnlink()

PrepareUnlink has not been implemented yet.

func (*SubmissionQueueEntry) PrepareUnlinkat

func (entry *SubmissionQueueEntry) PrepareUnlinkat()

PrepareUnlinkat has not been implemented yet.

func (*SubmissionQueueEntry) PrepareUpdateTimeout2

func (entry *SubmissionQueueEntry) PrepareUpdateTimeout2(ts *syscall.Timespec, count uint64, flags uint32)

func (*SubmissionQueueEntry) PrepareWrite

func (entry *SubmissionQueueEntry) PrepareWrite(
	_ int,
	_ uintptr,
	_ uint32,
	_ uint64,
)

PrepareWrite has not been implemented yet.

func (*SubmissionQueueEntry) PrepareWriteFixed

func (entry *SubmissionQueueEntry) PrepareWriteFixed(
	fileDescriptor int,
	vectors uintptr,
	length uint32,
	offset uint64,
	index int,
)

func (*SubmissionQueueEntry) PrepareWritev

func (entry *SubmissionQueueEntry) PrepareWritev(
	fd int,
	iovecs uintptr,
	nrVecs uint32,
	offset uint64,
)

func (*SubmissionQueueEntry) PrepareWritev2

func (entry *SubmissionQueueEntry) PrepareWritev2(
	fd int,
	iovecs uintptr,
	nrVecs uint32,
	offset uint64,
	flags uint32,
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL