1*dd855896Swiz.\" $NetBSD: lua.4,v 1.5 2014/07/26 20:04:05 wiz Exp $ 296d1a832Smbalmer.\" 396d1a832Smbalmer.\" Copyright (c) 2013 Marc Balmer <marc@msys.ch> 496d1a832Smbalmer.\" 596d1a832Smbalmer.\" Permission to use, copy, modify, and distribute this software for any 696d1a832Smbalmer.\" purpose with or without fee is hereby granted, provided that the above 796d1a832Smbalmer.\" copyright notice and this permission notice appear in all copies. 896d1a832Smbalmer.\" 996d1a832Smbalmer.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1096d1a832Smbalmer.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1196d1a832Smbalmer.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1296d1a832Smbalmer.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1396d1a832Smbalmer.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1496d1a832Smbalmer.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1596d1a832Smbalmer.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1696d1a832Smbalmer.\" 178b412359Sapb.Dd July 25, 2014 1896d1a832Smbalmer.Dt LUA 4 1996d1a832Smbalmer.Os 2096d1a832Smbalmer.Sh NAME 2196d1a832Smbalmer.Nm lua 2296d1a832Smbalmer.Nd control in-kernel Lua states 2396d1a832Smbalmer.Sh SYNOPSIS 2496d1a832Smbalmer.Cd "lua*" 2596d1a832Smbalmer.Pp 2696d1a832Smbalmer.In sys/types.h 2796d1a832Smbalmer.In sys/lua.h 2896d1a832Smbalmer.Sh DESCRIPTION 2996d1a832SmbalmerThe 3096d1a832Smbalmer.Nm 311408be80Swizdevice allows to create, control, and delete Lua states in the kernel 3296d1a832Smbalmerthrough an 3396d1a832Smbalmer.Xr ioctl 2 3496d1a832Smbalmerinterface. 3596d1a832SmbalmerMoreover, 3696d1a832Smbalmer.Nm 3796d1a832Smbalmercan be used to load Lua scripts into a Lua state and to assign modules to an 3896d1a832Smbalmerexisting state, i.e. perform the equivalent of the Lua command 3996d1a832Smbalmer.Em require . 4096d1a832Smbalmer.Nm 4196d1a832Smbalmeris also used to retrieve information about currently active Lua states. 4296d1a832Smbalmer.Sh LUA MODULES 4396d1a832SmbalmerLua modules are used to provide functionality to Lua scripts not available 4496d1a832Smbalmerin the language itself, e.g. to access core kernel functionality like 4596d1a832Smbalmerprinting text on the console. 4696d1a832SmbalmerUnlike in user space Lua, where Lua modules are files in the filesystem, 471408be80Swizmodules must be provided to 481408be80Swiz.Nm 491408be80Swizin the form of loadable kernel modules that register their 501408be80Swizfunctionality with 511408be80Swiz.Nm . 521408be80SwizModules are loaded using the 531408be80Swiz.Ic require 541408be80SwizLua command; whether this command 551408be80Swizis available or not is controlled by a 561408be80Swiz.Xr sysctl 8 571408be80Swizvariable. 5896d1a832Smbalmer.Nm 5996d1a832Smbalmerby default tries to load a kernel module named 6096d1a832Smbalmer.Em luafoo.kmod 6196d1a832Smbalmerwhen it encounters the Lua command 6296d1a832Smbalmer.Em require 'foo' . 6396d1a832Smbalmer.Sh SYSCTL VARIABLES 6496d1a832SmbalmerThe operation of 6596d1a832Smbalmer.Nm 6696d1a832Smbalmercan be controlled by means of the following 6796d1a832Smbalmer.Xr sysctl 8 6896d1a832Smbalmervariables: 697112cd15Snjoly.Bl -tag -width XXXX 7096d1a832Smbalmer.It Dv kern.lua.autoload 7196d1a832SmbalmerWhen set to 1, 7296d1a832Smbalmer.Nm 7396d1a832Smbalmertries to autoload kernel modules. 7496d1a832Smbalmer.Pp 7596d1a832SmbalmerThe default value is 1. 7696d1a832Smbalmer.It Dv kern.lua.bytecode 7796d1a832SmbalmerWhen set to 1, loading of Lua bytecode is allowed. 7896d1a832Smbalmer.Pp 7996d1a832SmbalmerThe default value is 0. 8096d1a832Smbalmer.It Dv kern.lua.maxcount 8196d1a832SmbalmerWhen set to a value > 0, 8296d1a832Smbalmer.Nm 8396d1a832Smbalmerlimits the number of instructions executed 8496d1a832Smbalmerto this number. 8596d1a832Smbalmer.Pp 8696d1a832SmbalmerThe default value is 0. 8796d1a832Smbalmer.It Dv kern.lua.require 8896d1a832SmbalmerWhen set to 1, enables the 8996d1a832Smbalmer.Em require 9096d1a832Smbalmercommand in Lua. 9196d1a832Smbalmer.Pp 9296d1a832SmbalmerThe default value is 1. 9396d1a832Smbalmer.It Dv kern.lua.verbose 9496d1a832SmbalmerWhen set to a value > 0, verbosity is increased. 9596d1a832Smbalmer.Pp 9696d1a832SmbalmerThe default value is 0. 9796d1a832Smbalmer.El 9896d1a832Smbalmer.Sh IOCTL INTERFACE 9996d1a832SmbalmerThe following structures and constants are defined in the 10096d1a832Smbalmer.In sys/lua.h 10196d1a832Smbalmerheader file: 10296d1a832Smbalmer.Pp 10396d1a832Smbalmer.Bl -tag -width XXXX -compact 10496d1a832Smbalmer.It Dv LUAINFO(struct lua_info) 10596d1a832SmbalmerReturns information about the 10696d1a832Smbalmer.Nm 10796d1a832Smbalmerstates in the 10896d1a832Smbalmer.Fa lua_info 10996d1a832Smbalmerstructure: 11096d1a832Smbalmer.Bd -literal 11196d1a832Smbalmer#define MAX_LUA_NAME 16 11296d1a832Smbalmer#define MAX_LUA_DESC 64 11396d1a832Smbalmer 11496d1a832Smbalmerstruct lua_state_info { 11596d1a832Smbalmer char name[MAX_LUA_NAME]; 11696d1a832Smbalmer char desc[MAX_LUA_DESC]; 11796d1a832Smbalmer bool user; 11896d1a832Smbalmer}; 11996d1a832Smbalmer 12096d1a832Smbalmerstruct lua_info { 12196d1a832Smbalmer int num_states; /* total number of Lua states */ 12296d1a832Smbalmer struct lua_state_info *states; 12396d1a832Smbalmer}; 12496d1a832Smbalmer.Ed 12596d1a832Smbalmer.Pp 12696d1a832Smbalmer.It Dv LUACREATE(struct lua_create) 12796d1a832SmbalmerCreate a new named Lua state with name and description in the 12896d1a832Smbalmer.Fa lua_create 12996d1a832Smbalmerstructure: 13096d1a832Smbalmer.Bd -literal 13196d1a832Smbalmerstruct lua_create { 13296d1a832Smbalmer char name[MAX_LUA_NAME]; 13396d1a832Smbalmer char desc[MAX_LUA_DESC]; 13496d1a832Smbalmer}; 13596d1a832Smbalmer.Ed 13696d1a832Smbalmer.Pp 1371408be80Swiz.It Dv LUADESTROY(struct lua_create) 13896d1a832SmbalmerDestroy a named Lua state. 13996d1a832Smbalmer.Pp 14096d1a832Smbalmer.It Dv LUAREQUIRE(struct lua_require) 14196d1a832SmbalmerPerform the equivalent of the Lua command 14296d1a832Smbalmer.Em require 14396d1a832Smbalmerin a named state. 14496d1a832SmbalmerThe name of the state and of the module name is passed in the 14596d1a832Smbalmer.Fa lua_require 14696d1a832Smbalmerstructure: 14796d1a832Smbalmer.Bd -literal 14896d1a832Smbalmer#define LUA_MAX_MODNAME 32 14996d1a832Smbalmer 15096d1a832Smbalmerstruct lua_require { 15196d1a832Smbalmer char state[MAX_LUA_NAME]; 15296d1a832Smbalmer char module[LUA_MAX_MODNAME]; 15396d1a832Smbalmer}; 15496d1a832Smbalmer.Ed 15596d1a832Smbalmer.Pp 15696d1a832Smbalmer.It Dv LUALOAD(struct lua_load) 15796d1a832SmbalmerLoad Lua code from the filesystem into a named Lua state. 15896d1a832SmbalmerThe name of the state and the path to the Lua code are passed in the 15996d1a832Smbalmer.Fa lua_load 16096d1a832Smbalmerstructure: 16196d1a832Smbalmer.Bd -literal 16296d1a832Smbalmerstruct lua_load { 16396d1a832Smbalmer char state[MAX_LUA_NAME]; 16496d1a832Smbalmer char path[MAXPATHLEN]; 16596d1a832Smbalmer}; 16696d1a832Smbalmer.Ed 16796d1a832Smbalmer.Pp 16896d1a832SmbalmerThe path element of the 16996d1a832Smbalmer.Fa lua_load 1701408be80Swizstructure must contain at least one 1711408be80Swiz.Sq / 1721408be80Swizcharacter. 17396d1a832Smbalmer.Pp 17496d1a832Smbalmer.El 17596d1a832Smbalmer.Sh FILES 17696d1a832Smbalmer.Bl -tag -width "/dev/lua" -compact 17796d1a832Smbalmer.It /dev/lua 17896d1a832SmbalmerLua device file. 17996d1a832Smbalmer.El 18096d1a832Smbalmer.Sh SEE ALSO 18196d1a832Smbalmer.Xr ioctl 2 , 1821408be80Swiz.Xr luactl 8 18396d1a832Smbalmer.Sh HISTORY 18496d1a832SmbalmerThe 18596d1a832Smbalmer.Nm 18696d1a832Smbalmerdevice first appeared in 1871408be80Swiz.Nx 7.0 . 18896d1a832Smbalmer.Sh AUTHORS 18996d1a832Smbalmer.An -nosplit 19096d1a832SmbalmerThe 19196d1a832Smbalmer.Nm 19296d1a832Smbalmerdriver was written by 19396d1a832Smbalmer.An Marc Balmer Aq Mt mbalmer@NetBSD.org . 194*dd855896Swiz.Sh CAVEATS 195*dd855896SwizThe 196*dd855896Swiz.Nm 197*dd855896Swizdevice is experimental. 198*dd855896SwizIncompatible changes might be made in the future. 199