[systemd-devel] [RFC][PATCH] net: set default DEVTYPE for all ethernet based devices
Marcel Holtmann
marcel at holtmann.org
Sat Jan 4 18:38:17 PST 2014
Hi Tom,
>>> In systemd's networkd and udevd, we would like to give the administrator a
>>> simple way to filter ethernet devices by their DEVTYPE. In order to avoid
>>> having a special treatment of the case where DEVTYPE=(null), initialize it to
>>> a default value, "ethernet", in the kernel.
>>>
>>> Signed-off-by: Tom Gundersen <teg at jklm.no>
>>> Cc: Marcel Holtmann <marcel at holtmann.org>
>>> Cc: Greg KH <gregkh at linuxfoundation.org>
>>> ---
>>>
>>> Hi Greg and Marcel,
>>>
>>> This patch seems to do the right thing for me. Any comments before I send it
>>> off to LKML?
>>>
>>> I suppose it may make sense to hide this behind a kernel option in case we are
>>> worried about breaking existing users (but if ConnMan is adapted, I don't know
>>> of any other issues, NetworkManager is not affected at least).
>>>
>>> Cheers,
>>>
>>> Tom
>>>
>>> net/core/dev.c | 6 ++++++
>>> 1 file changed, 6 insertions(+)
>>>
>>> diff --git a/net/core/dev.c b/net/core/dev.c
>>> index ba3b7ea..62881e0 100644
>>> --- a/net/core/dev.c
>>> +++ b/net/core/dev.c
>>> @@ -6215,6 +6215,10 @@ void netdev_freemem(struct net_device *dev)
>>> kfree(addr);
>>> }
>>>
>>> +static const struct device_type ethernet_type = {
>>> + .name = "ethernet",
>>> +};
>>> +
>>> /**
>>> * alloc_netdev_mqs - allocate network device
>>> * @sizeof_priv: size of private data to allocate space for
>>> @@ -6305,6 +6309,8 @@ struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name,
>>> goto free_all;
>>> #endif
>>>
>>> + SET_NETDEV_DEVTYPE(dev, ðernet_type);
>>> +
>>> strcpy(dev->name, name);
>>> dev->group = INIT_NETDEV_GROUP;
>>> if (!dev->ethtool_ops)
>>
>> this means that every single netdev is defaulting to Ethernet. This includes also the fake ones like IrDA or raw IP ones like PPP or TUN devices. I do not think that is something we really want here.
>
> Hm, so then the assumption I first worked under (DEVTYPE==(null) means
> ethernet) is not really correct. Doesn't this give you problems in
> ConnMan at the moment?
that is why I mentioned ARPHRD_* earlier. It is important to check that value as well. You will need both at some point.
> What do you think would be the correct behavior? To use this patch,
> but also patch up IrDA, PPP, TUN and whatever else to set real
> DEVTYPE's; or to leave them as essentially 'unknown', and go through
> the ethernet drivers and set them to DEVTYPE='ethernet' one-by-one?
The kernel has an alloc_etherdev_mqs() that might be a better starting point. However even then, you might still need to fix some false positives.
Regards
Marcel
More information about the systemd-devel
mailing list