[PATCH v2 6/6] dhcpcd: Add hooks
Sebastian Huber
sebastian.huber at embedded-brains.de
Mon May 7 11:23:26 UTC 2018
On 07/05/18 09:54, Sebastian Huber wrote:
> On 07/05/18 09:31, Chris Johns wrote:
>> On 07/05/2018 17:04, Sebastian Huber wrote:
>>> On 04/05/18 02:42, Chris Johns wrote:
>>>> On 03/05/2018 16:49, Sebastian Huber wrote:
>>>>
>>>>> +#endif /* __rtems__ */
>>>>> diff --git a/dhcpcd/namespace.h b/dhcpcd/namespace.h
>>>>> index efff909ad..c9f5fb1fa 100644
>>>>> --- a/dhcpcd/namespace.h
>>>>> +++ b/dhcpcd/namespace.h
>>>>> @@ -156,6 +156,7 @@ extern rtems_recursive_mutex dhcpcd_mutex;
>>>>> #define print_string dhcpcd_print_string
>>>>> #define read_config dhcpcd_read_config
>>>>> #define read_lease dhcpcd_read_lease
>>>>> +#define script_runreason dhcpcd_script_runreason
>>>>> #define select_profile dhcpcd_select_profile
>>>>> #define set_cloexec dhcpcd_set_cloexec
>>>>> #define set_nonblock dhcpcd_set_nonblock
>>>>> diff --git a/dhcpcd/script.c b/dhcpcd/script.c
>>>>> index 2de1e6347..2c184c248 100644
>>>>> --- a/dhcpcd/script.c
>>>>> +++ b/dhcpcd/script.c
>>>>> @@ -51,7 +51,30 @@
>>>>> #include "ipv6nd.h"
>>>>> #include "net.h"
>>>>> #include "script.h"
>>>>> +#ifdef __rtems__
>>>>> +#include <rtems/dhcpcd.h>
>>>>> +static SLIST_HEAD(, rtems_dhcpcd_hook) dhcpcd_hooks =
>>>>> + SLIST_HEAD_INITIALIZER(dhcpcd_hooks);
>>>>> +
>>>>> +void
>>>>> +rtems_dhcpcd_add_hook(rtems_dhcpcd_hook *hook)
>>>>> +{
>>>>> + rtems_recursive_mutex_lock(&dhcpcd_mutex);
>>>>> + SLIST_INSERT_HEAD(&dhcpcd_hooks, hook, node);
>>>>> + rtems_recursive_mutex_unlock(&dhcpcd_mutex);
>>>>> +}
>>>>> +
>>>>> +void
>>>>> +rtems_dhcpcd_remove_hook(rtems_dhcpcd_hook *hook)
>>>>> +{
>>>>> + rtems_recursive_mutex_lock(&dhcpcd_mutex);
>>>>> + SLIST_REMOVE(&dhcpcd_hooks, hook, rtems_dhcpcd_hook, node);
>>>>> + rtems_recursive_mutex_unlock(&dhcpcd_mutex);
>>>>> +}
>>>>> +#endif /* __rtems__ */
>>>> This seems like a common issue we will face with FreeBSD, I am sure
>>>> callouts
>>>> which normally exec's something would be needed else where. I am
>>>> thinking of
>>>> wifi?
>>>>
>>>> Could this be made a common base type struct and used here?
>>> I am not sure if the handler signature will be the same.
>> There is some historical logic behind scripts with argc/argv and that
>> is it's
>> common interface of a command line. The rc.conf code provides a way
>> to manage
>> argc/argv which can be reused.
>>
>> Given this interface is to replace exec'ing a script why not call with
>> argc/argv? There must be exiting support to do this?
>
> The dhcpcd doesn't use argc and argv to pass information to the
> scripts. It uses the environment. I have to check how this could be
> mapped.
The dhcpcd function to execute the scripts is
static int exec_script(char *const *argv, char *const *env)
which uses posix_spawn(). The argv is just
char *const argv[2] = { UNCONST(ifp->options->script), NULL };
Information is passed to the scripts via the environment.
This doesn't map well to the argc/argv style used elsewhere. What would
you do here?
--
Sebastian Huber, embedded brains GmbH
Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone : +49 89 189 47 41-16
Fax : +49 89 189 47 41-09
E-Mail : sebastian.huber at embedded-brains.de
PGP : Public key available on request.
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
More information about the devel
mailing list