aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorVlad Yasevich <vladislav.yasevich@hp.com>2007-12-16 17:06:41 -0500
committerDavid S. Miller <davem@davemloft.net>2008-01-28 17:58:20 -0500
commit9ad0977fe10bd5d052a6db7738afe017367c2e32 (patch)
tree811087dfc2e70d7ef120815c7471c943ac193f6d /include
parent1bf40954cf232a043a49623cf251f787c1871e64 (diff)
[SCTP]: Use crc32c library for checksum calculations.
The crc32c library used an identical table and algorithm as SCTP. Switch to using the library instead of carrying our own table. Using crypto layer proved to have too much overhead compared to using the library directly. Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r--include/net/sctp/checksum.h78
-rw-r--r--include/net/sctp/sctp.h7
2 files changed, 78 insertions, 7 deletions
diff --git a/include/net/sctp/checksum.h b/include/net/sctp/checksum.h
new file mode 100644
index 000000000000..ba75c67cb992
--- /dev/null
+++ b/include/net/sctp/checksum.h
@@ -0,0 +1,78 @@
1/* SCTP kernel reference Implementation
2 * Copyright (c) 1999-2001 Motorola, Inc.
3 * Copyright (c) 2001-2003 International Business Machines, Corp.
4 *
5 * This file is part of the SCTP kernel reference Implementation
6 *
7 * SCTP Checksum functions
8 *
9 * The SCTP reference implementation is free software;
10 * you can redistribute it and/or modify it under the terms of
11 * the GNU General Public License as published by
12 * the Free Software Foundation; either version 2, or (at your option)
13 * any later version.
14 *
15 * The SCTP reference implementation is distributed in the hope that it
16 * will be useful, but WITHOUT ANY WARRANTY; without even the implied
17 * ************************
18 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19 * See the GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with GNU CC; see the file COPYING. If not, write to
23 * the Free Software Foundation, 59 Temple Place - Suite 330,
24 * Boston, MA 02111-1307, USA.
25 *
26 * Please send any bug reports or fixes you make to the
27 * email address(es):
28 * lksctp developers <lksctp-developers@lists.sourceforge.net>
29 *
30 * Or submit a bug report through the following website:
31 * http://www.sf.net/projects/lksctp
32 *
33 * Written or modified by:
34 * Dinakaran Joseph
35 * Jon Grimm <jgrimm@us.ibm.com>
36 * Sridhar Samudrala <sri@us.ibm.com>
37 *
38 * Rewritten to use libcrc32c by:
39 * Vlad Yasevich <vladislav.yasevich@hp.com>
40 *
41 * Any bugs reported given to us we will try to fix... any fixes shared will
42 * be incorporated into the next SCTP release.
43 */
44
45#include <linux/types.h>
46#include <net/sctp/sctp.h>
47#include <linux/crc32c.h>
48
49static inline __u32 sctp_start_cksum(__u8 *buffer, __u16 length)
50{
51 __u32 crc = ~(__u32) 0;
52 __u8 zero[sizeof(__u32)] = {0};
53
54 /* Optimize this routine to be SCTP specific, knowing how
55 * to skip the checksum field of the SCTP header.
56 */
57
58 /* Calculate CRC up to the checksum. */
59 crc = crc32c(crc, buffer, sizeof(struct sctphdr) - sizeof(__u32));
60
61 /* Skip checksum field of the header. */
62 crc = crc32c(crc, zero, sizeof(__u32));
63
64 /* Calculate the rest of the CRC. */
65 crc = crc32c(crc, &buffer[sizeof(struct sctphdr)],
66 length - sizeof(struct sctphdr));
67 return crc;
68}
69
70static inline __u32 sctp_update_cksum(__u8 *buffer, __u16 length, __u32 crc32)
71{
72 return crc32c(crc32, buffer, length);
73}
74
75static inline __u32 sctp_end_cksum(__u32 crc32)
76{
77 return ntohl(~crc32);
78}
diff --git a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h
index 34318a33a94c..1b81ede7c2bc 100644
--- a/include/net/sctp/sctp.h
+++ b/include/net/sctp/sctp.h
@@ -150,13 +150,6 @@ int sctp_primitive_REQUESTHEARTBEAT(struct sctp_association *, void *arg);
150int sctp_primitive_ASCONF(struct sctp_association *, void *arg); 150int sctp_primitive_ASCONF(struct sctp_association *, void *arg);
151 151
152/* 152/*
153 * sctp/crc32c.c
154 */
155__u32 sctp_start_cksum(__u8 *ptr, __u16 count);
156__u32 sctp_update_cksum(__u8 *ptr, __u16 count, __u32 cksum);
157__u32 sctp_end_cksum(__u32 cksum);
158
159/*
160 * sctp/input.c 153 * sctp/input.c
161 */ 154 */
162int sctp_rcv(struct sk_buff *skb); 155int sctp_rcv(struct sk_buff *skb);