~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/net/sctp/checksum.h

Version: ~ [ linux-5.12-rc1 ] ~ [ linux-5.11.2 ] ~ [ linux-5.10.19 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.101 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.177 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.222 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.258 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.258 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.18.140 ] ~ [ linux-3.16.85 ] ~ [ linux-3.14.79 ] ~ [ linux-3.12.74 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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  *
 19  * Rewritten to use libcrc32c by:
 20  *    Vlad Yasevich <vladislav.yasevich@hp.com>
 21  */
 22 
 23 #ifndef __sctp_checksum_h__
 24 #define __sctp_checksum_h__
 25 
 26 #include <linux/types.h>
 27 #include <net/sctp/sctp.h>
 28 #include <linux/crc32c.h>
 29 #include <linux/crc32.h>
 30 
 31 static inline __wsum sctp_csum_update(const void *buff, int len, __wsum sum)
 32 {
 33         /* This uses the crypto implementation of crc32c, which is either
 34          * implemented w/ hardware support or resolves to __crc32c_le().
 35          */
 36         return (__force __wsum)crc32c((__force __u32)sum, buff, len);
 37 }
 38 
 39 static inline __wsum sctp_csum_combine(__wsum csum, __wsum csum2,
 40                                        int offset, int len)
 41 {
 42         return (__force __wsum)__crc32c_le_combine((__force __u32)csum,
 43                                                    (__force __u32)csum2, len);
 44 }
 45 
 46 static const struct skb_checksum_ops sctp_csum_ops = {
 47         .update  = sctp_csum_update,
 48         .combine = sctp_csum_combine,
 49 };
 50 
 51 static inline __le32 sctp_compute_cksum(const struct sk_buff *skb,
 52                                         unsigned int offset)
 53 {
 54         struct sctphdr *sh = (struct sctphdr *)(skb->data + offset);
 55         __le32 old = sh->checksum;
 56         __wsum new;
 57 
 58         sh->checksum = 0;
 59         new = ~__skb_checksum(skb, offset, skb->len - offset, ~(__wsum)0,
 60                               &sctp_csum_ops);
 61         sh->checksum = old;
 62 
 63         return cpu_to_le32((__force __u32)new);
 64 }
 65 
 66 #endif /* __sctp_checksum_h__ */
 67 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp