aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6/udplite.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2008-03-06 19:22:02 -0500
committerDavid S. Miller <davem@davemloft.net>2008-03-06 19:22:02 -0500
commitdb8dac20d5199307dcfcf4e01dac4bda5edf9e89 (patch)
tree3694d1aee5c0014fb45eec045a67ca150ca1231f /net/ipv6/udplite.c
parentba0fa4599484b98dbb21d279fbfdb40e9c07d30d (diff)
[UDP]: Revert udplite and code split.
This reverts commit db1ed684f6c430c4cdad67d058688b8a1b5e607c ("[IPV6] UDP: Rename IPv6 UDP files."), commit 8be8af8fa4405652e6c0797db5465a4be8afb998 ("[IPV4] UDP: Move IPv4-specific bits to other file.") and commit e898d4db2749c6052072e9bc4448e396cbdeb06a ("[UDP]: Allow users to configure UDP-Lite."). First, udplite is of such small cost, and it is a core protocol just like TCP and normal UDP are. We spent enormous amounts of effort to make udplite share as much code with core UDP as possible. All of that work is less valuable if we're just going to slap a config option on udplite support. It is also causing build failures, as reported on linux-next, showing that the changeset was not tested very well. In fact, this is the second build failure resulting from the udplite change. Finally, the config options provided was a bool, instead of a modular option. Meaning the udplite code does not even get build tested by allmodconfig builds, and furthermore the user is not presented with a reasonable modular build option which is particularly needed by distribution vendors. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/udplite.c')
-rw-r--r--net/ipv6/udplite.c125
1 files changed, 125 insertions, 0 deletions
diff --git a/net/ipv6/udplite.c b/net/ipv6/udplite.c
new file mode 100644
index 000000000000..87d4202522ee
--- /dev/null
+++ b/net/ipv6/udplite.c
@@ -0,0 +1,125 @@
1/*
2 * UDPLITEv6 An implementation of the UDP-Lite protocol over IPv6.
3 * See also net/ipv4/udplite.c
4 *
5 * Version: $Id: udplite.c,v 1.9 2006/10/19 08:28:10 gerrit Exp $
6 *
7 * Authors: Gerrit Renker <gerrit@erg.abdn.ac.uk>
8 *
9 * Changes:
10 * Fixes:
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation; either version
14 * 2 of the License, or (at your option) any later version.
15 */
16#include "udp_impl.h"
17
18DEFINE_SNMP_STAT(struct udp_mib, udplite_stats_in6) __read_mostly;
19
20static int udplitev6_rcv(struct sk_buff *skb)
21{
22 return __udp6_lib_rcv(skb, udplite_hash, IPPROTO_UDPLITE);
23}
24
25static void udplitev6_err(struct sk_buff *skb,
26 struct inet6_skb_parm *opt,
27 int type, int code, int offset, __be32 info)
28{
29 __udp6_lib_err(skb, opt, type, code, offset, info, udplite_hash);
30}
31
32static struct inet6_protocol udplitev6_protocol = {
33 .handler = udplitev6_rcv,
34 .err_handler = udplitev6_err,
35 .flags = INET6_PROTO_NOPOLICY|INET6_PROTO_FINAL,
36};
37
38static int udplite_v6_get_port(struct sock *sk, unsigned short snum)
39{
40 return udplite_get_port(sk, snum, ipv6_rcv_saddr_equal);
41}
42
43DEFINE_PROTO_INUSE(udplitev6)
44
45struct proto udplitev6_prot = {
46 .name = "UDPLITEv6",
47 .owner = THIS_MODULE,
48 .close = udp_lib_close,
49 .connect = ip6_datagram_connect,
50 .disconnect = udp_disconnect,
51 .ioctl = udp_ioctl,
52 .init = udplite_sk_init,
53 .destroy = udpv6_destroy_sock,
54 .setsockopt = udpv6_setsockopt,
55 .getsockopt = udpv6_getsockopt,
56 .sendmsg = udpv6_sendmsg,
57 .recvmsg = udpv6_recvmsg,
58 .backlog_rcv = udpv6_queue_rcv_skb,
59 .hash = udp_lib_hash,
60 .unhash = udp_lib_unhash,
61 .get_port = udplite_v6_get_port,
62 .obj_size = sizeof(struct udp6_sock),
63#ifdef CONFIG_COMPAT
64 .compat_setsockopt = compat_udpv6_setsockopt,
65 .compat_getsockopt = compat_udpv6_getsockopt,
66#endif
67 REF_PROTO_INUSE(udplitev6)
68};
69
70static struct inet_protosw udplite6_protosw = {
71 .type = SOCK_DGRAM,
72 .protocol = IPPROTO_UDPLITE,
73 .prot = &udplitev6_prot,
74 .ops = &inet6_dgram_ops,
75 .capability = -1,
76 .no_check = 0,
77 .flags = INET_PROTOSW_PERMANENT,
78};
79
80int __init udplitev6_init(void)
81{
82 int ret;
83
84 ret = inet6_add_protocol(&udplitev6_protocol, IPPROTO_UDPLITE);
85 if (ret)
86 goto out;
87
88 ret = inet6_register_protosw(&udplite6_protosw);
89 if (ret)
90 goto out_udplitev6_protocol;
91out:
92 return ret;
93
94out_udplitev6_protocol:
95 inet6_del_protocol(&udplitev6_protocol, IPPROTO_UDPLITE);
96 goto out;
97}
98
99void udplitev6_exit(void)
100{
101 inet6_unregister_protosw(&udplite6_protosw);
102 inet6_del_protocol(&udplitev6_protocol, IPPROTO_UDPLITE);
103}
104
105#ifdef CONFIG_PROC_FS
106static struct file_operations udplite6_seq_fops;
107static struct udp_seq_afinfo udplite6_seq_afinfo = {
108 .owner = THIS_MODULE,
109 .name = "udplite6",
110 .family = AF_INET6,
111 .hashtable = udplite_hash,
112 .seq_show = udp6_seq_show,
113 .seq_fops = &udplite6_seq_fops,
114};
115
116int __init udplite6_proc_init(void)
117{
118 return udp_proc_register(&udplite6_seq_afinfo);
119}
120
121void udplite6_proc_exit(void)
122{
123 udp_proc_unregister(&udplite6_seq_afinfo);
124}
125#endif