Em Sat, Aug 06, 2005 at 06:24:35AM -0700, David S. Miller escreveu:
> From: [EMAIL PROTECTED] (Arnaldo Carvalho de Melo)
> Date: Sat, 6 Aug 2005 10:01:05 -0300
>
> > + /* Be more specific, e.g. net-pf-2-132-1
> > (net-pf-PF_INET-IPPROTO_SCTP-SOCK_STREAM) */
> > + if (++try_loading_module == 1)
> > + request_module("net-proto-%d-%d-%d", PF_INET,
> > protocol, sock->type);
>
> Your comments don't match the strings you are actually
> building in request_module() ie. net-pf-* vs. net-proto-*.
> Please make them be consistent.
Fixed:
rsync://rsync.kernel.org/pub/scm/linux/kernel/git/acme/net-2.6.14.git
I checked and the mirrors picked this one already.
- Arnaldo
tree 13278f7cf4453ec1bc5d9e2f45bd5cd250f7ce18
parent 16963c77a4472768f6c04d14681584a118f6a7f4
author Arnaldo Carvalho de Melo <[EMAIL PROTECTED]> 1123337601 -0300
committer Arnaldo Carvalho de Melo <[EMAIL PROTECTED]> 1123337601 -0300
[INET] Make inet_create try to load protocol modules
Syntax is net-proto-PROTOCOL_FAMILY-PROTOCOL-SOCK_TYPE and if this fails
net-proto-PROTOCOL_FAMILY-PROTOCOL.
Signed-off-by: Arnaldo Carvalho de Melo <[EMAIL PROTECTED]>
Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
------------------------------------------------------------------------------
dccp/proto.c | 9 +++++++--
ipv4/af_inet.c | 21 +++++++++++++++++----
sctp/protocol.c | 4 ++++
3 files changed, 28 insertions(+), 6 deletions(-)
------------------------------------------------------------------------------
diff --git a/net/dccp/proto.c b/net/dccp/proto.c
--- a/net/dccp/proto.c
+++ b/net/dccp/proto.c
@@ -811,8 +811,13 @@ static void __exit dccp_fini(void)
module_init(dccp_init);
module_exit(dccp_fini);
-/* __stringify doesn't likes enums, so use SOCK_DCCP (6) value directly */
-MODULE_ALIAS("net-pf-" __stringify(PF_INET) "-6");
+/*
+ * __stringify doesn't likes enums, so use SOCK_DCCP (6) and IPPROTO_DCCP (33)
+ * values directly, Also cover the case where the protocol is not specified,
+ * i.e. net-proto-PF_INET-0-SOCK_DCCP
+ */
+MODULE_ALIAS("net-proto-" __stringify(PF_INET) "-33-6");
+MODULE_ALIAS("net-proto-" __stringify(PF_INET) "-0-6");
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Arnaldo Carvalho de Melo <[EMAIL PROTECTED]>");
MODULE_DESCRIPTION("DCCP - Datagram Congestion Controlled Protocol");
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
--- a/net/ipv4/af_inet.c
+++ b/net/ipv4/af_inet.c
@@ -228,12 +228,14 @@ static int inet_create(struct socket *so
struct proto *answer_prot;
unsigned char answer_flags;
char answer_no_check;
- int err;
+ int try_loading_module = 0;
+ int err = -ESOCKTNOSUPPORT;
sock->state = SS_UNCONNECTED;
/* Look for the requested type/protocol pair. */
answer = NULL;
+lookup_protocol:
rcu_read_lock();
list_for_each_rcu(p, &inetsw[sock->type]) {
answer = list_entry(p, struct inet_protosw, list);
@@ -254,9 +256,20 @@ static int inet_create(struct socket *so
answer = NULL;
}
- err = -ESOCKTNOSUPPORT;
- if (!answer)
- goto out_rcu_unlock;
+ if (unlikely(answer == NULL)) {
+ if (try_loading_module < 2) {
+ rcu_read_unlock();
+ /* Be more specific, e.g. net-proto-2-132-1
(net-proto-PF_INET-IPPROTO_SCTP-SOCK_STREAM) */
+ if (++try_loading_module == 1)
+ request_module("net-proto-%d-%d-%d", PF_INET,
protocol, sock->type);
+ /* Fall back to generic, e.g. net-proto-132-1
(net-proto-IPPROTO_SCTP) */
+ else
+ request_module("net-proto-%d-%d", PF_INET,
protocol);
+ goto lookup_protocol;
+ } else
+ goto out_rcu_unlock;
+ }
+
err = -EPERM;
if (answer->capability > 0 && !capable(answer->capability))
goto out_rcu_unlock;
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c
--- a/net/sctp/protocol.c
+++ b/net/sctp/protocol.c
@@ -1242,6 +1242,10 @@ SCTP_STATIC __exit void sctp_exit(void)
module_init(sctp_init);
module_exit(sctp_exit);
+/*
+ * __stringify doesn't likes enums, so use IPPROTO_SCTP value (132) directly.
+ */
+MODULE_ALIAS("net-proto-" __stringify(PF_INET) "-132");
MODULE_AUTHOR("Linux Kernel SCTP developers <[EMAIL PROTECTED]>");
MODULE_DESCRIPTION("Support for the SCTP protocol (RFC2960)");
MODULE_LICENSE("GPL");
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html