Patchwork genetlink: add auto module loading

login
register
mail settings
Submitter stephen hemminger
Date Dec. 28, 2011, 6:19 p.m.
Message ID <20111228101958.2326b7cc@nehalam.linuxnetplumber.net>
Download mbox | patch
Permalink /patch/133454/
State Accepted
Delegated to: David Miller
Headers show

Comments

stephen hemminger - Dec. 28, 2011, 6:19 p.m.
When testing L2TP support, I discovered that the l2tp module is not autoloaded
as are other netlink interfaces. There is because of lack of hook in genetlink to call
request_module and load the module.

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Miller - Dec. 28, 2011, 6:49 p.m.
From: Stephen Hemminger <shemminger@vyatta.com>
Date: Wed, 28 Dec 2011 10:19:58 -0800

> When testing L2TP support, I discovered that the l2tp module is not autoloaded
> as are other netlink interfaces. There is because of lack of hook in genetlink to call
> request_module and load the module.
> 
> Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>

Applied, but for completeness we should probably also handle the "by ID" case right
above this code block too.

Could you please submit a patch for that?

Thanks.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
stephen hemminger - Dec. 28, 2011, 7:02 p.m.
On Wed, 28 Dec 2011 13:49:39 -0500 (EST)
David Miller <davem@davemloft.net> wrote:

> From: Stephen Hemminger <shemminger@vyatta.com>
> Date: Wed, 28 Dec 2011 10:19:58 -0800
> 
> > When testing L2TP support, I discovered that the l2tp module is not autoloaded
> > as are other netlink interfaces. There is because of lack of hook in genetlink to call
> > request_module and load the module.
> > 
> > Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
> 
> Applied, but for completeness we should probably also handle the "by ID" case right
> above this code block too.
> 
> Could you please submit a patch for that?
> 
> Thanks.

There is no point really. All the existing drivers,
use GENL_ID_GENERATE which generates the ID when they are loaded.
Chicken and egg principle.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Miller - Dec. 28, 2011, 7:03 p.m.
From: Stephen Hemminger <shemminger@vyatta.com>
Date: Wed, 28 Dec 2011 11:02:08 -0800

> On Wed, 28 Dec 2011 13:49:39 -0500 (EST)
> David Miller <davem@davemloft.net> wrote:
> 
>> From: Stephen Hemminger <shemminger@vyatta.com>
>> Date: Wed, 28 Dec 2011 10:19:58 -0800
>> 
>> > When testing L2TP support, I discovered that the l2tp module is not autoloaded
>> > as are other netlink interfaces. There is because of lack of hook in genetlink to call
>> > request_module and load the module.
>> > 
>> > Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
>> 
>> Applied, but for completeness we should probably also handle the "by ID" case right
>> above this code block too.
>> 
>> Could you please submit a patch for that?
>> 
>> Thanks.
> 
> There is no point really. All the existing drivers,
> use GENL_ID_GENERATE which generates the ID when they are loaded.
> Chicken and egg principle.

Ok, then I wonder why we support ID based lookups at all.

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

--- a/net/netlink/genetlink.c	2011-12-24 11:13:44.373214171 -0800
+++ b/net/netlink/genetlink.c	2011-12-24 11:13:59.361360729 -0800
@@ -792,6 +792,15 @@  static int ctrl_getfamily(struct sk_buff
 
 		name = nla_data(info->attrs[CTRL_ATTR_FAMILY_NAME]);
 		res = genl_family_find_byname(name);
+#ifdef CONFIG_MODULES
+		if (res == NULL) {
+			genl_unlock();
+			request_module("net-pf-%d-proto-%d-type-%s",
+				       PF_NETLINK, NETLINK_GENERIC, name);
+			genl_lock();
+			res = genl_family_find_byname(name);
+		}
+#endif
 		err = -ENOENT;
 	}