On 10/13/19 6:03 AM, Gerard Ryan wrote: > This is primarily to satiate the usage by docker/libnetwork. > Behaviour mirrors /tools/modprobe.c from https://git.kernel.org > > Signed-off-by: Gerard Ryan <g.m0n3y.2...@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 > > kmodloader.c | 76 +++++++++++++++++++++++++++++++--------------------- > 1 file changed, 46 insertions(+), 30 deletions(-)
Could you please split this into two patches, that would make it easier to review these changes. Hauke > > diff --git a/kmodloader.c b/kmodloader.c > index 422c895..a437509 100644 > --- a/kmodloader.c > +++ b/kmodloader.c > @@ -678,7 +678,9 @@ static int print_insmod_usage(void) > > static int print_modprobe_usage(void) > { > - ULOG_INFO("Usage:\n\tmodprobe [-q] filename\n"); > + ULOG_INFO("Usage:\n" > + "\tmodprobe [-q] [-v] filename\n" > + "\tmodprobe -a [-q] [-v] filename [filename...]\n"); > > return -1; > } > @@ -851,18 +853,26 @@ 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, "q")) != -1 ) { > + while ((opt = getopt(argc, argv, "aqv")) != -1 ) { > switch (opt) { > + case 'a': > + use_all = true; > + break; > case 'q': /* shhhh! */ > quiet = true; > break; > + case 'v': > + log_level = LOG_DEBUG; > + break; > default: /* '?' */ > return print_modprobe_usage(); > break; > @@ -872,7 +882,8 @@ static int main_modprobe(int argc, char **argv) > if (optind >= argc) > return print_modprobe_usage(); /* expected module after options > */ > > - mod = argv[optind]; > + /* after print_modprobe_usage() so it won't be filtered out */ > + ulog_threshold(log_level); > > if (scan_module_folders()) > return -1; > @@ -880,40 +891,45 @@ static int main_modprobe(int argc, char **argv) > 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@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel