Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
net
sctp
checksum.h
Go to the documentation of this file.
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 <
[email protected]
>
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 <
[email protected]
>
36
* Sridhar Samudrala <
[email protected]
>
37
*
38
* Rewritten to use libcrc32c by:
39
* Vlad Yasevich <
[email protected]
>
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
49
static
inline
__u32
sctp_crc32c(
__u32
crc
,
u8
*
buffer
,
u16
length
)
50
{
51
return
crc32c
(crc, buffer, length);
52
}
53
54
static
inline
__u32
sctp_start_cksum(
__u8
*
buffer
,
__u16
length
)
55
{
56
__u32
crc
= ~(
__u32
)0;
57
__u8
zero
[
sizeof
(
__u32
)] = {0};
58
59
/* Optimize this routine to be SCTP specific, knowing how
60
* to skip the checksum field of the SCTP header.
61
*/
62
63
/* Calculate CRC up to the checksum. */
64
crc = sctp_crc32c(crc, buffer,
sizeof
(
struct
sctphdr
) -
sizeof
(
__u32
));
65
66
/* Skip checksum field of the header. */
67
crc = sctp_crc32c(crc,
zero
,
sizeof
(
__u32
));
68
69
/* Calculate the rest of the CRC. */
70
crc = sctp_crc32c(crc, &buffer[
sizeof
(
struct
sctphdr
)],
71
length -
sizeof
(
struct
sctphdr
));
72
return
crc
;
73
}
74
75
static
inline
__u32
sctp_update_cksum(
__u8
*buffer,
__u16
length,
__u32
crc32
)
76
{
77
return
sctp_crc32c(crc32, buffer, length);
78
}
79
80
static
inline
__le32
sctp_end_cksum(
__be32
crc32
)
81
{
82
return
cpu_to_le32
(~crc32);
83
}
Generated on Thu Jan 10 2013 12:49:17 for Linux Kernel by
1.8.2