cmdline module options can be disabled on "big" modutils
Allow module options on command line to be disabled on "big" modutils. Config FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is renamed to FEATURE_CMDLINE_MODULE_OPTIONS and no longer depends on !MODPROBE_SMALL (I'm not sure if disabling this is useful on "big" modutils, but at least the macro can serve as a marker and ensure both implementations of same feature have consistent behavior.) Signed-off-by: Kang-Che Sung <explorer09@gmail.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
264cb01540
commit
b1d6a2c624
@ -37,6 +37,14 @@ INSERT
|
|||||||
|
|
||||||
comment "Options common to multiple modutils"
|
comment "Options common to multiple modutils"
|
||||||
|
|
||||||
|
config FEATURE_CMDLINE_MODULE_OPTIONS
|
||||||
|
bool "Accept module options on modprobe command line"
|
||||||
|
default y
|
||||||
|
depends on INSMOD || MODPROBE
|
||||||
|
help
|
||||||
|
Allow insmod and modprobe take module options from the applets'
|
||||||
|
command line.
|
||||||
|
|
||||||
config FEATURE_2_4_MODULES
|
config FEATURE_2_4_MODULES
|
||||||
bool "Support version 2.2/2.4 Linux kernels"
|
bool "Support version 2.2/2.4 Linux kernels"
|
||||||
default n
|
default n
|
||||||
|
@ -27,9 +27,9 @@
|
|||||||
|
|
||||||
//usage:#if !ENABLE_MODPROBE_SMALL
|
//usage:#if !ENABLE_MODPROBE_SMALL
|
||||||
//usage:#define insmod_trivial_usage
|
//usage:#define insmod_trivial_usage
|
||||||
//usage: IF_FEATURE_2_4_MODULES("[OPTIONS] MODULE ")
|
//usage: IF_FEATURE_2_4_MODULES("[OPTIONS] MODULE")
|
||||||
//usage: IF_NOT_FEATURE_2_4_MODULES("FILE ")
|
//usage: IF_NOT_FEATURE_2_4_MODULES("FILE")
|
||||||
//usage: "[SYMBOL=VALUE]..."
|
//usage: IF_FEATURE_CMDLINE_MODULE_OPTIONS(" [SYMBOL=VALUE]...")
|
||||||
//usage:#define insmod_full_usage "\n\n"
|
//usage:#define insmod_full_usage "\n\n"
|
||||||
//usage: "Load kernel module"
|
//usage: "Load kernel module"
|
||||||
//usage: IF_FEATURE_2_4_MODULES( "\n"
|
//usage: IF_FEATURE_2_4_MODULES( "\n"
|
||||||
|
@ -10,13 +10,6 @@
|
|||||||
|
|
||||||
/* config MODPROBE_SMALL is defined in Config.src to ensure better "make config" order */
|
/* config MODPROBE_SMALL is defined in Config.src to ensure better "make config" order */
|
||||||
|
|
||||||
//config:config FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE
|
|
||||||
//config: bool "Accept module options on modprobe command line"
|
|
||||||
//config: default y
|
|
||||||
//config: depends on MODPROBE_SMALL && (INSMOD || MODPROBE)
|
|
||||||
//config: help
|
|
||||||
//config: Allow insmod and modprobe take module options from command line.
|
|
||||||
//config:
|
|
||||||
//config:config FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED
|
//config:config FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED
|
||||||
//config: bool "Skip loading of already loaded modules"
|
//config: bool "Skip loading of already loaded modules"
|
||||||
//config: default y
|
//config: default y
|
||||||
@ -690,7 +683,7 @@ static int rmmod(const char *filename)
|
|||||||
* NB: also called by depmod with bogus name "/",
|
* NB: also called by depmod with bogus name "/",
|
||||||
* just in order to force modprobe.dep.bb creation.
|
* just in order to force modprobe.dep.bb creation.
|
||||||
*/
|
*/
|
||||||
#if !ENABLE_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE
|
#if !ENABLE_FEATURE_CMDLINE_MODULE_OPTIONS
|
||||||
#define process_module(a,b) process_module(a)
|
#define process_module(a,b) process_module(a)
|
||||||
#define cmdline_options ""
|
#define cmdline_options ""
|
||||||
#endif
|
#endif
|
||||||
@ -735,7 +728,7 @@ static int process_module(char *name, const char *cmdline_options)
|
|||||||
options = xmalloc_open_read_close(opt_filename, NULL);
|
options = xmalloc_open_read_close(opt_filename, NULL);
|
||||||
if (options)
|
if (options)
|
||||||
replace(options, '\n', ' ');
|
replace(options, '\n', ' ');
|
||||||
#if ENABLE_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE
|
#if ENABLE_FEATURE_CMDLINE_MODULE_OPTIONS
|
||||||
if (cmdline_options) {
|
if (cmdline_options) {
|
||||||
/* NB: cmdline_options always have one leading ' '
|
/* NB: cmdline_options always have one leading ' '
|
||||||
* (see main()), we remove it here */
|
* (see main()), we remove it here */
|
||||||
@ -910,7 +903,7 @@ The following options are useful for people managing distributions:
|
|||||||
//usage:#define depmod_full_usage ""
|
//usage:#define depmod_full_usage ""
|
||||||
|
|
||||||
//usage:#define insmod_trivial_usage
|
//usage:#define insmod_trivial_usage
|
||||||
//usage: "FILE" IF_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(" [SYMBOL=VALUE]...")
|
//usage: "FILE" IF_FEATURE_CMDLINE_MODULE_OPTIONS(" [SYMBOL=VALUE]...")
|
||||||
//usage:#define insmod_full_usage "\n\n"
|
//usage:#define insmod_full_usage "\n\n"
|
||||||
//usage: "Load kernel module"
|
//usage: "Load kernel module"
|
||||||
|
|
||||||
@ -920,7 +913,7 @@ The following options are useful for people managing distributions:
|
|||||||
//usage: "Unload kernel modules"
|
//usage: "Unload kernel modules"
|
||||||
|
|
||||||
//usage:#define modprobe_trivial_usage
|
//usage:#define modprobe_trivial_usage
|
||||||
//usage: "[-rq] MODULE" IF_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(" [SYMBOL=VALUE]...")
|
//usage: "[-rq] MODULE" IF_FEATURE_CMDLINE_MODULE_OPTIONS(" [SYMBOL=VALUE]...")
|
||||||
//usage:#define modprobe_full_usage "\n\n"
|
//usage:#define modprobe_full_usage "\n\n"
|
||||||
//usage: " -r Remove MODULE"
|
//usage: " -r Remove MODULE"
|
||||||
//usage: "\n -q Quiet"
|
//usage: "\n -q Quiet"
|
||||||
@ -934,7 +927,7 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
int exitcode;
|
int exitcode;
|
||||||
#endif
|
#endif
|
||||||
struct utsname uts;
|
struct utsname uts;
|
||||||
IF_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(char *options = NULL;)
|
IF_FEATURE_CMDLINE_MODULE_OPTIONS(char *options = NULL;)
|
||||||
|
|
||||||
INIT_G();
|
INIT_G();
|
||||||
|
|
||||||
@ -998,7 +991,7 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
if (!ONLY_APPLET)
|
if (!ONLY_APPLET)
|
||||||
option_mask32 |= OPT_r;
|
option_mask32 |= OPT_r;
|
||||||
} else if (!ENABLE_MODPROBE || !(option_mask32 & OPT_r)) {
|
} else if (!ENABLE_MODPROBE || !(option_mask32 & OPT_r)) {
|
||||||
# if ENABLE_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE
|
# if ENABLE_FEATURE_CMDLINE_MODULE_OPTIONS
|
||||||
/* If not rmmod/-r, parse possible module options given on command line.
|
/* If not rmmod/-r, parse possible module options given on command line.
|
||||||
* insmod/modprobe takes one module name, the rest are parameters. */
|
* insmod/modprobe takes one module name, the rest are parameters. */
|
||||||
char **arg = argv;
|
char **arg = argv;
|
||||||
@ -1023,7 +1016,7 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
if (!map)
|
if (!map)
|
||||||
bb_perror_msg_and_die("can't read '%s'", *argv);
|
bb_perror_msg_and_die("can't read '%s'", *argv);
|
||||||
if (init_module(map, len,
|
if (init_module(map, len,
|
||||||
(IF_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(options ? options : ) "")
|
(IF_FEATURE_CMDLINE_MODULE_OPTIONS(options ? options : ) "")
|
||||||
) != 0
|
) != 0
|
||||||
) {
|
) {
|
||||||
bb_error_msg_and_die("can't insert '%s': %s",
|
bb_error_msg_and_die("can't insert '%s': %s",
|
||||||
@ -1045,7 +1038,7 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
} while (*++argv);
|
} while (*++argv);
|
||||||
|
|
||||||
if (ENABLE_FEATURE_CLEAN_UP) {
|
if (ENABLE_FEATURE_CLEAN_UP) {
|
||||||
IF_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(free(options);)
|
IF_FEATURE_CMDLINE_MODULE_OPTIONS(free(options);)
|
||||||
}
|
}
|
||||||
return exitcode;
|
return exitcode;
|
||||||
#endif /* MODPROBE || INSMOD || RMMOD */
|
#endif /* MODPROBE || INSMOD || RMMOD */
|
||||||
|
@ -112,7 +112,7 @@
|
|||||||
//usage:
|
//usage:
|
||||||
//usage:#define modprobe_trivial_usage
|
//usage:#define modprobe_trivial_usage
|
||||||
//usage: "[-alrqvsD" IF_FEATURE_MODPROBE_BLACKLIST("b") "]"
|
//usage: "[-alrqvsD" IF_FEATURE_MODPROBE_BLACKLIST("b") "]"
|
||||||
//usage: " MODULE [SYMBOL=VALUE]..."
|
//usage: " MODULE" IF_FEATURE_CMDLINE_MODULE_OPTIONS(" [SYMBOL=VALUE]...")
|
||||||
//usage:#define modprobe_full_usage "\n\n"
|
//usage:#define modprobe_full_usage "\n\n"
|
||||||
//usage: " -a Load multiple MODULEs"
|
//usage: " -a Load multiple MODULEs"
|
||||||
//usage: "\n -l List (MODULE is a pattern)"
|
//usage: "\n -l List (MODULE is a pattern)"
|
||||||
@ -174,7 +174,9 @@ static const char modprobe_longopts[] ALIGN1 =
|
|||||||
|
|
||||||
struct globals {
|
struct globals {
|
||||||
llist_t *probes; /* MEs of module(s) requested on cmdline */
|
llist_t *probes; /* MEs of module(s) requested on cmdline */
|
||||||
|
#if ENABLE_FEATURE_CMDLINE_MODULE_OPTIONS
|
||||||
char *cmdline_mopts; /* module options from cmdline */
|
char *cmdline_mopts; /* module options from cmdline */
|
||||||
|
#endif
|
||||||
int num_unresolved_deps;
|
int num_unresolved_deps;
|
||||||
/* bool. "Did we have 'symbol:FOO' requested on cmdline?" */
|
/* bool. "Did we have 'symbol:FOO' requested on cmdline?" */
|
||||||
smallint need_symbols;
|
smallint need_symbols;
|
||||||
@ -458,8 +460,10 @@ static int do_modprobe(struct module_entry *m)
|
|||||||
options = m2->options;
|
options = m2->options;
|
||||||
m2->options = NULL;
|
m2->options = NULL;
|
||||||
options = parse_and_add_kcmdline_module_options(options, m2->modname);
|
options = parse_and_add_kcmdline_module_options(options, m2->modname);
|
||||||
|
#if ENABLE_FEATURE_CMDLINE_MODULE_OPTIONS
|
||||||
if (m == m2)
|
if (m == m2)
|
||||||
options = gather_options_str(options, G.cmdline_mopts);
|
options = gather_options_str(options, G.cmdline_mopts);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (option_mask32 & OPT_SHOW_DEPS) {
|
if (option_mask32 & OPT_SHOW_DEPS) {
|
||||||
printf(options ? "insmod %s/%s/%s %s\n"
|
printf(options ? "insmod %s/%s/%s %s\n"
|
||||||
@ -626,7 +630,9 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
/* First argument is module name, rest are parameters */
|
/* First argument is module name, rest are parameters */
|
||||||
DBG("probing just module %s", *argv);
|
DBG("probing just module %s", *argv);
|
||||||
add_probe(argv[0]);
|
add_probe(argv[0]);
|
||||||
|
#if ENABLE_FEATURE_CMDLINE_MODULE_OPTIONS
|
||||||
G.cmdline_mopts = parse_cmdline_module_options(argv, /*quote_spaces:*/ 1);
|
G.cmdline_mopts = parse_cmdline_module_options(argv, /*quote_spaces:*/ 1);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Happens if all requested modules are already loaded */
|
/* Happens if all requested modules are already loaded */
|
||||||
|
@ -120,6 +120,7 @@ char* FAST_FUNC filename2modname(const char *filename, char *modname)
|
|||||||
return modname;
|
return modname;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if ENABLE_FEATURE_CMDLINE_MODULE_OPTIONS
|
||||||
char* FAST_FUNC parse_cmdline_module_options(char **argv, int quote_spaces)
|
char* FAST_FUNC parse_cmdline_module_options(char **argv, int quote_spaces)
|
||||||
{
|
{
|
||||||
char *options;
|
char *options;
|
||||||
@ -155,6 +156,7 @@ char* FAST_FUNC parse_cmdline_module_options(char **argv, int quote_spaces)
|
|||||||
/* if (optlen != 0) options[optlen-1] = '\0'; */
|
/* if (optlen != 0) options[optlen-1] = '\0'; */
|
||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if ENABLE_FEATURE_INSMOD_TRY_MMAP
|
#if ENABLE_FEATURE_INSMOD_TRY_MMAP
|
||||||
void* FAST_FUNC try_to_mmap_module(const char *filename, size_t *image_size_p)
|
void* FAST_FUNC try_to_mmap_module(const char *filename, size_t *image_size_p)
|
||||||
|
@ -51,7 +51,11 @@ void replace(char *s, char what, char with) FAST_FUNC;
|
|||||||
char *replace_underscores(char *s) FAST_FUNC;
|
char *replace_underscores(char *s) FAST_FUNC;
|
||||||
int string_to_llist(char *string, llist_t **llist, const char *delim) FAST_FUNC;
|
int string_to_llist(char *string, llist_t **llist, const char *delim) FAST_FUNC;
|
||||||
char *filename2modname(const char *filename, char *modname) FAST_FUNC;
|
char *filename2modname(const char *filename, char *modname) FAST_FUNC;
|
||||||
|
#if ENABLE_FEATURE_CMDLINE_MODULE_OPTIONS
|
||||||
char *parse_cmdline_module_options(char **argv, int quote_spaces) FAST_FUNC;
|
char *parse_cmdline_module_options(char **argv, int quote_spaces) FAST_FUNC;
|
||||||
|
#else
|
||||||
|
# define parse_cmdline_module_options(argv, quote_spaces) ""
|
||||||
|
#endif
|
||||||
|
|
||||||
/* insmod for 2.4 and modprobe's options (insmod 2.6 has no options at all): */
|
/* insmod for 2.4 and modprobe's options (insmod 2.6 has no options at all): */
|
||||||
#define INSMOD_OPTS \
|
#define INSMOD_OPTS \
|
||||||
|
Loading…
Reference in New Issue
Block a user