net/sctp: Refactor SCTP skb checksum computation

This patch consolidates the SCTP checksum calculation code from various
places to a single new function, sctp_compute_cksum(skb, offset).

Signed-off-by: Joe Stringer <joe@wand.net.nz>
Reviewed-by: Julian Anastasov <ja@ssi.bg>
Acked-by: Simon Horman <horms@verge.net.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Joe Stringer
2013-07-25 10:52:05 +09:00
committed by David S. Miller
parent e7428e95a0
commit 024ec3deac
4 changed files with 20 additions and 36 deletions

View File

@@ -85,4 +85,19 @@ static inline __le32 sctp_end_cksum(__u32 crc32)
return cpu_to_le32(~crc32);
}
/* Calculate the CRC32C checksum of an SCTP packet. */
static inline __le32 sctp_compute_cksum(const struct sk_buff *skb,
unsigned int offset)
{
const struct sk_buff *iter;
__u32 crc32 = sctp_start_cksum(skb->data + offset,
skb_headlen(skb) - offset);
skb_walk_frags(skb, iter)
crc32 = sctp_update_cksum((__u8 *) iter->data,
skb_headlen(iter), crc32);
return sctp_end_cksum(crc32);
}
#endif /* __sctp_checksum_h__ */