diff options
author | Daniel Borkmann <dborkman@redhat.com> | 2013-10-30 06:50:51 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-11-03 23:04:57 -0500 |
commit | 2817a336d4d533fb8b68719723cd60ea7dd7c09e (patch) | |
tree | 71aac3aa2a48588fd0b5372cca9499bd1cbe2a5f /include/net | |
parent | efba721f636ee016859d86d15748650119402b10 (diff) |
net: skb_checksum: allow custom update/combine for walking skb
Currently, skb_checksum walks over 1) linearized, 2) frags[], and
3) frag_list data and calculats the one's complement, a 32 bit
result suitable for feeding into itself or csum_tcpudp_magic(),
but unsuitable for SCTP as we're calculating CRC32c there.
Hence, in order to not re-implement the very same function in
SCTP (and maybe other protocols) over and over again, use an
update() + combine() callback internally to allow for walking
over the skb with different algorithms.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net')
-rw-r--r-- | include/net/checksum.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/include/net/checksum.h b/include/net/checksum.h index 8f59ca50477c..15f33fde826e 100644 --- a/include/net/checksum.h +++ b/include/net/checksum.h | |||
@@ -79,6 +79,12 @@ csum_block_add(__wsum csum, __wsum csum2, int offset) | |||
79 | } | 79 | } |
80 | 80 | ||
81 | static inline __wsum | 81 | static inline __wsum |
82 | csum_block_add_ext(__wsum csum, __wsum csum2, int offset, int len) | ||
83 | { | ||
84 | return csum_block_add(csum, csum2, offset); | ||
85 | } | ||
86 | |||
87 | static inline __wsum | ||
82 | csum_block_sub(__wsum csum, __wsum csum2, int offset) | 88 | csum_block_sub(__wsum csum, __wsum csum2, int offset) |
83 | { | 89 | { |
84 | u32 sum = (__force u32)csum2; | 90 | u32 sum = (__force u32)csum2; |