Lennart,

There's more to it than that.  The DECnet kernel module must first be loaded so 
that it creates /proc/net/decnet*.  When the dnetd service is started, it 
parses /etc/decnet.conf and writes the DECnet host address to 
/proc/sys/net/decnet/node_address and the default DECnet device (interface) to 
/proc/sys/net/decnet/default_device.  The MAC address of all the DECnet 
interfaces has to be changed to a special multicast address.  This all usually 
must be done before IP networking is started.  I am not sure that a socket can 
be opened before networking is up.

Larry Baker
US Geological Survey
650-329-5608
[email protected]



On 24 Jan 2013, at 4:03 PM, Lennart Poettering wrote:

> On Thu, 24.01.13 14:08, Larry Baker ([email protected]) wrote:
> 
>> I am converting the init script (see below) for Linux DECnet 
>> (http://sourceforge.net/projects/linux-decnet).  This is my first exposure 
>> to systemd.  Naturally, my first try failed.  So, now I am taking baby steps.
>> 
>> The Linux DECnet init script can start either or both the dnetd or
>> phoned daemons.  (I do not use the phoned daemon.)  I think the best
>> thing to do with smartd is make them separate service units.  I will
>> create /etc/systemd/system/dnetd.service and .../phoned.service.
>> 
>> Prior to starting the daemons, the init script verifies the
>> /etc/decnet.conf configuration file exists.  I will use the [Unit]
>> option ConditionFileNotEmpty=/etc/decnet.conf to replicate that
>> behavior.
>> 
>> Then it looks for evidence that the decnet kernel module is loaded by
>> testing for the file /proc/net/decnet.  If necessary, it loads the
>> decnet kernel module and checks again for /proc/net/decnet.  I have
>> already built the decnet kernel module and I can load it with
>> modprobe.  I do not wish to force an unconditional load of the decnet
>> kernel module using /etc/modules-load.d/decnet.conf; I prefer the
>> services that need it (dnetd and phoned) trigger the load.  However, I
>> find no mention of the standard systemd "load a kernel module"
>> practice.  I.e., there is no "systemd.module" unit.  What is the
>> recommended method in the systemd framework to trigger a unit that
>> loads a kernel module?  If the modprobe command fails, I presume that
>> will cause the systemd start command to fail.  I would also like the
>> systemd start command to fail if /proc/net/decnet is not created (a
>> sign that the module has not initialized itself correctly).  Is there
>> a syntax in a systemd unit for that as well?
> 
> Usually the best way to handle this is to make the module auto-loadable
> by the kernel, which makes the whole thing entirely transparent to
> userspace. The first process using a DECNET socket would implicitly load
> the module, just by invoking socket() and the kernel would do the rest.
> 
> This is usually done via MODALIAS strings for "net-pf-xyz" in the kernel
> modules. If the decnet module currently doesn't support this it should
> be a single line change.
> 
> Currently, many other protocol families that are implemented in kernel
> modules already do that, including bluetooth, atm, irda, nfc. For a
> precise list, see:
> 
> grep net-pf /lib/modules/`uname -r`/modules.alias
> 
> You have a good chance that adding that one MODALIAS name to your kernel
> module will already allow you to drop any explicit modprobes from your
> init scripts/units.
> 
> A temporary hack to achieve the same is by adding an "alias" line to
> /etc/modprobe.d/ for the same mapping. That said, ultimately this really
> should be fixed in the kernel.
> 
> Lennart
> 
> -- 
> Lennart Poettering - Red Hat, Inc.

_______________________________________________
systemd-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to