| 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ | 
|---|
| 2 | /* SCTP kernel reference Implementation | 
|---|
| 3 | * Copyright (c) 1999-2001 Motorola, Inc. | 
|---|
| 4 | * Copyright (c) 2001-2003 International Business Machines, Corp. | 
|---|
| 5 | * | 
|---|
| 6 | * This file is part of the SCTP kernel reference Implementation | 
|---|
| 7 | * | 
|---|
| 8 | * SCTP Checksum functions | 
|---|
| 9 | * | 
|---|
| 10 | * Please send any bug reports or fixes you make to the | 
|---|
| 11 | * email address(es): | 
|---|
| 12 | *    lksctp developers <linux-sctp@vger.kernel.org> | 
|---|
| 13 | * | 
|---|
| 14 | * Written or modified by: | 
|---|
| 15 | *    Dinakaran Joseph | 
|---|
| 16 | *    Jon Grimm <jgrimm@us.ibm.com> | 
|---|
| 17 | *    Sridhar Samudrala <sri@us.ibm.com> | 
|---|
| 18 | *    Vlad Yasevich <vladislav.yasevich@hp.com> | 
|---|
| 19 | */ | 
|---|
| 20 |  | 
|---|
| 21 | #ifndef __sctp_checksum_h__ | 
|---|
| 22 | #define __sctp_checksum_h__ | 
|---|
| 23 |  | 
|---|
| 24 | #include <linux/types.h> | 
|---|
| 25 | #include <linux/sctp.h> | 
|---|
| 26 |  | 
|---|
| 27 | static inline __le32 sctp_compute_cksum(const struct sk_buff *skb, | 
|---|
| 28 | unsigned int offset) | 
|---|
| 29 | { | 
|---|
| 30 | struct sctphdr *sh = (struct sctphdr *)(skb->data + offset); | 
|---|
| 31 | __le32 old = sh->checksum; | 
|---|
| 32 | u32 new; | 
|---|
| 33 |  | 
|---|
| 34 | sh->checksum = 0; | 
|---|
| 35 | new = ~skb_crc32c(skb, offset, len: skb->len - offset, crc: ~0); | 
|---|
| 36 | sh->checksum = old; | 
|---|
| 37 | return cpu_to_le32(new); | 
|---|
| 38 | } | 
|---|
| 39 |  | 
|---|
| 40 | #endif /* __sctp_checksum_h__ */ | 
|---|
| 41 |  | 
|---|