RFD: Rework/extending functionality of mdev
Harald Becker
ralda at gmx.de
Sat Mar 14 00:04:02 UTC 2015
On 13.03.2015 21:32, Michael Conrad wrote:
> Are you suggesting even the netlink mode will have a process reading the
> netlink socket and writing the fifo, so another process and can process
> the fifo? The netlink messages are already a simple protocol, just use
> it as-is. Pass the
You got the function of the fifo manager (or supervisor) wrong. This
little process does never read or touch the fifo data, it's purpose is
to fire up the parser (pipe consumer) when any gathering part as written
something into the pipe and there is no running parser process. In
addition this supervisor may spawn a failure_script, when the parser
abort unexpectedly.
Have you ever used tcpsvd ?
This piece open a network socket, then accept incoming connections and
pass the socket to a spawned service process.
The fifo manager does the same for the named pipe.
The data flow is:
netlink daemon -> pipe -> parser
or
hotplug helper -> pipe -> parser
>> The new code behaves exactly as the old code. When used as a hotplug
>> helper, it suffers from parsing conf for each event. My approach is a
>> splitting of the old mdev into two active threads, which avoid those
>> problems even for those who like to stay at kernel hotplug.
>
> Then it sounds like indeed, you are introducing new configuration steps
> for the old-style hotplug helper?
?
i.e. where does the fifo live?
at a simple default: /dev/.xdev-pipe, because any reading of such
parameters in the hotplug helper would slow down the operation. Remember
hotplug helpers a spawned in parallel.
> who owns it?
The only user who's allowed to do netlink operation, load modules,
create any device nodes, etc. -> root:root
> what security implications does this have?
Mode of the fifo will be 0600 = rw-------
> Who starts the single back-end mdev processor?
This is the job of the fifo manager (or named pipe supervisor). The
processor, as you call it, is started on demand, when data is written to
the fifo, the processor has to die when when idle for some time.
> If started from the hotplug-helper, who ensures that only one gets started?
? started from the hotplug helper? the helper won't ever start anything,
just:
hotplug helper:
gather event information
sanitize message
open named pipe for writing
(ok, if this open fails seriously, we are in big trouble)
(true for many other such operations)
(to be discussed what's best failure handling for this)
if pipe is open, (safe) write the event message
(the safe means, in loop and checking for success)
exit 0
netlink reader:
open named pipe
(for failures here have already added an option)
(will spawn a given script with failure reason)
(or otherwise retries some times, then die)
open netlink socket
in an endless loop
wait for messages arriving
sanitize message
(safe) write the event message into the pipe
fifosvd:
create named pipe (fifo)
open fifo for reading and writing in none blocking mode
in an endless loop
wait for data arriving in pipe (poll)
spawn the parser process redirecting stdin from fifo
wait for exit of the spawned process
if not exited successfully
spawn the given failure script with arguments
if failure script exits unsuccessful, then die
parser:
read conf file into memory table
while read next message from stdin with timeout
sanity checks of message (paranoia)
lookup device entry in memory table
do required operation for the message
Is this better for you?
I really hate code hacking before I'm able to finish planing.
> If people have existing systems using hotplug-helper mdev, you can't
> just change the implementation on them in a way that requires extra
> configuration.
Which extra configuration?
> Everyone who has commented on this thread so far agrees with that.
You definitely misunderstand my approach and how it works!
--
Harald
More information about the busybox
mailing list