svn commit: r368575 - head/stand/lua

Kyle Evans kevans at FreeBSD.org
Sat Dec 12 05:57:43 UTC 2020


Author: kevans
Date: Sat Dec 12 05:57:42 2020
New Revision: 368575
URL: https://svnweb.freebsd.org/changeset/base/368575

Log:
  lualoader: provide module-manipulation commands
  
  Specifically, we have:
  - enable-module
  - disable-module
  - toggle-module
  
  These can be used to add/remove modules to be loaded or force modules to be
  loaded in spite of modules_blacklist. In the typical case, a user is
  expected to use them to recover an issue happening due to a module directive
  they've added to their loader.conf or because they discover that they've
  under-specified what to load.
  
  MFC after:	1 week

Modified:
  head/stand/lua/cli.lua
  head/stand/lua/cli.lua.8
  head/stand/lua/config.lua
  head/stand/lua/config.lua.8

Modified: head/stand/lua/cli.lua
==============================================================================
--- head/stand/lua/cli.lua	Sat Dec 12 02:26:43 2020	(r368574)
+++ head/stand/lua/cli.lua	Sat Dec 12 05:57:42 2020	(r368575)
@@ -65,6 +65,14 @@ local function parseBootArgs(argv, with_kernel)
 	end
 end
 
+local function setModule(module, loading)
+	if loading and config.enableModule(module) then
+		print(module .. " will be loaded")
+	elseif not loading and config.disableModule(module) then
+		print(module .. " will not be loaded")
+	end
+end
+
 -- Declares a global function cli_execute that attempts to dispatch the
 -- arguments passed as a lua function. This gives lua a chance to intercept
 -- builtin CLI commands like "boot"
@@ -132,6 +140,37 @@ end
 
 cli['reload-conf'] = function()
 	config.reload()
+end
+
+cli["enable-module"] = function(...)
+	local _, argv = cli.arguments(...)
+	if #argv == 0 then
+		print("usage error: enable-module module")
+		return
+	end
+
+	setModule(argv[1], true)
+end
+
+cli["disable-module"] = function(...)
+	local _, argv = cli.arguments(...)
+	if #argv == 0 then
+		print("usage error: disable-module module")
+		return
+	end
+
+	setModule(argv[1], false)
+end
+
+cli["toggle-module"] = function(...)
+	local _, argv = cli.arguments(...)
+	if #argv == 0 then
+		print("usage error: toggle-module module")
+		return
+	end
+
+	local module = argv[1]
+	setModule(module, not config.isModuleEnabled(module))
 end
 
 -- Used for splitting cli varargs into cmd_name and the rest of argv

Modified: head/stand/lua/cli.lua.8
==============================================================================
--- head/stand/lua/cli.lua.8	Sat Dec 12 02:26:43 2020	(r368574)
+++ head/stand/lua/cli.lua.8	Sat Dec 12 05:57:42 2020	(r368575)
@@ -26,7 +26,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd September 13, 2019
+.Dd December 12, 2020
 .Dt CLI.LUA 8
 .Os
 .Sh NAME
@@ -77,14 +77,26 @@ This function may be invoked by a user at the loader p
 .Ic foo .
 Arguments may be passed to it as usual, space-delimited.
 .Ss Default Commands
-As of present, the
+The
 .Nm
-module by default provides commands for
-.Ic autoboot ,
-.Ic boot ,
-.Ic boot-conf ,
-and
-.Ic reload-conf .
+module provides the following default commands:
+.Bl -bullet
+.\"-width toggle-module -offset indent
+.It
+.Ic autoboot
+.It
+.Ic boot
+.It
+.Ic boot-conf
+.It
+.Ic reload-conf
+.It
+.Ic enable-module
+.It
+.Ic disable-module
+.It
+.Ic toggle-module
+.El
 .Pp
 For
 .Ic autoboot ,
@@ -103,6 +115,16 @@ The
 command will reload the configuration from disk.
 This is useful if you have manually changed currdev and would like to easily
 reload the configuration from the new device.
+.Pp
+The
+.Ic enable-module ,
+.Ic disable-module ,
+and
+.Ic toggle-module
+commands manipulate the list of modules to be loaded along with the kernel.
+Modules blacklisted are considered disabled by
+.Ic toggle-module .
+These commands will override any such restriction as needed.
 .Ss Exported Functions
 The following functions are exported from
 .Nm :

Modified: head/stand/lua/config.lua
==============================================================================
--- head/stand/lua/config.lua	Sat Dec 12 02:26:43 2020	(r368574)
+++ head/stand/lua/config.lua	Sat Dec 12 05:57:42 2020	(r368575)
@@ -312,7 +312,7 @@ local function loadModule(mod, silent)
 	for k, v in pairs(mod) do
 		if v.load ~= nil and v.load:lower() == "yes" then
 			local module_name = v.name or k
-			if blacklist[module_name] ~= nil then
+			if not v.force and blacklist[module_name] ~= nil then
 				if not silent then
 					print(MSG_MODBLACKLIST:format(module_name))
 				end
@@ -680,6 +680,45 @@ function config.loadelf()
 	status = loadModule(modules, not config.verbose)
 	hook.runAll("modules.loaded")
 	return status
+end
+
+function config.enableModule(modname)
+	if modules[modname] == nil then
+		modules[modname] = {}
+	elseif modules[modname].load == "YES" then
+		modules[modname].force = true
+		return true
+	end
+
+	modules[modname].load = "YES"
+	modules[modname].force = true
+	return true
+end
+
+function config.disableModule(modname)
+	if modules[modname] == nil then
+		return false
+	elseif modules[modname].load ~= "YES" then
+		return true
+	end
+
+	modules[modname].load = "NO"
+	modules[modname].force = nil
+	return true
+end
+
+function config.isModuleEnabled(modname)
+	local mod = modules[modname]
+	if not mod or mod.load ~= "YES" then
+		return false
+	end
+
+	if mod.force then
+		return true
+	end
+
+	local blacklist = getBlacklist()
+	return blacklist[modname]
 end
 
 hook.registerType("config.loaded")

Modified: head/stand/lua/config.lua.8
==============================================================================
--- head/stand/lua/config.lua.8	Sat Dec 12 02:26:43 2020	(r368574)
+++ head/stand/lua/config.lua.8	Sat Dec 12 05:57:42 2020	(r368575)
@@ -26,7 +26,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd April 30, 2020
+.Dd December 12, 2020
 .Dt CONFIG.LUA 8
 .Os
 .Sh NAME
@@ -184,6 +184,25 @@ This will be called by the Lua intercepted
 and
 .Ic boot
 commands.
+.It Fn config.enableModule modname
+Marks a module named
+.Fa modname
+to be loaded during
+.Fn config.loadelf .
+If the module was previously blacklisted, then it will be forcefully allowed to
+load.
+.It Fn config.disableModule modname
+Marks a module named
+.Fa modname
+to not be loaded during
+.Fn config.loadelf .
+.It Fn config.isModuleEnabled modname
+Checks if the module named
+.Fa modname
+will be loaded during
+.Fn config.loadelf .
+It checks both that the module is marked for loading and that it is either
+forced or not blacklisted.
 .El
 .Ss Defined Hooks
 The following hooks are defined in


More information about the svn-src-all mailing list