aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6/tcp_ipv6.c
diff options
context:
space:
mode:
authorDaniel Lezcano <dlezcano@fr.ibm.com>2007-12-11 05:25:35 -0500
committerDavid S. Miller <davem@davemloft.net>2008-01-28 17:57:13 -0500
commit7f4e4868f3ce0e946f116c28fa4fe033be5e4ba9 (patch)
tree144add1d4c94a145f7e048a17d91b563f5e6e265 /net/ipv6/tcp_ipv6.c
parent87c3efbfdd1f98af14a1f60ff19f73d9a8d8da98 (diff)
[IPV6]: make the protocol initialization to return an error code
This patchset makes the different protocols to return an error code, so the af_inet6 module can check the initialization was correct or not. The raw6 was taken into account to be consistent with the rest of the protocols, but the registration is at the same place. Because the raw6 has its own init function, the proto and the ops structure can be moved inside the raw6.c file. Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/tcp_ipv6.c')
-rw-r--r--net/ipv6/tcp_ipv6.c36
1 files changed, 29 insertions, 7 deletions
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
index 93980c3b83e6..9544beb6d1ca 100644
--- a/net/ipv6/tcp_ipv6.c
+++ b/net/ipv6/tcp_ipv6.c
@@ -2166,14 +2166,36 @@ static struct inet_protosw tcpv6_protosw = {
2166 INET_PROTOSW_ICSK, 2166 INET_PROTOSW_ICSK,
2167}; 2167};
2168 2168
2169void __init tcpv6_init(void) 2169int __init tcpv6_init(void)
2170{ 2170{
2171 int ret;
2172
2173 ret = inet6_add_protocol(&tcpv6_protocol, IPPROTO_TCP);
2174 if (ret)
2175 goto out;
2176
2171 /* register inet6 protocol */ 2177 /* register inet6 protocol */
2172 if (inet6_add_protocol(&tcpv6_protocol, IPPROTO_TCP) < 0) 2178 ret = inet6_register_protosw(&tcpv6_protosw);
2173 printk(KERN_ERR "tcpv6_init: Could not register protocol\n"); 2179 if (ret)
2174 inet6_register_protosw(&tcpv6_protosw); 2180 goto out_tcpv6_protocol;
2181
2182 ret = inet_csk_ctl_sock_create(&tcp6_socket, PF_INET6,
2183 SOCK_RAW, IPPROTO_TCP);
2184 if (ret)
2185 goto out_tcpv6_protosw;
2186out:
2187 return ret;
2175 2188
2176 if (inet_csk_ctl_sock_create(&tcp6_socket, PF_INET6, SOCK_RAW, 2189out_tcpv6_protocol:
2177 IPPROTO_TCP) < 0) 2190 inet6_del_protocol(&tcpv6_protocol, IPPROTO_TCP);
2178 panic("Failed to create the TCPv6 control socket.\n"); 2191out_tcpv6_protosw:
2192 inet6_unregister_protosw(&tcpv6_protosw);
2193 goto out;
2194}
2195
2196void __exit tcpv6_exit(void)
2197{
2198 sock_release(tcp6_socket);
2199 inet6_unregister_protosw(&tcpv6_protosw);
2200 inet6_del_protocol(&tcpv6_protocol, IPPROTO_TCP);
2179} 2201}