[OpenWrt-Devel] [OpenWrt-Devel V2 2/2] kmodloader: added -a arg to modeprobe

John Crispin john at phrozen.org
Mon Oct 21 07:17:44 EDT 2019


On 20/10/2019 08:01, Gerard Ryan wrote:
> This is primarily to satiate the usage by docker/libnetwork.
> Behaviour mirrors /tools/modprobe.c from https://git.kernel.org
Hi,
you should describe here what the -a flag actually does.
I have manually fixed it for 1/2 but please rework 2/2 and send that one
	John

> 
> Signed-off-by: Gerard Ryan <G.M0N3Y.2503 at gmail.com>
> ---
> Compile tested: x86_x64, Hyper-V, OpenWrt Master
> Run tested: x86_x64, Hyper-V, OpenWrt Master
> 
> You can also find this patch on GitHub if you prefer.
> https://github.com/G-M0N3Y-2503/openwrt-ubox-mirror/tree/feature_extend_modprobe_options
> 
> Since https://patchwork.ozlabs.org/patch/1175792/ I adjusted some whitespace to indent more consistently and split the patch by the args they implement.
> 
>   kmodloader.c | 68 +++++++++++++++++++++++++++++-----------------------
>   1 file changed, 38 insertions(+), 30 deletions(-)
> 
> diff --git a/kmodloader.c b/kmodloader.c
> index 07b6700..838bc8c 100644
> --- a/kmodloader.c
> +++ b/kmodloader.c
> @@ -681,6 +681,7 @@ static int print_modprobe_usage(void)
>   	ULOG_INFO(
>   		"Usage:\n"
>   		"\tmodprobe [-q] [-v] filename\n"
> +		"\tmodprobe -a [-q] [-v] filename [filename...]\n"
>   	);
> 
>   	return -1;
> @@ -854,16 +855,20 @@ static int main_modinfo(int argc, char **argv)
> 
>   static int main_modprobe(int argc, char **argv)
>   {
> +	int exit_code = EXIT_SUCCESS;
>   	struct module_node *mn;
>   	struct module *m;
> -	char *name;
> -	char *mod = NULL;
> +	int load_fail;
>   	int log_level = LOG_WARNING;
>   	int opt;
>   	bool quiet = false;
> +	bool use_all = false;
> 
> -	while ((opt = getopt(argc, argv, "qv")) != -1 ) {
> +	while ((opt = getopt(argc, argv, "aqv")) != -1 ) {
>   		switch (opt) {
> +			case 'a':
> +				use_all = true;
> +				break;
>   			case 'q': /* shhhh! */
>   				quiet = true;
>   				break;
> @@ -882,48 +887,51 @@ static int main_modprobe(int argc, char **argv)
>   	/* after print_modprobe_usage() so it won't be filtered out */
>   	ulog_threshold(log_level);
> 
> -	mod = argv[optind];
> -
>   	if (scan_module_folders())
>   		return -1;
> 
>   	if (scan_loaded_modules())
>   		return -1;
> 
> -	name = get_module_name(mod);
> -	m = find_module(name);
> -	if (m && m->state == LOADED) {
> -		if (!quiet)
> -			ULOG_ERR("%s is already loaded\n", name);
> -		return 0;
> -	} else if (!m) {
> -		if (!quiet)
> -			ULOG_ERR("failed to find a module named %s\n", name);
> -		return -1;
> -	} else {
> -		int fail;
> +	do {
> +		char *name;
> 
> -		m->state = PROBE;
> +		name = get_module_name(argv[optind]);
> +		m = find_module(name);
> 
> -		fail = load_modprobe(true);
> +		if (m && m->state == LOADED) {
> +			if (!quiet)
> +				ULOG_INFO("%s is already loaded\n", name);
> +		} else if (!m) {
> +			if (!quiet)
> +				ULOG_ERR("failed to find a module named %s\n", name);
> +			exit_code = EXIT_FAILURE;
> +		} else {
> +			m->state = PROBE;
> +		}
> 
> -		if (fail) {
> -			ULOG_ERR("%d module%s could not be probed\n",
> -			         fail, (fail == 1) ? ("") : ("s"));
> +		optind++;
> +	} while (use_all && optind < argc);
> 
> -			avl_for_each_element(&modules, mn, avl) {
> -				if (mn->is_alias)
> -					continue;
> -				m = mn->m;
> -				if ((m->state == PROBE) || m->error)
> -					ULOG_ERR("- %s\n", m->name);
> -			}
> +	load_fail = load_modprobe(true);
> +	if (load_fail) {
> +		ULOG_ERR("%d module%s could not be probed\n",
> +		         load_fail, (load_fail == 1) ? ("") : ("s"));
> +
> +		avl_for_each_element(&modules, mn, avl) {
> +			if (mn->is_alias)
> +				continue;
> +			m = mn->m;
> +			if ((m->state == PROBE) || m->error)
> +				ULOG_ERR("- %s\n", m->name);
>   		}
> +
> +		exit_code = EXIT_FAILURE;
>   	}
> 
>   	free_modules();
> 
> -	return 0;
> +	return exit_code;
>   }
> 
>   static int main_loader(int argc, char **argv)
> --
> 2.17.1
> 
> 
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel at lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel
> 


_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list