diff options
author | Jean Delvare <jdelvare@suse.de> | 2007-10-21 19:44:04 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-10-22 05:59:54 -0400 |
commit | 305e1e96911417d8cda2699f6a20a6f434616a8c (patch) | |
tree | 02cc300a2a32478c470d93b7a79dfd7e3b71b560 | |
parent | 81429973cfff7745792c877dd083eec29724ec97 (diff) |
[INET]: Let inet_diag and friends autoload
By adding module aliases to inet_diag, tcp_diag and dccp_diag, we let
them load automatically as needed. This makes tools like "ss" run
faster.
Signed-off-by: Jean Delvare <jdelvare@suse.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | include/linux/net.h | 4 | ||||
-rw-r--r-- | net/dccp/diag.c | 1 | ||||
-rw-r--r-- | net/ipv4/inet_diag.c | 7 | ||||
-rw-r--r-- | net/ipv4/tcp_diag.c | 1 |
4 files changed, 13 insertions, 0 deletions
diff --git a/include/linux/net.h b/include/linux/net.h index c136abce7ef6..dd79cdb8c4cf 100644 --- a/include/linux/net.h +++ b/include/linux/net.h | |||
@@ -313,6 +313,10 @@ static const struct proto_ops name##_ops = { \ | |||
313 | #define MODULE_ALIAS_NET_PF_PROTO(pf, proto) \ | 313 | #define MODULE_ALIAS_NET_PF_PROTO(pf, proto) \ |
314 | MODULE_ALIAS("net-pf-" __stringify(pf) "-proto-" __stringify(proto)) | 314 | MODULE_ALIAS("net-pf-" __stringify(pf) "-proto-" __stringify(proto)) |
315 | 315 | ||
316 | #define MODULE_ALIAS_NET_PF_PROTO_TYPE(pf, proto, type) \ | ||
317 | MODULE_ALIAS("net-pf-" __stringify(pf) "-proto-" __stringify(proto) \ | ||
318 | "-type-" __stringify(type)) | ||
319 | |||
316 | #ifdef CONFIG_SYSCTL | 320 | #ifdef CONFIG_SYSCTL |
317 | #include <linux/sysctl.h> | 321 | #include <linux/sysctl.h> |
318 | extern ctl_table net_table[]; | 322 | extern ctl_table net_table[]; |
diff --git a/net/dccp/diag.c b/net/dccp/diag.c index 0f3745585a94..d8a3509b26f6 100644 --- a/net/dccp/diag.c +++ b/net/dccp/diag.c | |||
@@ -68,3 +68,4 @@ module_exit(dccp_diag_fini); | |||
68 | MODULE_LICENSE("GPL"); | 68 | MODULE_LICENSE("GPL"); |
69 | MODULE_AUTHOR("Arnaldo Carvalho de Melo <acme@mandriva.com>"); | 69 | MODULE_AUTHOR("Arnaldo Carvalho de Melo <acme@mandriva.com>"); |
70 | MODULE_DESCRIPTION("DCCP inet_diag handler"); | 70 | MODULE_DESCRIPTION("DCCP inet_diag handler"); |
71 | MODULE_ALIAS_NET_PF_PROTO_TYPE(PF_NETLINK, NETLINK_INET_DIAG, DCCPDIAG_GETSOCK); | ||
diff --git a/net/ipv4/inet_diag.c b/net/ipv4/inet_diag.c index 7eb83ebed2ec..dc429b6b0ba6 100644 --- a/net/ipv4/inet_diag.c +++ b/net/ipv4/inet_diag.c | |||
@@ -815,6 +815,12 @@ static int inet_diag_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
815 | nlmsg_len(nlh) < hdrlen) | 815 | nlmsg_len(nlh) < hdrlen) |
816 | return -EINVAL; | 816 | return -EINVAL; |
817 | 817 | ||
818 | #ifdef CONFIG_KMOD | ||
819 | if (inet_diag_table[nlh->nlmsg_type] == NULL) | ||
820 | request_module("net-pf-%d-proto-%d-type-%d", PF_NETLINK, | ||
821 | NETLINK_INET_DIAG, nlh->nlmsg_type); | ||
822 | #endif | ||
823 | |||
818 | if (inet_diag_table[nlh->nlmsg_type] == NULL) | 824 | if (inet_diag_table[nlh->nlmsg_type] == NULL) |
819 | return -ENOENT; | 825 | return -ENOENT; |
820 | 826 | ||
@@ -914,3 +920,4 @@ static void __exit inet_diag_exit(void) | |||
914 | module_init(inet_diag_init); | 920 | module_init(inet_diag_init); |
915 | module_exit(inet_diag_exit); | 921 | module_exit(inet_diag_exit); |
916 | MODULE_LICENSE("GPL"); | 922 | MODULE_LICENSE("GPL"); |
923 | MODULE_ALIAS_NET_PF_PROTO(PF_NETLINK, NETLINK_INET_DIAG); | ||
diff --git a/net/ipv4/tcp_diag.c b/net/ipv4/tcp_diag.c index 3904d2158a92..2fbcc7d1b1a0 100644 --- a/net/ipv4/tcp_diag.c +++ b/net/ipv4/tcp_diag.c | |||
@@ -56,3 +56,4 @@ static void __exit tcp_diag_exit(void) | |||
56 | module_init(tcp_diag_init); | 56 | module_init(tcp_diag_init); |
57 | module_exit(tcp_diag_exit); | 57 | module_exit(tcp_diag_exit); |
58 | MODULE_LICENSE("GPL"); | 58 | MODULE_LICENSE("GPL"); |
59 | MODULE_ALIAS_NET_PF_PROTO_TYPE(PF_NETLINK, NETLINK_INET_DIAG, TCPDIAG_GETSOCK); | ||