--- a/net/l2tp/l2tp_core.h 2015-09-23 21:23:43.324539500 -0700
+++ b/net/l2tp/l2tp_core.h 2015-09-23 21:27:36.049615188 -0700
@@ -321,4 +321,7 @@ do { \
#define l2tp_dbg(ptr, type, fmt, ...) \
l2tp_printk(ptr, type, pr_debug, fmt, ##__VA_ARGS__)
+#define MODULE_ALIAS_L2TP_PWTYPE(type) \
+ MODULE_ALIAS("net-l2tp-type-" __stringify(type))
+
#endif /* _L2TP_CORE_H_ */
--- a/net/l2tp/l2tp_eth.c 2015-09-23 21:23:43.324539500 -0700
+++ b/net/l2tp/l2tp_eth.c 2015-09-23 21:23:43.320539481 -0700@@ -358,3 +358,4 @@ MODULE_LICENSE("GPL");
MODULE_AUTHOR("James Chapman <jchapman@katalix.com>");
MODULE_DESCRIPTION("L2TP ethernet pseudowire driver");
MODULE_VERSION("1.0");
+MODULE_ALIAS_L2TP_PWTYPE(5);
--- a/net/l2tp/l2tp_netlink.c 2015-09-23 21:23:43.324539500 -0700
+++ b/net/l2tp/l2tp_netlink.c 2015-09-23 21:27:47.033665958 -0700@@ -576,6 +576,13 @@ static int l2tp_nl_cmd_session_create(st
if (info->attrs[L2TP_ATTR_MRU])
cfg.mru = nla_get_u16(info->attrs[L2TP_ATTR_MRU]);
+#ifdef CONFIG_MODULES
+ if (l2tp_nl_cmd_ops[cfg.pw_type] == NULL) {
+ genl_unlock();
+ request_module("net-l2tp-type-%u", cfg.pw_type);
+ genl_lock();
+ }
+#endif
if ((l2tp_nl_cmd_ops[cfg.pw_type] == NULL) ||
(l2tp_nl_cmd_ops[cfg.pw_type]->session_create == NULL)) {
ret = -EPROTONOSUPPORT;
--- a/net/l2tp/l2tp_ppp.c 2015-09-23 21:23:43.324539500 -0700
+++ b/net/l2tp/l2tp_ppp.c 2015-09-23 21:23:43.320539481 -0700@@ -1863,3 +1863,4 @@ MODULE_DESCRIPTION("PPP over L2TP over U
MODULE_LICENSE("GPL");
MODULE_VERSION(PPPOL2TP_DRV_VERSION);
MODULE_ALIAS("pppox-proto-" __stringify(PX_PROTO_OL2TP));
+MODULE_ALIAS_L2TP_PWTYPE(11);