aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/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/ipv4/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/ipv4/udplite.c')
-rw-r--r--net/ipv4/udplite.c121
1 files changed, 121 insertions, 0 deletions
diff --git a/net/ipv4/udplite.c b/net/ipv4/udplite.c
new file mode 100644
index 000000000000..d49c6d68c8a9
--- /dev/null
+++ b/net/ipv4/udplite.c
@@ -0,0 +1,121 @@
1/*
2 * UDPLITE An implementation of the UDP-Lite protocol (RFC 3828).
3 *
4 * Version: $Id: udplite.c,v 1.25 2006/10/19 07:22:36 gerrit Exp $
5 *
6 * Authors: Gerrit Renker <gerrit@erg.abdn.ac.uk>
7 *
8 * Changes:
9 * Fixes:
10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public License
12 * as published by the Free Software Foundation; either version
13 * 2 of the License, or (at your option) any later version.
14 */
15#include "udp_impl.h"
16DEFINE_SNMP_STAT(struct udp_mib, udplite_statistics) __read_mostly;
17
18struct hlist_head udplite_hash[UDP_HTABLE_SIZE];
19
20int udplite_get_port(struct sock *sk, unsigned short p,
21 int (*c)(const struct sock *, const struct sock *))
22{
23 return __udp_lib_get_port(sk, p, udplite_hash, c);
24}
25
26static int udplite_v4_get_port(struct sock *sk, unsigned short snum)
27{
28 return udplite_get_port(sk, snum, ipv4_rcv_saddr_equal);
29}
30
31static int udplite_rcv(struct sk_buff *skb)
32{
33 return __udp4_lib_rcv(skb, udplite_hash, IPPROTO_UDPLITE);
34}
35
36static void udplite_err(struct sk_buff *skb, u32 info)
37{
38 __udp4_lib_err(skb, info, udplite_hash);
39}
40
41static struct net_protocol udplite_protocol = {
42 .handler = udplite_rcv,
43 .err_handler = udplite_err,
44 .no_policy = 1,
45};
46
47DEFINE_PROTO_INUSE(udplite)
48
49struct proto udplite_prot = {
50 .name = "UDP-Lite",
51 .owner = THIS_MODULE,
52 .close = udp_lib_close,
53 .connect = ip4_datagram_connect,
54 .disconnect = udp_disconnect,
55 .ioctl = udp_ioctl,
56 .init = udplite_sk_init,
57 .destroy = udp_destroy_sock,
58 .setsockopt = udp_setsockopt,
59 .getsockopt = udp_getsockopt,
60 .sendmsg = udp_sendmsg,
61 .recvmsg = udp_recvmsg,
62 .sendpage = udp_sendpage,
63 .backlog_rcv = udp_queue_rcv_skb,
64 .hash = udp_lib_hash,
65 .unhash = udp_lib_unhash,
66 .get_port = udplite_v4_get_port,
67 .obj_size = sizeof(struct udp_sock),
68#ifdef CONFIG_COMPAT
69 .compat_setsockopt = compat_udp_setsockopt,
70 .compat_getsockopt = compat_udp_getsockopt,
71#endif
72 REF_PROTO_INUSE(udplite)
73};
74
75static struct inet_protosw udplite4_protosw = {
76 .type = SOCK_DGRAM,
77 .protocol = IPPROTO_UDPLITE,
78 .prot = &udplite_prot,
79 .ops = &inet_dgram_ops,
80 .capability = -1,
81 .no_check = 0, /* must checksum (RFC 3828) */
82 .flags = INET_PROTOSW_PERMANENT,
83};
84
85#ifdef CONFIG_PROC_FS
86static struct file_operations udplite4_seq_fops;
87static struct udp_seq_afinfo udplite4_seq_afinfo = {
88 .owner = THIS_MODULE,
89 .name = "udplite",
90 .family = AF_INET,
91 .hashtable = udplite_hash,
92 .seq_show = udp4_seq_show,
93 .seq_fops = &udplite4_seq_fops,
94};
95#endif
96
97void __init udplite4_register(void)
98{
99 if (proto_register(&udplite_prot, 1))
100 goto out_register_err;
101
102 if (inet_add_protocol(&udplite_protocol, IPPROTO_UDPLITE) < 0)
103 goto out_unregister_proto;
104
105 inet_register_protosw(&udplite4_protosw);
106
107#ifdef CONFIG_PROC_FS
108 if (udp_proc_register(&udplite4_seq_afinfo)) /* udplite4_proc_init() */
109 printk(KERN_ERR "%s: Cannot register /proc!\n", __func__);
110#endif
111 return;
112
113out_unregister_proto:
114 proto_unregister(&udplite_prot);
115out_register_err:
116 printk(KERN_CRIT "%s: Cannot add UDP-Lite protocol.\n", __func__);
117}
118
119EXPORT_SYMBOL(udplite_hash);
120EXPORT_SYMBOL(udplite_prot);
121EXPORT_SYMBOL(udplite_get_port);