RFD: Rework/extending functionality of mdev

Natanael Copa ncopa at alpinelinux.org
Fri Mar 13 15:53:22 UTC 2015


On Thu, 12 Mar 2015 19:05:01 -0400
Michael Conrad <mconrad at intellitree.com> wrote:

> In that case, I would offer this idea:

Thanks. Your pseudo code makes perfect sense to me.

...

> 3.  Then to support the ability to launch mdev connected to a netlink 
> socket that already exists, and time out when not used,
> 
>    mdev_main() {
>      read_options();
>      load_config();
>      #ifdef FEATURE_MDEV_NETLINK
>      if (option_netlink) {
>        if (!option_netlink_on_stdin) {
>          close(0);
>          open_netlink_socket();
>        }
>        while (select([0], timeout)) {
>          if (recv(0, message)) {
>            apply_env_from_message(message);
>            process_request();
>          }
>        }
>      }
>      else
>      #endif
>        process_request();
>    }

I have the feeling (without digging into the busybox code) that making
mdev suitable for a longlived daemon will not be that easy. I suspect
there are lots of error handling that will just exit. A long lived
daemon would need log and continue instead.

If I am right about that, then those who wants the option_netlink case
will probably need run the netlink listener as separate process anyway
and instead set the timeout to "never".

Then we end up with:

    mdev_main() {
      read_options();
      load_config();
      #ifdef FEATURE_MDEV_STDIN
        while (select([0], timeout)) {
          if (recv(0, message)) {
            apply_env_from_message(message);
            process_request();
          }
        }
      #else
        process_request();
      #endif
    }

This would be enough for me.
 
> I think this will be even smaller than what you propose with the fifo.  
> It will do netlink, it will do the traditional hotplug helper, and even 
> allow the trick where a tiny daemon monitors netlink and can start mdev 
> in daemon mode on demand.
> 
> -Mike



More information about the busybox mailing list