[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