That's a great function for debugging but I'm not sure whether it would be good as a command available to all. There should be at least some big warning that it can't be started multiple times. In the ideal case, add a lock so that it can only be started once.
A little more into the future, it most likely should be replaced by a deamon similar to the dhcpcd. Or it should be started from the rc.conf parser. Am 17.08.2017 um 03:33 schrieb Sichen Zhao: > Add fork command for wpa supplicant > to start a new task. > --- > freebsd/contrib/wpa/wpa_supplicant/main.c | 67 > +++++++++++++++++++++- > libbsd.py | 1 + > libbsd_waf.py | 1 + > rtemsbsd/include/machine/rtems-bsd-commands.h | 2 + > rtemsbsd/include/rtems/netcmds-config.h | 2 + > .../rtems/rtems-bsd-shell-wpa_supplicant_fork.c | 36 ++++++++++++ > 6 files changed, 108 insertions(+), 1 deletion(-) > create mode 100644 rtemsbsd/rtems/rtems-bsd-shell-wpa_supplicant_fork.c > > diff --git a/freebsd/contrib/wpa/wpa_supplicant/main.c > b/freebsd/contrib/wpa/wpa_supplicant/main.c > index 7347951..b2af31e 100644 > --- a/freebsd/contrib/wpa/wpa_supplicant/main.c > +++ b/freebsd/contrib/wpa/wpa_supplicant/main.c > @@ -18,7 +18,9 @@ > #include "wpa_supplicant_i.h" > #include "driver_i.h" > #include "p2p_supplicant.h" > - Again: Minus is bad. > +#ifdef __rtems__ > +#include <assert.h> > +#endif /* __rtems__ */ > > static void usage(void) > { > @@ -168,6 +170,69 @@ int rtems_bsd_command_wpa_supplicant(int argc, char > **argv) > > return exit_code; > } > + > +struct myparams { > + int argc; > + char ** argv; Use BSD-Style indentations. There are some more places in that file with wrong indentation. Please fix them too. > +}; > + > +static void > +new_wpa_supplicant_task(rtems_task_argument arg) > +{ > + int argc; > + char ** argv; > + int i; > + > + struct myparams *params = (struct myparams *)arg; > + argc = params->argc; > + argv = params->argv; > + > + rtems_bsd_command_wpa_supplicant(argc, argv); > + > + for (i = 0; i < params->argc; i++) { > + free(params->argv[i]); > + } > + free(params->argv); > + free(params); > + > + rtems_task_delete( RTEMS_SELF ); > +} > + > +int rtems_bsd_command_wpa_supplicant_fork(int argc, char **argv) > +{ > + rtems_status_code sc; > + rtems_id id; > + int i; > + > + struct myparams *params = malloc(sizeof(struct myparams)); > + if (params == NULL) > + return NULL; > + > + params->argc = argc; > + params->argv = malloc((argc + 1) * sizeof(argv[0])); > + if (params->argv == NULL) > + return NULL; > + > + for (i = 0; i < argc; i++) { > + params->argv[i] = strdup(argv[i]); > + if (params->argv[i] == NULL) You should free params->argv[x] for all x < i in that case. After that you should also free params->argv. Then you can return. Otherwise this might be a memory leak. > + return NULL; > + } > + params->argv[argc] = NULL; > + > + sc = rtems_task_create( > + rtems_build_name('W', 'P', 'A', 'S'), > + RTEMS_MAXIMUM_PRIORITY - 1, > + 8 * RTEMS_MINIMUM_STACK_SIZE, > + RTEMS_DEFAULT_MODES, > + RTEMS_FLOATING_POINT, > + &id > + ); > + assert(sc == RTEMS_SUCCESSFUL); > + > + sc = rtems_task_start(id, new_wpa_supplicant_task, params); > + assert(sc == RTEMS_SUCCESSFUL); > +} > #endif /* __rtems__ */ > > int main(int argc, char *argv[]) > diff --git a/libbsd.py b/libbsd.py > index a0b7f1a..9bb6f0b 100644 > --- a/libbsd.py > +++ b/libbsd.py > @@ -4237,6 +4237,7 @@ def usr_sbin_wpa_supplicant(mm): > mod.addRTEMSSourceFiles( > [ > 'rtems/rtems-bsd-shell-wpa_supplicant.c', > + 'rtems/rtems-bsd-shell-wpa_supplicant_fork.c', > ], > mm.generator['source']() > ) > diff --git a/libbsd_waf.py b/libbsd_waf.py > index 02b2cbd..28e3cf0 100644 > --- a/libbsd_waf.py > +++ b/libbsd_waf.py > @@ -2288,6 +2288,7 @@ def build(bld): > 'rtemsbsd/rtems/rtems-bsd-shell-vmstat.c', > 'rtemsbsd/rtems/rtems-bsd-shell-wlanstats.c', > 'rtemsbsd/rtems/rtems-bsd-shell-wpa_supplicant.c', > + 'rtemsbsd/rtems/rtems-bsd-shell-wpa_supplicant_fork.c', > 'rtemsbsd/rtems/rtems-bsd-syscall-api.c', > 'rtemsbsd/rtems/rtems-kernel-assert.c', > 'rtemsbsd/rtems/rtems-kernel-autoconf.c', > diff --git a/rtemsbsd/include/machine/rtems-bsd-commands.h > b/rtemsbsd/include/machine/rtems-bsd-commands.h > index 03a09bc..32aba44 100644 > --- a/rtemsbsd/include/machine/rtems-bsd-commands.h > +++ b/rtemsbsd/include/machine/rtems-bsd-commands.h > @@ -64,6 +64,8 @@ int rtems_bsd_command_dhcpcd(int argc, char **argv); > > int rtems_bsd_command_wpa_supplicant(int argc, char **argv); > > +int rtems_bsd_command_wpa_supplicant_fork(int argc, char **argv); > + > int rtems_bsd_command_tcpdump(int argc, char **argv); > > int rtems_bsd_command_sysctl(int argc, char **argv); > diff --git a/rtemsbsd/include/rtems/netcmds-config.h > b/rtemsbsd/include/rtems/netcmds-config.h > index 046c859..4af4323 100644 > --- a/rtemsbsd/include/rtems/netcmds-config.h > +++ b/rtemsbsd/include/rtems/netcmds-config.h > @@ -41,6 +41,8 @@ extern rtems_shell_cmd_t rtems_shell_TCPDUMP_Command; > > extern rtems_shell_cmd_t rtems_shell_WPA_SUPPLICANT_Command; > > +extern rtems_shell_cmd_t rtems_shell_WPA_SUPPLICANT_FORK_Command; > + > extern rtems_shell_cmd_t rtems_shell_SYSCTL_Command; > > extern rtems_shell_cmd_t rtems_shell_VMSTAT_Command; > diff --git a/rtemsbsd/rtems/rtems-bsd-shell-wpa_supplicant_fork.c > b/rtemsbsd/rtems/rtems-bsd-shell-wpa_supplicant_fork.c > new file mode 100644 > index 0000000..046b611 > --- /dev/null > +++ b/rtemsbsd/rtems/rtems-bsd-shell-wpa_supplicant_fork.c > @@ -0,0 +1,36 @@ > +/* > + * Copyright (c) 2017 Sichen Zhao. All rights reserved. > + * > + * <zsc19940...@gmail.com> > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * 1. Redistributions of source code must retain the above copyright > + * notice, this list of conditions and the following disclaimer. > + * 2. Redistributions in binary form must reproduce the above copyright > + * notice, this list of conditions and the following disclaimer in the > + * documentation and/or other materials provided with the distribution. > + * > + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND > + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE > + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE > + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE > + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL > + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS > + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) > + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT > + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY > + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF > + * SUCH DAMAGE. > + */ > + > +#include <rtems/netcmds-config.h> > +#include <machine/rtems-bsd-commands.h> > + > +rtems_shell_cmd_t rtems_shell_WPA_SUPPLICANT_FORK_Command = { > + .name = "wpa_supplicant_fork", > + .usage = "wpa_supplicant_fork [args]", Like already said on top: Add at least a BIG FAT WARNING that the process can not be restarted with that command. wpa_supplicant has to terminate on itself before you can restart it again. > + .topic = "net", > + .command = rtems_bsd_command_wpa_supplicant_fork > +}; > -- -------------------------------------------- embedded brains GmbH Christian Mauderer Dornierstr. 4 D-82178 Puchheim Germany email: christian.maude...@embedded-brains.de Phone: +49-89-18 94 741 - 18 Fax: +49-89-18 94 741 - 08 PGP: Public key available on request. Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG. _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel