On 03/12/2015 04:32 PM, Harald Becker wrote:
On 12.03.2015 19:38, Michael Conrad wrote:
On 3/12/2015 12:04 PM, Harald Becker wrote:
but that one will only work when you either use the kernel hotplug
helper mechanism, or the netlink approach. You drop out those who
can't / doesn't want to use either.

...which I really do think could be answered in one paragraph :-) If the
netlink socket is the "right way" to solve the forkbomb problem that
happens with hotplug helpers, then why would anyone want to solve it the
wrong way?  I don't understand the need.

To clarify,
  1 - kernel-spawned hotplug helpers is the traditional way,
2 - netlink socket daemon is the "right way to solve the forkbomb problem" 3 - kernel-spawned fifo-writer, with fifo read by hotplug daemon is "solve it the wrong way".

ohh, good question! ... ask Isaac! (answer in one paragraph?)

What I hear Isaac say is "leave #1 (traditional way) alone. I want to keep using it".

I agree with him that it should stay. But I would choose to use #2 if it were available. I am asking the purpose of #3.

Conclusion: As I accept different preferences, and I do not want to force others more than possible, I tried to find a solution which allows every required mechanism (with maximum code sharing), and let the user chose which one to use. In addition BB has a config system which allows to disable unwanted stuff, so you can opt out the hotplug stuff when you like.

So I think your answer to my original question is "the fifo design is a way to have #1 and #2 without duplicating code".

In that case, I would offer this idea:

1.  Refactor mdev to look like this:  (pseudocode)

   mdev_main() {
     read_options();
     load_config();
     process_request(); // from environment variables
   }

2.  Add the following:

  mdev_main() {
    read_options();
    load_config();
    #ifdef FEATURE_MDEV_NETLINK
    if (option_netlink) {
      open_netlink_socket();
      while (recv(message)) {
        apply_env_from_message(message);
        process_request();
      }
    }
    else
    #endif
      process_request();
  }

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 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
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to