The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/include/asm-alpha/checksum.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 #ifndef _ALPHA_CHECKSUM_H
    2 #define _ALPHA_CHECKSUM_H
    3 
    4 
    5 /*
    6  *      This is a version of ip_compute_csum() optimized for IP headers,
    7  *      which always checksum on 4 octet boundaries.
    8  */
    9 extern unsigned short ip_fast_csum(unsigned char * iph, unsigned int ihl);
   10 
   11 /*
   12  * computes the checksum of the TCP/UDP pseudo-header
   13  * returns a 16-bit checksum, already complemented
   14  */
   15 extern unsigned short int csum_tcpudp_magic(unsigned long saddr,
   16                                            unsigned long daddr,
   17                                            unsigned short len,
   18                                            unsigned short proto,
   19                                            unsigned int sum);
   20 
   21 unsigned int csum_tcpudp_nofold(unsigned long saddr, unsigned long daddr,
   22                                 unsigned short len, unsigned short proto,
   23                                 unsigned int sum);
   24 
   25 /*
   26  * computes the checksum of a memory block at buff, length len,
   27  * and adds in "sum" (32-bit)
   28  *
   29  * returns a 32-bit number suitable for feeding into itself
   30  * or csum_tcpudp_magic
   31  *
   32  * this function must be called with even lengths, except
   33  * for the last fragment, which may be odd
   34  *
   35  * it's best to have buff aligned on a 32-bit boundary
   36  */
   37 extern unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum);
   38 
   39 /*
   40  * the same as csum_partial, but copies from src while it
   41  * checksums
   42  *
   43  * here even more important to align src and dst on a 32-bit (or even
   44  * better 64-bit) boundary
   45  */
   46 unsigned int csum_partial_copy(const char *src, char *dst, int len, unsigned int sum);
   47 
   48 /*
   49  * the same as csum_partial, but copies from user space (but on the alpha
   50  * we have just one address space, so this is identical to the above)
   51  *
   52  * this is obsolete and will go away.
   53  */
   54 #define csum_partial_copy_fromuser csum_partial_copy
   55 
   56 /*
   57  * this is a new version of the above that records errors it finds in *errp,
   58  * but continues and zeros the rest of the buffer.
   59  */
   60 unsigned int csum_partial_copy_from_user(const char *src, char *dst, int len, unsigned int sum, int *errp);
   61 
   62 unsigned int csum_partial_copy_nocheck(const char *src, char *dst, int len, unsigned int sum);
   63 
   64 
   65 /*
   66  * this routine is used for miscellaneous IP-like checksums, mainly
   67  * in icmp.c
   68  */
   69 
   70 extern unsigned short ip_compute_csum(unsigned char * buff, int len);
   71 
   72 /*
   73  *      Fold a partial checksum without adding pseudo headers
   74  */
   75 
   76 static inline unsigned short csum_fold(unsigned int sum)
   77 {
   78         sum = (sum & 0xffff) + (sum >> 16);
   79         sum = (sum & 0xffff) + (sum >> 16);
   80         return ~sum;
   81 }
   82 
   83 #define _HAVE_ARCH_IPV6_CSUM
   84 extern unsigned short int csum_ipv6_magic(struct in6_addr *saddr,
   85                                           struct in6_addr *daddr,
   86                                           __u32 len,
   87                                           unsigned short proto,
   88                                           unsigned int sum);
   89 
   90 #endif

Cache object: 7628f125a65001b250fda0a3d9a9e5d3


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.