Module linux
Various Linux kernel facilities.
This library includes functions for random number generation, task scheduling,
time retrieval, kernel symbol lookup, network interface information,
byte order conversion, and access to kernel constants like file modes,
task states, and error numbers.
errno |
Table of error number constants. |
signal |
Table of signal constants for use with linux.kill. |
stat |
Table of file mode constants. |
task |
Table of task state constants. |
be16toh (num) |
Converts a 16-bit integer from big-endian byte order to host byte order. |
be32toh (num) |
Converts a 32-bit integer from big-endian byte order to host byte order. |
be64toh (num) |
Converts a 64-bit integer from big-endian byte order to host byte order. |
htobe16 (num) |
Converts a 16-bit integer from host byte order to big-endian byte order. |
htobe32 (num) |
Converts a 32-bit integer from host byte order to big-endian byte order. |
htobe64 (num) |
Converts a 64-bit integer from host byte order to big-endian byte order. |
htole16 (num) |
Converts a 16-bit integer from host byte order to little-endian byte order. |
htole32 (num) |
Converts a 32-bit integer from host byte order to little-endian byte order. |
htole64 (num) |
Converts a 64-bit integer from host byte order to little-endian byte order. |
hton16 (num) |
Converts a 16-bit integer from host byte order to network (big-endian) byte order. |
hton32 (num) |
Converts a 32-bit integer from host byte order to network (big-endian) byte order. |
hton64 (num) |
Converts a 64-bit integer from host byte order to network (big-endian) byte order. |
le16toh (num) |
Converts a 16-bit integer from little-endian byte order to host byte order. |
le32toh (num) |
Converts a 32-bit integer from little-endian byte order to host byte order. |
le64toh (num) |
Converts a 64-bit integer from little-endian byte order to host byte order. |
ntoh16 (num) |
Converts a 16-bit integer from network (big-endian) byte order to host byte order. |
ntoh32 (num) |
Converts a 32-bit integer from network (big-endian) byte order to host byte order. |
ntoh64 (num) |
Converts a 64-bit integer from network (big-endian) byte order to host byte order. |
-
difftime (t2, t1)
-
Calculates the difference between two timestamps.
Parameters:
- t2
integer
The later timestamp (e.g., from
linux.time()
).
- t1
integer
The earlier timestamp (e.g., from
linux.time()
).
Returns:
integer
The difference t2 - t1
in nanoseconds.
-
ifindex (interface_name)
-
Gets the interface index for a network device name.
Parameters:
- interface_name
string
The name of the network interface (e.g., "eth0").
Returns:
integer
The interface index.
Raises:
Error if the device is not found.
Usage:
local index = linux.ifindex("lo")
print("Index of lo:", index)
-
kill (pid[, sig])
-
Kills a process by sending a signal.
By default, sends SIGKILL.
An optional second argument can specify a different signal (either by number or by using the constants from linux.signal).
Parameters:
- pid
integer
Process ID to kill.
- sig
integer
Signal number to send (default:
linux.signal.KILL
).
(optional)
Returns:
-
boolean
true
if the signal was sent successfully.
-
boolean
false
followed by an error number if the operation fails.
Raises:
Errors:
- (3): The specified PID doesn't exist
- other errno values depending on the failure cause (e.g., EPERM
, EINVAL
, etc.)
Usage:
linux.kill(1234) linux.kill(1234, linux.signal.TERM)
-
lookup (symbol_name)
-
Looks up a kernel symbol by name.
Uses
kallsyms_lookup_name
(potentially via kprobes) to find the address
of a kernel symbol.
Parameters:
- symbol_name
string
The name of the kernel symbol to look up.
Returns:
lightuserdata
The address of the symbol if found, otherwise nil
(represented as a NULL lightuserdata).
Usage:
local addr = linux.lookup("jiffies")
if addr then print("Address of jiffies:", addr) end
-
random ([m[, n]])
-
Generates pseudo-random integers.
Mimics the behavior of Lua's math.random but uses kernel's random number
generation facilities (
get_random_u32
or get_random_u64
).
Parameters:
- m
integer
Lower bound of the range. If only one argument
n
is provided, m
defaults to 1.
(optional)
- n
integer
Upper bound of the range.
(optional)
Returns:
integer
A pseudo-random integer.
- If called without arguments, returns an integer with all bits pseudo-random.
- If called with one integer n
, returns a pseudo-random integer in the range [1, n]
.
- If called with two integers m
and n
, returns a pseudo-random integer in the range [m, n]
.
Raises:
Error if m > n
or if the interval is too large.
Usage:
local r1 = linux.random() local r2 = linux.random(100) local r3 = linux.random(50, 60)
-
schedule ([timeout[, state]])
-
Puts the current task to sleep.
Sets the current task's state and schedules it out until a timeout occurs
or it is woken up.
Parameters:
- timeout
integer
Duration in milliseconds to sleep. Defaults to
MAX_SCHEDULE_TIMEOUT
(effectively indefinite sleep until woken).
(optional)
- state
integer
The task state to set before sleeping. See linux.task for possible values. Defaults to
linux.task.INTERRUPTIBLE
.
(optional)
Returns:
integer
The remaining time in milliseconds if the sleep was interrupted before the full timeout, or 0 if the full timeout elapsed.
Raises:
Error if an invalid task state is provided.
See also:
Usage:
linux.schedule(1000) linux.schedule(500, linux.task.UNINTERRUPTIBLE)
-
time ()
-
Gets the current real time.
Returns:
integer
The current time in nanoseconds since the epoch (from ktime_get_real_ns
).
-
tracing ([enable])
-
Controls kernel tracing.
Turns kernel tracing on or off via
tracing_on()
and tracing_off()
.
Parameters:
- enable
boolean
If
true
, turns tracing on. If false
, turns tracing off. If omitted, does not change the state.
(optional)
Returns:
boolean
The current state of kernel tracing (true
if on, false
if off) after any change.
Usage:
local was_tracing = linux.tracing(true) if was_tracing then print("Tracing is now on") end
local current_state = linux.tracing() linux.tracing(false)
-
errno
-
Table of error number constants.
Exports common errno values from
<uapi/asm-generic/errno-base.h>
.
Fields:
- PERM
integer
Operation not permitted (EPERM).
- NOENT
integer
No such file or directory (ENOENT).
- SRCH
integer
No such process (ESRCH).
- INTR
integer
Interrupted system call (EINTR).
- IO
integer
I/O error (EIO).
- NXIO
integer
No such device or address (ENXIO).
- E2BIG
integer
Argument list too long (E2BIG). (Lua field name is "2BIG")
- NOEXEC
integer
Exec format error (ENOEXEC).
- BADF
integer
Bad file number (EBADF).
- CHILD
integer
No child processes (ECHILD).
- AGAIN
integer
Try again (EAGAIN).
- NOMEM
integer
Out of memory (ENOMEM).
- ACCES
integer
Permission denied (EACCES).
- FAULT
integer
Bad address (EFAULT).
- NOTBLK
integer
Block device required (ENOTBLK).
- BUSY
integer
Device or resource busy (EBUSY).
- EXIST
integer
File exists (EEXIST).
- XDEV
integer
Cross-device link (EXDEV).
- NODEV
integer
No such device (ENODEV).
- NOTDIR
integer
Not a directory (ENOTDIR).
- ISDIR
integer
Is a directory (EISDIR).
- INVAL
integer
Invalid argument (EINVAL).
- NFILE
integer
File table overflow (ENFILE).
- MFILE
integer
Too many open files (EMFILE).
- NOTTY
integer
Not a typewriter (ENOTTY).
- TXTBSY
integer
Text file busy (ETXTBSY).
- FBIG
integer
File too large (EFBIG).
- NOSPC
integer
No space left on device (ENOSPC).
- SPIPE
integer
Illegal seek (ESPIPE).
- ROFS
integer
Read-only file system (EROFS).
- MLINK
integer
Too many links (EMLINK).
- PIPE
integer
Broken pipe (EPIPE).
- DOM
integer
Math argument out of domain of func (EDOM).
- RANGE
integer
Math result not representable (ERANGE).
-
signal
-
Table of signal constants for use with linux.kill.
This table provides named constants for the standard Linux signals.
For example,
linux.signal.TERM
corresponds to SIGTERM (15).
Fields:
- HUP
integer
SIGHUP (1) - Hangup
- INT
integer
SIGINT (2) - Interrupt (Ctrl-C)
- QUIT
integer
SIGQUIT (3) - Quit
- ILL
integer
SIGILL (4) - Illegal instruction
- TRAP
integer
SIGTRAP (5) - Trace trap
- ABRT
integer
SIGABRT (6) - Abort
- BUS
integer
SIGBUS (7) - Bus error
- FPE
integer
SIGFPE (8) - Floating point exception
- KILL
integer
SIGKILL (9) - Kill (cannot be caught/ignored)
- USR1
integer
SIGUSR1 (10) - User-defined signal 1
- SEGV
integer
SIGSEGV (11) - Segmentation violation
- USR2
integer
SIGUSR2 (12) - User-defined signal 2
- PIPE
integer
SIGPIPE (13) - Broken pipe
- ALRM
integer
SIGALRM (14) - Alarm clock
- TERM
integer
SIGTERM (15) - Termination (default for kill command)
- STKFLT
integer
SIGSTKFLT (16) - Stack fault
- CHLD
integer
SIGCHLD (17) - Child status changed
- CONT
integer
SIGCONT (18) - Continue if stopped
- STOP
integer
SIGSTOP (19) - Stop (cannot be caught/ignored)
- TSTP
integer
SIGTSTP (20) - Terminal stop
- TTIN
integer
SIGTTIN (21) - Background read from tty
- TTOU
integer
SIGTTOU (22) - Background write to tty
- URG
integer
SIGURG (23) - Urgent condition on socket
- XCPU
integer
SIGXCPU (24) - CPU limit exceeded
- XFSZ
integer
SIGXFSZ (25) - File size limit exceeded
- VTALRM
integer
SIGVTALRM (26) - Virtual alarm clock
- PROF
integer
SIGPROF (27) - Profiling alarm clock
- WINCH
integer
SIGWINCH (28) - Window size change
- IO
integer
SIGIO (29) - I/O now possible
- PWR
integer
SIGPWR (30) - Power failure
- SYS
integer
SIGSYS (31) - Bad system call
-
stat
-
Table of file mode constants.
Exports file permission flags from
<linux/stat.h>
. These can be used, for
example, with device.new()
to set the mode of a character device.
Fields:
- IRWXU
integer
Read, write, execute for owner. (S_IRWXU)
- IRUSR
integer
Read for owner. (S_IRUSR)
- IWUSR
integer
Write for owner. (S_IWUSR)
- IXUSR
integer
Execute for owner. (S_IXUSR)
- IRWXG
integer
Read, write, execute for group. (S_IRWXG)
- IRGRP
integer
Read for group. (S_IRGRP)
- IWGRP
integer
Write for group. (S_IWGRP)
- IXGRP
integer
Execute for group. (S_IXGRP)
- IRWXO
integer
Read, write, execute for others. (S_IRWXO)
- IROTH
integer
Read for others. (S_IROTH)
- IWOTH
integer
Write for others. (S_IWOTH)
- IXOTH
integer
Execute for others. (S_IXOTH)
- IRWXUGO
integer
Read, write, execute for user, group, and others. (SIRWXU|SIRWXG|S_IRWXO)
- IALLUGO
integer
All permissions for user, group, and others, including SUID, SGID, SVTX. (SISUID|SISGID|SISVTX|SIRWXUGO)
- IRUGO
integer
Read for user, group, and others. (SIRUSR|SIRGRP|S_IROTH)
- IWUGO
integer
Write for user, group, and others. (SIWUSR|SIWGRP|S_IWOTH)
- IXUGO
integer
Execute for user, group, and others. (SIXUSR|SIXGRP|S_IXOTH)
See also:
-
task
-
Table of task state constants.
Exports task state flags from
<linux/sched.h>
. These are used with
linux.schedule()
.
Fields:
- INTERRUPTIBLE
integer
Task is waiting for a signal or a resource (sleeping), can be interrupted.
- UNINTERRUPTIBLE
integer
Task is waiting (sleeping), cannot be interrupted by signals (except fatal ones if KILLABLE is also implied by context).
- KILLABLE
integer
Task is waiting (sleeping) like UNINTERRUPTIBLE, but can be interrupted by fatal signals.
- IDLE
integer
Task is idle, similar to UNINTERRUPTIBLE but avoids loadavg accounting.
See also:
-
be16toh (num)
-
Converts a 16-bit integer from big-endian byte order to host byte order.
Parameters:
- num
integer
The 16-bit integer in big-endian byte order.
Returns:
integer
The integer in host byte order.
-
be32toh (num)
-
Converts a 32-bit integer from big-endian byte order to host byte order.
Parameters:
- num
integer
The 32-bit integer in big-endian byte order.
Returns:
integer
The integer in host byte order.
-
be64toh (num)
-
Converts a 64-bit integer from big-endian byte order to host byte order.
Parameters:
- num
integer
The 64-bit integer in big-endian byte order.
Returns:
integer
The integer in host byte order.
-
htobe16 (num)
-
Converts a 16-bit integer from host byte order to big-endian byte order.
Parameters:
- num
integer
The 16-bit integer in host byte order.
Returns:
integer
The integer in big-endian byte order.
-
htobe32 (num)
-
Converts a 32-bit integer from host byte order to big-endian byte order.
Parameters:
- num
integer
The 32-bit integer in host byte order.
Returns:
integer
The integer in big-endian byte order.
-
htobe64 (num)
-
Converts a 64-bit integer from host byte order to big-endian byte order.
Parameters:
- num
integer
The 64-bit integer in host byte order.
Returns:
integer
The integer in big-endian byte order.
-
htole16 (num)
-
Converts a 16-bit integer from host byte order to little-endian byte order.
Parameters:
- num
integer
The 16-bit integer in host byte order.
Returns:
integer
The integer in little-endian byte order.
-
htole32 (num)
-
Converts a 32-bit integer from host byte order to little-endian byte order.
Parameters:
- num
integer
The 32-bit integer in host byte order.
Returns:
integer
The integer in little-endian byte order.
-
htole64 (num)
-
Converts a 64-bit integer from host byte order to little-endian byte order.
Parameters:
- num
integer
The 64-bit integer in host byte order.
Returns:
integer
The integer in little-endian byte order.
-
hton16 (num)
-
Converts a 16-bit integer from host byte order to network (big-endian) byte order.
Parameters:
- num
integer
The 16-bit integer in host byte order.
Returns:
integer
The integer in network byte order.
-
hton32 (num)
-
Converts a 32-bit integer from host byte order to network (big-endian) byte order.
Parameters:
- num
integer
The 32-bit integer in host byte order.
Returns:
integer
The integer in network byte order.
-
hton64 (num)
-
Converts a 64-bit integer from host byte order to network (big-endian) byte order.
Parameters:
- num
integer
The 64-bit integer in host byte order.
Returns:
integer
The integer in network byte order.
-
le16toh (num)
-
Converts a 16-bit integer from little-endian byte order to host byte order.
Parameters:
- num
integer
The 16-bit integer in little-endian byte order.
Returns:
integer
The integer in host byte order.
-
le32toh (num)
-
Converts a 32-bit integer from little-endian byte order to host byte order.
Parameters:
- num
integer
The 32-bit integer in little-endian byte order.
Returns:
integer
The integer in host byte order.
-
le64toh (num)
-
Converts a 64-bit integer from little-endian byte order to host byte order.
Parameters:
- num
integer
The 64-bit integer in little-endian byte order.
Returns:
integer
The integer in host byte order.
-
ntoh16 (num)
-
Converts a 16-bit integer from network (big-endian) byte order to host byte order.
Parameters:
- num
integer
The 16-bit integer in network byte order.
Returns:
integer
The integer in host byte order.
-
ntoh32 (num)
-
Converts a 32-bit integer from network (big-endian) byte order to host byte order.
Parameters:
- num
integer
The 32-bit integer in network byte order.
Returns:
integer
The integer in host byte order.
-
ntoh64 (num)
-
Converts a 64-bit integer from network (big-endian) byte order to host byte order.
Parameters:
- num
integer
The 64-bit integer in network byte order.
Returns:
integer
The integer in host byte order.