sctp_crc32.c revision 188299
190075Sobrien/*- 290075Sobrien * Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved. 390075Sobrien * 490075Sobrien * Redistribution and use in source and binary forms, with or without 590075Sobrien * modification, are permitted provided that the following conditions are met: 690075Sobrien * 790075Sobrien * a) Redistributions of source code must retain the above copyright notice, 890075Sobrien * this list of conditions and the following disclaimer. 990075Sobrien * 1090075Sobrien * b) Redistributions in binary form must reproduce the above copyright 1190075Sobrien * notice, this list of conditions and the following disclaimer in 1290075Sobrien * the documentation and/or other materials provided with the distribution. 1390075Sobrien * 1490075Sobrien * c) Neither the name of Cisco Systems, Inc. nor the names of its 1590075Sobrien * contributors may be used to endorse or promote products derived 1690075Sobrien * from this software without specific prior written permission. 1790075Sobrien * 1890075Sobrien * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1990075Sobrien * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 2090075Sobrien * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2190075Sobrien * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 2290075Sobrien * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2390075Sobrien * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2490075Sobrien * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2590075Sobrien * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2690075Sobrien * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2790075Sobrien * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 2890075Sobrien * THE POSSIBILITY OF SUCH DAMAGE. 2990075Sobrien */ 3090075Sobrien 3190075Sobrien/* $KAME: sctp_crc32.c,v 1.12 2005/03/06 16:04:17 itojun Exp $ */ 3290075Sobrien 3390075Sobrien 3490075Sobrien#include <sys/cdefs.h> 3590075Sobrien__FBSDID("$FreeBSD: head/sys/netinet/sctp_crc32.c 188299 2009-02-08 03:03:55Z piso $"); 3690075Sobrien 3790075Sobrien#include <sys/types.h> 3890075Sobrien#include <sys/socket.h> 3990075Sobrien#include <sys/socketvar.h> 4090075Sobrien#include <sys/uio.h> 4190075Sobrien#include <netinet/sctp.h> 4290075Sobrien#include <netinet/sctp_os.h> 4390075Sobrien#include <netinet/sctp_crc32.h> 4490075Sobrien#include <netinet/sctp_pcb.h> 4590075Sobrien 4690075Sobrien#if !defined(SCTP_WITH_NO_CSUM) 4790075Sobrien/** 4890075Sobrien * 4990075Sobrien * Routine Description: 5090075Sobrien * 5190075Sobrien * Computes the CRC32c checksum for the specified buffer using the slicing by 8 5290075Sobrien * algorithm over 64 bit quantities. 5390075Sobrien * 5490075Sobrien * Arguments: 5590075Sobrien * 5690075Sobrien * p_running_crc - pointer to the initial or final remainder value 5790075Sobrien * used in CRC computations. It should be set to 5890075Sobrien * non-NULL if the mode argument is equal to CONT or END 5990075Sobrien * p_buf - the packet buffer where crc computations are being performed 6090075Sobrien * length - the length of p_buf in bytes 6190075Sobrien * init_bytes - the number of initial bytes that need to be procesed before 6290075Sobrien * aligning p_buf to multiples of 4 bytes 6390075Sobrien * mode - can be any of the following: BEGIN, CONT, END, BODY, ALIGN 6490075Sobrien * 6590075Sobrien * Return value: 6690075Sobrien * 6790075Sobrien * The computed CRC32c value 6890075Sobrien */ 6990075Sobrien 7090075Sobrien 7190075Sobrien/* 7290075Sobrien * Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved 7390075Sobrien * 7490075Sobrien * 7590075Sobrien * This software program is licensed subject to the BSD License, available at 7690075Sobrien * http://www.opensource.org/licenses/bsd-license.html. 7790075Sobrien * 7890075Sobrien * Abstract: 7990075Sobrien * 8090075Sobrien * Tables for software CRC generation 8190075Sobrien */ 8290075Sobrien 8390075Sobrien/* 8490075Sobrien * The following CRC lookup table was generated automagically using the 8590075Sobrien * following model parameters: 8690075Sobrien * 8790075Sobrien * Generator Polynomial = ................. 0x1EDC6F41 8890075Sobrien * Generator Polynomial Length = .......... 32 bits 8990075Sobrien * Reflected Bits = ....................... TRUE 9090075Sobrien * Table Generation Offset = .............. 32 bits 9190075Sobrien * Number of Slices = ..................... 8 slices 9290075Sobrien * Slice Lengths = ........................ 8 8 8 8 8 8 8 8 9390075Sobrien * Directory Name = ....................... .\ 9490075Sobrien * File Name = ............................ 8x256_tables.c 9590075Sobrien */ 9690075Sobrien 9790075Sobrienuint32_t sctp_crc_tableil8_o32[256] = 9890075Sobrien{ 9990075Sobrien 0x00000000, 0xF26B8303, 0xE13B70F7, 0x1350F3F4, 0xC79A971F, 0x35F1141C, 0x26A1E7E8, 0xD4CA64EB, 10090075Sobrien 0x8AD958CF, 0x78B2DBCC, 0x6BE22838, 0x9989AB3B, 0x4D43CFD0, 0xBF284CD3, 0xAC78BF27, 0x5E133C24, 10190075Sobrien 0x105EC76F, 0xE235446C, 0xF165B798, 0x030E349B, 0xD7C45070, 0x25AFD373, 0x36FF2087, 0xC494A384, 10290075Sobrien 0x9A879FA0, 0x68EC1CA3, 0x7BBCEF57, 0x89D76C54, 0x5D1D08BF, 0xAF768BBC, 0xBC267848, 0x4E4DFB4B, 10390075Sobrien 0x20BD8EDE, 0xD2D60DDD, 0xC186FE29, 0x33ED7D2A, 0xE72719C1, 0x154C9AC2, 0x061C6936, 0xF477EA35, 10490075Sobrien 0xAA64D611, 0x580F5512, 0x4B5FA6E6, 0xB93425E5, 0x6DFE410E, 0x9F95C20D, 0x8CC531F9, 0x7EAEB2FA, 10590075Sobrien 0x30E349B1, 0xC288CAB2, 0xD1D83946, 0x23B3BA45, 0xF779DEAE, 0x05125DAD, 0x1642AE59, 0xE4292D5A, 10690075Sobrien 0xBA3A117E, 0x4851927D, 0x5B016189, 0xA96AE28A, 0x7DA08661, 0x8FCB0562, 0x9C9BF696, 0x6EF07595, 10790075Sobrien 0x417B1DBC, 0xB3109EBF, 0xA0406D4B, 0x522BEE48, 0x86E18AA3, 0x748A09A0, 0x67DAFA54, 0x95B17957, 10890075Sobrien 0xCBA24573, 0x39C9C670, 0x2A993584, 0xD8F2B687, 0x0C38D26C, 0xFE53516F, 0xED03A29B, 0x1F682198, 10990075Sobrien 0x5125DAD3, 0xA34E59D0, 0xB01EAA24, 0x42752927, 0x96BF4DCC, 0x64D4CECF, 0x77843D3B, 0x85EFBE38, 11090075Sobrien 0xDBFC821C, 0x2997011F, 0x3AC7F2EB, 0xC8AC71E8, 0x1C661503, 0xEE0D9600, 0xFD5D65F4, 0x0F36E6F7, 11190075Sobrien 0x61C69362, 0x93AD1061, 0x80FDE395, 0x72966096, 0xA65C047D, 0x5437877E, 0x4767748A, 0xB50CF789, 11290075Sobrien 0xEB1FCBAD, 0x197448AE, 0x0A24BB5A, 0xF84F3859, 0x2C855CB2, 0xDEEEDFB1, 0xCDBE2C45, 0x3FD5AF46, 11390075Sobrien 0x7198540D, 0x83F3D70E, 0x90A324FA, 0x62C8A7F9, 0xB602C312, 0x44694011, 0x5739B3E5, 0xA55230E6, 11490075Sobrien 0xFB410CC2, 0x092A8FC1, 0x1A7A7C35, 0xE811FF36, 0x3CDB9BDD, 0xCEB018DE, 0xDDE0EB2A, 0x2F8B6829, 11590075Sobrien 0x82F63B78, 0x709DB87B, 0x63CD4B8F, 0x91A6C88C, 0x456CAC67, 0xB7072F64, 0xA457DC90, 0x563C5F93, 11690075Sobrien 0x082F63B7, 0xFA44E0B4, 0xE9141340, 0x1B7F9043, 0xCFB5F4A8, 0x3DDE77AB, 0x2E8E845F, 0xDCE5075C, 11790075Sobrien 0x92A8FC17, 0x60C37F14, 0x73938CE0, 0x81F80FE3, 0x55326B08, 0xA759E80B, 0xB4091BFF, 0x466298FC, 11890075Sobrien 0x1871A4D8, 0xEA1A27DB, 0xF94AD42F, 0x0B21572C, 0xDFEB33C7, 0x2D80B0C4, 0x3ED04330, 0xCCBBC033, 11990075Sobrien 0xA24BB5A6, 0x502036A5, 0x4370C551, 0xB11B4652, 0x65D122B9, 0x97BAA1BA, 0x84EA524E, 0x7681D14D, 12090075Sobrien 0x2892ED69, 0xDAF96E6A, 0xC9A99D9E, 0x3BC21E9D, 0xEF087A76, 0x1D63F975, 0x0E330A81, 0xFC588982, 12190075Sobrien 0xB21572C9, 0x407EF1CA, 0x532E023E, 0xA145813D, 0x758FE5D6, 0x87E466D5, 0x94B49521, 0x66DF1622, 12290075Sobrien 0x38CC2A06, 0xCAA7A905, 0xD9F75AF1, 0x2B9CD9F2, 0xFF56BD19, 0x0D3D3E1A, 0x1E6DCDEE, 0xEC064EED, 12390075Sobrien 0xC38D26C4, 0x31E6A5C7, 0x22B65633, 0xD0DDD530, 0x0417B1DB, 0xF67C32D8, 0xE52CC12C, 0x1747422F, 12490075Sobrien 0x49547E0B, 0xBB3FFD08, 0xA86F0EFC, 0x5A048DFF, 0x8ECEE914, 0x7CA56A17, 0x6FF599E3, 0x9D9E1AE0, 12590075Sobrien 0xD3D3E1AB, 0x21B862A8, 0x32E8915C, 0xC083125F, 0x144976B4, 0xE622F5B7, 0xF5720643, 0x07198540, 12690075Sobrien 0x590AB964, 0xAB613A67, 0xB831C993, 0x4A5A4A90, 0x9E902E7B, 0x6CFBAD78, 0x7FAB5E8C, 0x8DC0DD8F, 12790075Sobrien 0xE330A81A, 0x115B2B19, 0x020BD8ED, 0xF0605BEE, 0x24AA3F05, 0xD6C1BC06, 0xC5914FF2, 0x37FACCF1, 12890075Sobrien 0x69E9F0D5, 0x9B8273D6, 0x88D28022, 0x7AB90321, 0xAE7367CA, 0x5C18E4C9, 0x4F48173D, 0xBD23943E, 12990075Sobrien 0xF36E6F75, 0x0105EC76, 0x12551F82, 0xE03E9C81, 0x34F4F86A, 0xC69F7B69, 0xD5CF889D, 0x27A40B9E, 13090075Sobrien 0x79B737BA, 0x8BDCB4B9, 0x988C474D, 0x6AE7C44E, 0xBE2DA0A5, 0x4C4623A6, 0x5F16D052, 0xAD7D5351 13190075Sobrien}; 13290075Sobrien 13390075Sobrien/* 13490075Sobrien * end of the CRC lookup table crc_tableil8_o32 13590075Sobrien */ 13690075Sobrien 13790075Sobrien 13890075Sobrien 13990075Sobrien/* 14090075Sobrien * The following CRC lookup table was generated automagically using the 14190075Sobrien * following model parameters: 14290075Sobrien * 14390075Sobrien * Generator Polynomial = ................. 0x1EDC6F41 14490075Sobrien * Generator Polynomial Length = .......... 32 bits 14590075Sobrien * Reflected Bits = ....................... TRUE 14690075Sobrien * Table Generation Offset = .............. 32 bits 14790075Sobrien * Number of Slices = ..................... 8 slices 14890075Sobrien * Slice Lengths = ........................ 8 8 8 8 8 8 8 8 14990075Sobrien * Directory Name = ....................... .\ 15090075Sobrien * File Name = ............................ 8x256_tables.c 15190075Sobrien */ 15290075Sobrien 15390075Sobrienuint32_t sctp_crc_tableil8_o40[256] = 15490075Sobrien{ 15590075Sobrien 0x00000000, 0x13A29877, 0x274530EE, 0x34E7A899, 0x4E8A61DC, 0x5D28F9AB, 0x69CF5132, 0x7A6DC945, 15690075Sobrien 0x9D14C3B8, 0x8EB65BCF, 0xBA51F356, 0xA9F36B21, 0xD39EA264, 0xC03C3A13, 0xF4DB928A, 0xE7790AFD, 15790075Sobrien 0x3FC5F181, 0x2C6769F6, 0x1880C16F, 0x0B225918, 0x714F905D, 0x62ED082A, 0x560AA0B3, 0x45A838C4, 15890075Sobrien 0xA2D13239, 0xB173AA4E, 0x859402D7, 0x96369AA0, 0xEC5B53E5, 0xFFF9CB92, 0xCB1E630B, 0xD8BCFB7C, 15990075Sobrien 0x7F8BE302, 0x6C297B75, 0x58CED3EC, 0x4B6C4B9B, 0x310182DE, 0x22A31AA9, 0x1644B230, 0x05E62A47, 16090075Sobrien 0xE29F20BA, 0xF13DB8CD, 0xC5DA1054, 0xD6788823, 0xAC154166, 0xBFB7D911, 0x8B507188, 0x98F2E9FF, 16190075Sobrien 0x404E1283, 0x53EC8AF4, 0x670B226D, 0x74A9BA1A, 0x0EC4735F, 0x1D66EB28, 0x298143B1, 0x3A23DBC6, 16290075Sobrien 0xDD5AD13B, 0xCEF8494C, 0xFA1FE1D5, 0xE9BD79A2, 0x93D0B0E7, 0x80722890, 0xB4958009, 0xA737187E, 16390075Sobrien 0xFF17C604, 0xECB55E73, 0xD852F6EA, 0xCBF06E9D, 0xB19DA7D8, 0xA23F3FAF, 0x96D89736, 0x857A0F41, 16490075Sobrien 0x620305BC, 0x71A19DCB, 0x45463552, 0x56E4AD25, 0x2C896460, 0x3F2BFC17, 0x0BCC548E, 0x186ECCF9, 16590075Sobrien 0xC0D23785, 0xD370AFF2, 0xE797076B, 0xF4359F1C, 0x8E585659, 0x9DFACE2E, 0xA91D66B7, 0xBABFFEC0, 16690075Sobrien 0x5DC6F43D, 0x4E646C4A, 0x7A83C4D3, 0x69215CA4, 0x134C95E1, 0x00EE0D96, 0x3409A50F, 0x27AB3D78, 16790075Sobrien 0x809C2506, 0x933EBD71, 0xA7D915E8, 0xB47B8D9F, 0xCE1644DA, 0xDDB4DCAD, 0xE9537434, 0xFAF1EC43, 16890075Sobrien 0x1D88E6BE, 0x0E2A7EC9, 0x3ACDD650, 0x296F4E27, 0x53028762, 0x40A01F15, 0x7447B78C, 0x67E52FFB, 16990075Sobrien 0xBF59D487, 0xACFB4CF0, 0x981CE469, 0x8BBE7C1E, 0xF1D3B55B, 0xE2712D2C, 0xD69685B5, 0xC5341DC2, 17090075Sobrien 0x224D173F, 0x31EF8F48, 0x050827D1, 0x16AABFA6, 0x6CC776E3, 0x7F65EE94, 0x4B82460D, 0x5820DE7A, 17190075Sobrien 0xFBC3FAF9, 0xE861628E, 0xDC86CA17, 0xCF245260, 0xB5499B25, 0xA6EB0352, 0x920CABCB, 0x81AE33BC, 17290075Sobrien 0x66D73941, 0x7575A136, 0x419209AF, 0x523091D8, 0x285D589D, 0x3BFFC0EA, 0x0F186873, 0x1CBAF004, 17390075Sobrien 0xC4060B78, 0xD7A4930F, 0xE3433B96, 0xF0E1A3E1, 0x8A8C6AA4, 0x992EF2D3, 0xADC95A4A, 0xBE6BC23D, 17490075Sobrien 0x5912C8C0, 0x4AB050B7, 0x7E57F82E, 0x6DF56059, 0x1798A91C, 0x043A316B, 0x30DD99F2, 0x237F0185, 17590075Sobrien 0x844819FB, 0x97EA818C, 0xA30D2915, 0xB0AFB162, 0xCAC27827, 0xD960E050, 0xED8748C9, 0xFE25D0BE, 17690075Sobrien 0x195CDA43, 0x0AFE4234, 0x3E19EAAD, 0x2DBB72DA, 0x57D6BB9F, 0x447423E8, 0x70938B71, 0x63311306, 17790075Sobrien 0xBB8DE87A, 0xA82F700D, 0x9CC8D894, 0x8F6A40E3, 0xF50789A6, 0xE6A511D1, 0xD242B948, 0xC1E0213F, 17890075Sobrien 0x26992BC2, 0x353BB3B5, 0x01DC1B2C, 0x127E835B, 0x68134A1E, 0x7BB1D269, 0x4F567AF0, 0x5CF4E287, 17990075Sobrien 0x04D43CFD, 0x1776A48A, 0x23910C13, 0x30339464, 0x4A5E5D21, 0x59FCC556, 0x6D1B6DCF, 0x7EB9F5B8, 18090075Sobrien 0x99C0FF45, 0x8A626732, 0xBE85CFAB, 0xAD2757DC, 0xD74A9E99, 0xC4E806EE, 0xF00FAE77, 0xE3AD3600, 18190075Sobrien 0x3B11CD7C, 0x28B3550B, 0x1C54FD92, 0x0FF665E5, 0x759BACA0, 0x663934D7, 0x52DE9C4E, 0x417C0439, 18290075Sobrien 0xA6050EC4, 0xB5A796B3, 0x81403E2A, 0x92E2A65D, 0xE88F6F18, 0xFB2DF76F, 0xCFCA5FF6, 0xDC68C781, 18390075Sobrien 0x7B5FDFFF, 0x68FD4788, 0x5C1AEF11, 0x4FB87766, 0x35D5BE23, 0x26772654, 0x12908ECD, 0x013216BA, 18490075Sobrien 0xE64B1C47, 0xF5E98430, 0xC10E2CA9, 0xD2ACB4DE, 0xA8C17D9B, 0xBB63E5EC, 0x8F844D75, 0x9C26D502, 18590075Sobrien 0x449A2E7E, 0x5738B609, 0x63DF1E90, 0x707D86E7, 0x0A104FA2, 0x19B2D7D5, 0x2D557F4C, 0x3EF7E73B, 18690075Sobrien 0xD98EEDC6, 0xCA2C75B1, 0xFECBDD28, 0xED69455F, 0x97048C1A, 0x84A6146D, 0xB041BCF4, 0xA3E32483 18790075Sobrien}; 18890075Sobrien 18990075Sobrien/* 19090075Sobrien * end of the CRC lookup table crc_tableil8_o40 19190075Sobrien */ 19290075Sobrien 19390075Sobrien 19490075Sobrien 19590075Sobrien/* 19690075Sobrien * The following CRC lookup table was generated automagically using the 19790075Sobrien * following model parameters: 19890075Sobrien * 19990075Sobrien * Generator Polynomial = ................. 0x1EDC6F41 20090075Sobrien * Generator Polynomial Length = .......... 32 bits 20190075Sobrien * Reflected Bits = ....................... TRUE 20290075Sobrien * Table Generation Offset = .............. 32 bits 20390075Sobrien * Number of Slices = ..................... 8 slices 20490075Sobrien * Slice Lengths = ........................ 8 8 8 8 8 8 8 8 20590075Sobrien * Directory Name = ....................... .\ 20690075Sobrien * File Name = ............................ 8x256_tables.c 20790075Sobrien */ 20890075Sobrien 20990075Sobrienuint32_t sctp_crc_tableil8_o48[256] = 21090075Sobrien{ 21190075Sobrien 0x00000000, 0xA541927E, 0x4F6F520D, 0xEA2EC073, 0x9EDEA41A, 0x3B9F3664, 0xD1B1F617, 0x74F06469, 21290075Sobrien 0x38513EC5, 0x9D10ACBB, 0x773E6CC8, 0xD27FFEB6, 0xA68F9ADF, 0x03CE08A1, 0xE9E0C8D2, 0x4CA15AAC, 21390075Sobrien 0x70A27D8A, 0xD5E3EFF4, 0x3FCD2F87, 0x9A8CBDF9, 0xEE7CD990, 0x4B3D4BEE, 0xA1138B9D, 0x045219E3, 21490075Sobrien 0x48F3434F, 0xEDB2D131, 0x079C1142, 0xA2DD833C, 0xD62DE755, 0x736C752B, 0x9942B558, 0x3C032726, 21590075Sobrien 0xE144FB14, 0x4405696A, 0xAE2BA919, 0x0B6A3B67, 0x7F9A5F0E, 0xDADBCD70, 0x30F50D03, 0x95B49F7D, 21690075Sobrien 0xD915C5D1, 0x7C5457AF, 0x967A97DC, 0x333B05A2, 0x47CB61CB, 0xE28AF3B5, 0x08A433C6, 0xADE5A1B8, 21790075Sobrien 0x91E6869E, 0x34A714E0, 0xDE89D493, 0x7BC846ED, 0x0F382284, 0xAA79B0FA, 0x40577089, 0xE516E2F7, 21890075Sobrien 0xA9B7B85B, 0x0CF62A25, 0xE6D8EA56, 0x43997828, 0x37691C41, 0x92288E3F, 0x78064E4C, 0xDD47DC32, 21990075Sobrien 0xC76580D9, 0x622412A7, 0x880AD2D4, 0x2D4B40AA, 0x59BB24C3, 0xFCFAB6BD, 0x16D476CE, 0xB395E4B0, 22090075Sobrien 0xFF34BE1C, 0x5A752C62, 0xB05BEC11, 0x151A7E6F, 0x61EA1A06, 0xC4AB8878, 0x2E85480B, 0x8BC4DA75, 22190075Sobrien 0xB7C7FD53, 0x12866F2D, 0xF8A8AF5E, 0x5DE93D20, 0x29195949, 0x8C58CB37, 0x66760B44, 0xC337993A, 22290075Sobrien 0x8F96C396, 0x2AD751E8, 0xC0F9919B, 0x65B803E5, 0x1148678C, 0xB409F5F2, 0x5E273581, 0xFB66A7FF, 22390075Sobrien 0x26217BCD, 0x8360E9B3, 0x694E29C0, 0xCC0FBBBE, 0xB8FFDFD7, 0x1DBE4DA9, 0xF7908DDA, 0x52D11FA4, 22490075Sobrien 0x1E704508, 0xBB31D776, 0x511F1705, 0xF45E857B, 0x80AEE112, 0x25EF736C, 0xCFC1B31F, 0x6A802161, 22590075Sobrien 0x56830647, 0xF3C29439, 0x19EC544A, 0xBCADC634, 0xC85DA25D, 0x6D1C3023, 0x8732F050, 0x2273622E, 22690075Sobrien 0x6ED23882, 0xCB93AAFC, 0x21BD6A8F, 0x84FCF8F1, 0xF00C9C98, 0x554D0EE6, 0xBF63CE95, 0x1A225CEB, 22790075Sobrien 0x8B277743, 0x2E66E53D, 0xC448254E, 0x6109B730, 0x15F9D359, 0xB0B84127, 0x5A968154, 0xFFD7132A, 22890075Sobrien 0xB3764986, 0x1637DBF8, 0xFC191B8B, 0x595889F5, 0x2DA8ED9C, 0x88E97FE2, 0x62C7BF91, 0xC7862DEF, 22990075Sobrien 0xFB850AC9, 0x5EC498B7, 0xB4EA58C4, 0x11ABCABA, 0x655BAED3, 0xC01A3CAD, 0x2A34FCDE, 0x8F756EA0, 23090075Sobrien 0xC3D4340C, 0x6695A672, 0x8CBB6601, 0x29FAF47F, 0x5D0A9016, 0xF84B0268, 0x1265C21B, 0xB7245065, 23190075Sobrien 0x6A638C57, 0xCF221E29, 0x250CDE5A, 0x804D4C24, 0xF4BD284D, 0x51FCBA33, 0xBBD27A40, 0x1E93E83E, 23290075Sobrien 0x5232B292, 0xF77320EC, 0x1D5DE09F, 0xB81C72E1, 0xCCEC1688, 0x69AD84F6, 0x83834485, 0x26C2D6FB, 23390075Sobrien 0x1AC1F1DD, 0xBF8063A3, 0x55AEA3D0, 0xF0EF31AE, 0x841F55C7, 0x215EC7B9, 0xCB7007CA, 0x6E3195B4, 23490075Sobrien 0x2290CF18, 0x87D15D66, 0x6DFF9D15, 0xC8BE0F6B, 0xBC4E6B02, 0x190FF97C, 0xF321390F, 0x5660AB71, 23590075Sobrien 0x4C42F79A, 0xE90365E4, 0x032DA597, 0xA66C37E9, 0xD29C5380, 0x77DDC1FE, 0x9DF3018D, 0x38B293F3, 23690075Sobrien 0x7413C95F, 0xD1525B21, 0x3B7C9B52, 0x9E3D092C, 0xEACD6D45, 0x4F8CFF3B, 0xA5A23F48, 0x00E3AD36, 23790075Sobrien 0x3CE08A10, 0x99A1186E, 0x738FD81D, 0xD6CE4A63, 0xA23E2E0A, 0x077FBC74, 0xED517C07, 0x4810EE79, 23890075Sobrien 0x04B1B4D5, 0xA1F026AB, 0x4BDEE6D8, 0xEE9F74A6, 0x9A6F10CF, 0x3F2E82B1, 0xD50042C2, 0x7041D0BC, 23990075Sobrien 0xAD060C8E, 0x08479EF0, 0xE2695E83, 0x4728CCFD, 0x33D8A894, 0x96993AEA, 0x7CB7FA99, 0xD9F668E7, 24090075Sobrien 0x9557324B, 0x3016A035, 0xDA386046, 0x7F79F238, 0x0B899651, 0xAEC8042F, 0x44E6C45C, 0xE1A75622, 24190075Sobrien 0xDDA47104, 0x78E5E37A, 0x92CB2309, 0x378AB177, 0x437AD51E, 0xE63B4760, 0x0C158713, 0xA954156D, 24290075Sobrien 0xE5F54FC1, 0x40B4DDBF, 0xAA9A1DCC, 0x0FDB8FB2, 0x7B2BEBDB, 0xDE6A79A5, 0x3444B9D6, 0x91052BA8 24390075Sobrien}; 24490075Sobrien 24590075Sobrien/* 24690075Sobrien * end of the CRC lookup table crc_tableil8_o48 24790075Sobrien */ 24890075Sobrien 24990075Sobrien 25090075Sobrien 25190075Sobrien/* 25290075Sobrien * The following CRC lookup table was generated automagically using the 25390075Sobrien * following model parameters: 25490075Sobrien * 25590075Sobrien * Generator Polynomial = ................. 0x1EDC6F41 25690075Sobrien * Generator Polynomial Length = .......... 32 bits 25790075Sobrien * Reflected Bits = ....................... TRUE 25890075Sobrien * Table Generation Offset = .............. 32 bits 25990075Sobrien * Number of Slices = ..................... 8 slices 26090075Sobrien * Slice Lengths = ........................ 8 8 8 8 8 8 8 8 26190075Sobrien * Directory Name = ....................... .\ 26290075Sobrien * File Name = ............................ 8x256_tables.c 26390075Sobrien */ 26490075Sobrien 26590075Sobrienuint32_t sctp_crc_tableil8_o56[256] = 26690075Sobrien{ 26790075Sobrien 0x00000000, 0xDD45AAB8, 0xBF672381, 0x62228939, 0x7B2231F3, 0xA6679B4B, 0xC4451272, 0x1900B8CA, 26890075Sobrien 0xF64463E6, 0x2B01C95E, 0x49234067, 0x9466EADF, 0x8D665215, 0x5023F8AD, 0x32017194, 0xEF44DB2C, 26990075Sobrien 0xE964B13D, 0x34211B85, 0x560392BC, 0x8B463804, 0x924680CE, 0x4F032A76, 0x2D21A34F, 0xF06409F7, 27090075Sobrien 0x1F20D2DB, 0xC2657863, 0xA047F15A, 0x7D025BE2, 0x6402E328, 0xB9474990, 0xDB65C0A9, 0x06206A11, 27190075Sobrien 0xD725148B, 0x0A60BE33, 0x6842370A, 0xB5079DB2, 0xAC072578, 0x71428FC0, 0x136006F9, 0xCE25AC41, 27290075Sobrien 0x2161776D, 0xFC24DDD5, 0x9E0654EC, 0x4343FE54, 0x5A43469E, 0x8706EC26, 0xE524651F, 0x3861CFA7, 27390075Sobrien 0x3E41A5B6, 0xE3040F0E, 0x81268637, 0x5C632C8F, 0x45639445, 0x98263EFD, 0xFA04B7C4, 0x27411D7C, 27490075Sobrien 0xC805C650, 0x15406CE8, 0x7762E5D1, 0xAA274F69, 0xB327F7A3, 0x6E625D1B, 0x0C40D422, 0xD1057E9A, 27590075Sobrien 0xABA65FE7, 0x76E3F55F, 0x14C17C66, 0xC984D6DE, 0xD0846E14, 0x0DC1C4AC, 0x6FE34D95, 0xB2A6E72D, 27690075Sobrien 0x5DE23C01, 0x80A796B9, 0xE2851F80, 0x3FC0B538, 0x26C00DF2, 0xFB85A74A, 0x99A72E73, 0x44E284CB, 27790075Sobrien 0x42C2EEDA, 0x9F874462, 0xFDA5CD5B, 0x20E067E3, 0x39E0DF29, 0xE4A57591, 0x8687FCA8, 0x5BC25610, 27890075Sobrien 0xB4868D3C, 0x69C32784, 0x0BE1AEBD, 0xD6A40405, 0xCFA4BCCF, 0x12E11677, 0x70C39F4E, 0xAD8635F6, 27990075Sobrien 0x7C834B6C, 0xA1C6E1D4, 0xC3E468ED, 0x1EA1C255, 0x07A17A9F, 0xDAE4D027, 0xB8C6591E, 0x6583F3A6, 28090075Sobrien 0x8AC7288A, 0x57828232, 0x35A00B0B, 0xE8E5A1B3, 0xF1E51979, 0x2CA0B3C1, 0x4E823AF8, 0x93C79040, 28190075Sobrien 0x95E7FA51, 0x48A250E9, 0x2A80D9D0, 0xF7C57368, 0xEEC5CBA2, 0x3380611A, 0x51A2E823, 0x8CE7429B, 28290075Sobrien 0x63A399B7, 0xBEE6330F, 0xDCC4BA36, 0x0181108E, 0x1881A844, 0xC5C402FC, 0xA7E68BC5, 0x7AA3217D, 28390075Sobrien 0x52A0C93F, 0x8FE56387, 0xEDC7EABE, 0x30824006, 0x2982F8CC, 0xF4C75274, 0x96E5DB4D, 0x4BA071F5, 28490075Sobrien 0xA4E4AAD9, 0x79A10061, 0x1B838958, 0xC6C623E0, 0xDFC69B2A, 0x02833192, 0x60A1B8AB, 0xBDE41213, 28590075Sobrien 0xBBC47802, 0x6681D2BA, 0x04A35B83, 0xD9E6F13B, 0xC0E649F1, 0x1DA3E349, 0x7F816A70, 0xA2C4C0C8, 28690075Sobrien 0x4D801BE4, 0x90C5B15C, 0xF2E73865, 0x2FA292DD, 0x36A22A17, 0xEBE780AF, 0x89C50996, 0x5480A32E, 28790075Sobrien 0x8585DDB4, 0x58C0770C, 0x3AE2FE35, 0xE7A7548D, 0xFEA7EC47, 0x23E246FF, 0x41C0CFC6, 0x9C85657E, 28890075Sobrien 0x73C1BE52, 0xAE8414EA, 0xCCA69DD3, 0x11E3376B, 0x08E38FA1, 0xD5A62519, 0xB784AC20, 0x6AC10698, 28990075Sobrien 0x6CE16C89, 0xB1A4C631, 0xD3864F08, 0x0EC3E5B0, 0x17C35D7A, 0xCA86F7C2, 0xA8A47EFB, 0x75E1D443, 29090075Sobrien 0x9AA50F6F, 0x47E0A5D7, 0x25C22CEE, 0xF8878656, 0xE1873E9C, 0x3CC29424, 0x5EE01D1D, 0x83A5B7A5, 29190075Sobrien 0xF90696D8, 0x24433C60, 0x4661B559, 0x9B241FE1, 0x8224A72B, 0x5F610D93, 0x3D4384AA, 0xE0062E12, 29290075Sobrien 0x0F42F53E, 0xD2075F86, 0xB025D6BF, 0x6D607C07, 0x7460C4CD, 0xA9256E75, 0xCB07E74C, 0x16424DF4, 29390075Sobrien 0x106227E5, 0xCD278D5D, 0xAF050464, 0x7240AEDC, 0x6B401616, 0xB605BCAE, 0xD4273597, 0x09629F2F, 29490075Sobrien 0xE6264403, 0x3B63EEBB, 0x59416782, 0x8404CD3A, 0x9D0475F0, 0x4041DF48, 0x22635671, 0xFF26FCC9, 29590075Sobrien 0x2E238253, 0xF36628EB, 0x9144A1D2, 0x4C010B6A, 0x5501B3A0, 0x88441918, 0xEA669021, 0x37233A99, 29690075Sobrien 0xD867E1B5, 0x05224B0D, 0x6700C234, 0xBA45688C, 0xA345D046, 0x7E007AFE, 0x1C22F3C7, 0xC167597F, 29790075Sobrien 0xC747336E, 0x1A0299D6, 0x782010EF, 0xA565BA57, 0xBC65029D, 0x6120A825, 0x0302211C, 0xDE478BA4, 29890075Sobrien 0x31035088, 0xEC46FA30, 0x8E647309, 0x5321D9B1, 0x4A21617B, 0x9764CBC3, 0xF54642FA, 0x2803E842 29990075Sobrien}; 30090075Sobrien 30190075Sobrien/* 30290075Sobrien * end of the CRC lookup table crc_tableil8_o56 30390075Sobrien */ 30490075Sobrien 30590075Sobrien 30690075Sobrien 30790075Sobrien/* 30890075Sobrien * The following CRC lookup table was generated automagically using the 30990075Sobrien * following model parameters: 31090075Sobrien * 31190075Sobrien * Generator Polynomial = ................. 0x1EDC6F41 31290075Sobrien * Generator Polynomial Length = .......... 32 bits 31390075Sobrien * Reflected Bits = ....................... TRUE 31490075Sobrien * Table Generation Offset = .............. 32 bits 31590075Sobrien * Number of Slices = ..................... 8 slices 31690075Sobrien * Slice Lengths = ........................ 8 8 8 8 8 8 8 8 31790075Sobrien * Directory Name = ....................... .\ 31890075Sobrien * File Name = ............................ 8x256_tables.c 31990075Sobrien */ 32090075Sobrien 32190075Sobrienuint32_t sctp_crc_tableil8_o64[256] = 32290075Sobrien{ 32390075Sobrien 0x00000000, 0x38116FAC, 0x7022DF58, 0x4833B0F4, 0xE045BEB0, 0xD854D11C, 0x906761E8, 0xA8760E44, 32490075Sobrien 0xC5670B91, 0xFD76643D, 0xB545D4C9, 0x8D54BB65, 0x2522B521, 0x1D33DA8D, 0x55006A79, 0x6D1105D5, 32590075Sobrien 0x8F2261D3, 0xB7330E7F, 0xFF00BE8B, 0xC711D127, 0x6F67DF63, 0x5776B0CF, 0x1F45003B, 0x27546F97, 32690075Sobrien 0x4A456A42, 0x725405EE, 0x3A67B51A, 0x0276DAB6, 0xAA00D4F2, 0x9211BB5E, 0xDA220BAA, 0xE2336406, 32790075Sobrien 0x1BA8B557, 0x23B9DAFB, 0x6B8A6A0F, 0x539B05A3, 0xFBED0BE7, 0xC3FC644B, 0x8BCFD4BF, 0xB3DEBB13, 32890075Sobrien 0xDECFBEC6, 0xE6DED16A, 0xAEED619E, 0x96FC0E32, 0x3E8A0076, 0x069B6FDA, 0x4EA8DF2E, 0x76B9B082, 32990075Sobrien 0x948AD484, 0xAC9BBB28, 0xE4A80BDC, 0xDCB96470, 0x74CF6A34, 0x4CDE0598, 0x04EDB56C, 0x3CFCDAC0, 33090075Sobrien 0x51EDDF15, 0x69FCB0B9, 0x21CF004D, 0x19DE6FE1, 0xB1A861A5, 0x89B90E09, 0xC18ABEFD, 0xF99BD151, 33190075Sobrien 0x37516AAE, 0x0F400502, 0x4773B5F6, 0x7F62DA5A, 0xD714D41E, 0xEF05BBB2, 0xA7360B46, 0x9F2764EA, 33290075Sobrien 0xF236613F, 0xCA270E93, 0x8214BE67, 0xBA05D1CB, 0x1273DF8F, 0x2A62B023, 0x625100D7, 0x5A406F7B, 33390075Sobrien 0xB8730B7D, 0x806264D1, 0xC851D425, 0xF040BB89, 0x5836B5CD, 0x6027DA61, 0x28146A95, 0x10050539, 33490075Sobrien 0x7D1400EC, 0x45056F40, 0x0D36DFB4, 0x3527B018, 0x9D51BE5C, 0xA540D1F0, 0xED736104, 0xD5620EA8, 33590075Sobrien 0x2CF9DFF9, 0x14E8B055, 0x5CDB00A1, 0x64CA6F0D, 0xCCBC6149, 0xF4AD0EE5, 0xBC9EBE11, 0x848FD1BD, 33690075Sobrien 0xE99ED468, 0xD18FBBC4, 0x99BC0B30, 0xA1AD649C, 0x09DB6AD8, 0x31CA0574, 0x79F9B580, 0x41E8DA2C, 33790075Sobrien 0xA3DBBE2A, 0x9BCAD186, 0xD3F96172, 0xEBE80EDE, 0x439E009A, 0x7B8F6F36, 0x33BCDFC2, 0x0BADB06E, 33890075Sobrien 0x66BCB5BB, 0x5EADDA17, 0x169E6AE3, 0x2E8F054F, 0x86F90B0B, 0xBEE864A7, 0xF6DBD453, 0xCECABBFF, 33990075Sobrien 0x6EA2D55C, 0x56B3BAF0, 0x1E800A04, 0x269165A8, 0x8EE76BEC, 0xB6F60440, 0xFEC5B4B4, 0xC6D4DB18, 34090075Sobrien 0xABC5DECD, 0x93D4B161, 0xDBE70195, 0xE3F66E39, 0x4B80607D, 0x73910FD1, 0x3BA2BF25, 0x03B3D089, 34190075Sobrien 0xE180B48F, 0xD991DB23, 0x91A26BD7, 0xA9B3047B, 0x01C50A3F, 0x39D46593, 0x71E7D567, 0x49F6BACB, 34290075Sobrien 0x24E7BF1E, 0x1CF6D0B2, 0x54C56046, 0x6CD40FEA, 0xC4A201AE, 0xFCB36E02, 0xB480DEF6, 0x8C91B15A, 34390075Sobrien 0x750A600B, 0x4D1B0FA7, 0x0528BF53, 0x3D39D0FF, 0x954FDEBB, 0xAD5EB117, 0xE56D01E3, 0xDD7C6E4F, 34490075Sobrien 0xB06D6B9A, 0x887C0436, 0xC04FB4C2, 0xF85EDB6E, 0x5028D52A, 0x6839BA86, 0x200A0A72, 0x181B65DE, 34590075Sobrien 0xFA2801D8, 0xC2396E74, 0x8A0ADE80, 0xB21BB12C, 0x1A6DBF68, 0x227CD0C4, 0x6A4F6030, 0x525E0F9C, 34690075Sobrien 0x3F4F0A49, 0x075E65E5, 0x4F6DD511, 0x777CBABD, 0xDF0AB4F9, 0xE71BDB55, 0xAF286BA1, 0x9739040D, 34790075Sobrien 0x59F3BFF2, 0x61E2D05E, 0x29D160AA, 0x11C00F06, 0xB9B60142, 0x81A76EEE, 0xC994DE1A, 0xF185B1B6, 34890075Sobrien 0x9C94B463, 0xA485DBCF, 0xECB66B3B, 0xD4A70497, 0x7CD10AD3, 0x44C0657F, 0x0CF3D58B, 0x34E2BA27, 34990075Sobrien 0xD6D1DE21, 0xEEC0B18D, 0xA6F30179, 0x9EE26ED5, 0x36946091, 0x0E850F3D, 0x46B6BFC9, 0x7EA7D065, 35090075Sobrien 0x13B6D5B0, 0x2BA7BA1C, 0x63940AE8, 0x5B856544, 0xF3F36B00, 0xCBE204AC, 0x83D1B458, 0xBBC0DBF4, 35190075Sobrien 0x425B0AA5, 0x7A4A6509, 0x3279D5FD, 0x0A68BA51, 0xA21EB415, 0x9A0FDBB9, 0xD23C6B4D, 0xEA2D04E1, 35290075Sobrien 0x873C0134, 0xBF2D6E98, 0xF71EDE6C, 0xCF0FB1C0, 0x6779BF84, 0x5F68D028, 0x175B60DC, 0x2F4A0F70, 35390075Sobrien 0xCD796B76, 0xF56804DA, 0xBD5BB42E, 0x854ADB82, 0x2D3CD5C6, 0x152DBA6A, 0x5D1E0A9E, 0x650F6532, 35490075Sobrien 0x081E60E7, 0x300F0F4B, 0x783CBFBF, 0x402DD013, 0xE85BDE57, 0xD04AB1FB, 0x9879010F, 0xA0686EA3 35590075Sobrien}; 35690075Sobrien 35790075Sobrien/* 35890075Sobrien * end of the CRC lookup table crc_tableil8_o64 35990075Sobrien */ 36090075Sobrien 36190075Sobrien 36290075Sobrien 36390075Sobrien/* 36490075Sobrien * The following CRC lookup table was generated automagically using the 36590075Sobrien * following model parameters: 36690075Sobrien * 36790075Sobrien * Generator Polynomial = ................. 0x1EDC6F41 36890075Sobrien * Generator Polynomial Length = .......... 32 bits 36990075Sobrien * Reflected Bits = ....................... TRUE 37090075Sobrien * Table Generation Offset = .............. 32 bits 37190075Sobrien * Number of Slices = ..................... 8 slices 37290075Sobrien * Slice Lengths = ........................ 8 8 8 8 8 8 8 8 37390075Sobrien * Directory Name = ....................... .\ 37490075Sobrien * File Name = ............................ 8x256_tables.c 37590075Sobrien */ 37690075Sobrien 37790075Sobrienuint32_t sctp_crc_tableil8_o72[256] = 37890075Sobrien{ 37990075Sobrien 0x00000000, 0xEF306B19, 0xDB8CA0C3, 0x34BCCBDA, 0xB2F53777, 0x5DC55C6E, 0x697997B4, 0x8649FCAD, 38090075Sobrien 0x6006181F, 0x8F367306, 0xBB8AB8DC, 0x54BAD3C5, 0xD2F32F68, 0x3DC34471, 0x097F8FAB, 0xE64FE4B2, 38190075Sobrien 0xC00C303E, 0x2F3C5B27, 0x1B8090FD, 0xF4B0FBE4, 0x72F90749, 0x9DC96C50, 0xA975A78A, 0x4645CC93, 38290075Sobrien 0xA00A2821, 0x4F3A4338, 0x7B8688E2, 0x94B6E3FB, 0x12FF1F56, 0xFDCF744F, 0xC973BF95, 0x2643D48C, 38390075Sobrien 0x85F4168D, 0x6AC47D94, 0x5E78B64E, 0xB148DD57, 0x370121FA, 0xD8314AE3, 0xEC8D8139, 0x03BDEA20, 38490075Sobrien 0xE5F20E92, 0x0AC2658B, 0x3E7EAE51, 0xD14EC548, 0x570739E5, 0xB83752FC, 0x8C8B9926, 0x63BBF23F, 38590075Sobrien 0x45F826B3, 0xAAC84DAA, 0x9E748670, 0x7144ED69, 0xF70D11C4, 0x183D7ADD, 0x2C81B107, 0xC3B1DA1E, 38690075Sobrien 0x25FE3EAC, 0xCACE55B5, 0xFE729E6F, 0x1142F576, 0x970B09DB, 0x783B62C2, 0x4C87A918, 0xA3B7C201, 38790075Sobrien 0x0E045BEB, 0xE13430F2, 0xD588FB28, 0x3AB89031, 0xBCF16C9C, 0x53C10785, 0x677DCC5F, 0x884DA746, 38890075Sobrien 0x6E0243F4, 0x813228ED, 0xB58EE337, 0x5ABE882E, 0xDCF77483, 0x33C71F9A, 0x077BD440, 0xE84BBF59, 38990075Sobrien 0xCE086BD5, 0x213800CC, 0x1584CB16, 0xFAB4A00F, 0x7CFD5CA2, 0x93CD37BB, 0xA771FC61, 0x48419778, 39090075Sobrien 0xAE0E73CA, 0x413E18D3, 0x7582D309, 0x9AB2B810, 0x1CFB44BD, 0xF3CB2FA4, 0xC777E47E, 0x28478F67, 39190075Sobrien 0x8BF04D66, 0x64C0267F, 0x507CEDA5, 0xBF4C86BC, 0x39057A11, 0xD6351108, 0xE289DAD2, 0x0DB9B1CB, 39290075Sobrien 0xEBF65579, 0x04C63E60, 0x307AF5BA, 0xDF4A9EA3, 0x5903620E, 0xB6330917, 0x828FC2CD, 0x6DBFA9D4, 39390075Sobrien 0x4BFC7D58, 0xA4CC1641, 0x9070DD9B, 0x7F40B682, 0xF9094A2F, 0x16392136, 0x2285EAEC, 0xCDB581F5, 39490075Sobrien 0x2BFA6547, 0xC4CA0E5E, 0xF076C584, 0x1F46AE9D, 0x990F5230, 0x763F3929, 0x4283F2F3, 0xADB399EA, 39590075Sobrien 0x1C08B7D6, 0xF338DCCF, 0xC7841715, 0x28B47C0C, 0xAEFD80A1, 0x41CDEBB8, 0x75712062, 0x9A414B7B, 39690075Sobrien 0x7C0EAFC9, 0x933EC4D0, 0xA7820F0A, 0x48B26413, 0xCEFB98BE, 0x21CBF3A7, 0x1577387D, 0xFA475364, 39790075Sobrien 0xDC0487E8, 0x3334ECF1, 0x0788272B, 0xE8B84C32, 0x6EF1B09F, 0x81C1DB86, 0xB57D105C, 0x5A4D7B45, 39890075Sobrien 0xBC029FF7, 0x5332F4EE, 0x678E3F34, 0x88BE542D, 0x0EF7A880, 0xE1C7C399, 0xD57B0843, 0x3A4B635A, 39990075Sobrien 0x99FCA15B, 0x76CCCA42, 0x42700198, 0xAD406A81, 0x2B09962C, 0xC439FD35, 0xF08536EF, 0x1FB55DF6, 40090075Sobrien 0xF9FAB944, 0x16CAD25D, 0x22761987, 0xCD46729E, 0x4B0F8E33, 0xA43FE52A, 0x90832EF0, 0x7FB345E9, 40190075Sobrien 0x59F09165, 0xB6C0FA7C, 0x827C31A6, 0x6D4C5ABF, 0xEB05A612, 0x0435CD0B, 0x308906D1, 0xDFB96DC8, 40290075Sobrien 0x39F6897A, 0xD6C6E263, 0xE27A29B9, 0x0D4A42A0, 0x8B03BE0D, 0x6433D514, 0x508F1ECE, 0xBFBF75D7, 40390075Sobrien 0x120CEC3D, 0xFD3C8724, 0xC9804CFE, 0x26B027E7, 0xA0F9DB4A, 0x4FC9B053, 0x7B757B89, 0x94451090, 40490075Sobrien 0x720AF422, 0x9D3A9F3B, 0xA98654E1, 0x46B63FF8, 0xC0FFC355, 0x2FCFA84C, 0x1B736396, 0xF443088F, 40590075Sobrien 0xD200DC03, 0x3D30B71A, 0x098C7CC0, 0xE6BC17D9, 0x60F5EB74, 0x8FC5806D, 0xBB794BB7, 0x544920AE, 40690075Sobrien 0xB206C41C, 0x5D36AF05, 0x698A64DF, 0x86BA0FC6, 0x00F3F36B, 0xEFC39872, 0xDB7F53A8, 0x344F38B1, 40790075Sobrien 0x97F8FAB0, 0x78C891A9, 0x4C745A73, 0xA344316A, 0x250DCDC7, 0xCA3DA6DE, 0xFE816D04, 0x11B1061D, 40890075Sobrien 0xF7FEE2AF, 0x18CE89B6, 0x2C72426C, 0xC3422975, 0x450BD5D8, 0xAA3BBEC1, 0x9E87751B, 0x71B71E02, 40990075Sobrien 0x57F4CA8E, 0xB8C4A197, 0x8C786A4D, 0x63480154, 0xE501FDF9, 0x0A3196E0, 0x3E8D5D3A, 0xD1BD3623, 41090075Sobrien 0x37F2D291, 0xD8C2B988, 0xEC7E7252, 0x034E194B, 0x8507E5E6, 0x6A378EFF, 0x5E8B4525, 0xB1BB2E3C 41190075Sobrien}; 41290075Sobrien 41390075Sobrien/* 41490075Sobrien * end of the CRC lookup table crc_tableil8_o72 41590075Sobrien */ 41690075Sobrien 41790075Sobrien 41890075Sobrien 41990075Sobrien/* 42090075Sobrien * The following CRC lookup table was generated automagically using the 42190075Sobrien * following model parameters: 42290075Sobrien * 42390075Sobrien * Generator Polynomial = ................. 0x1EDC6F41 42490075Sobrien * Generator Polynomial Length = .......... 32 bits 42590075Sobrien * Reflected Bits = ....................... TRUE 42690075Sobrien * Table Generation Offset = .............. 32 bits 42790075Sobrien * Number of Slices = ..................... 8 slices 42890075Sobrien * Slice Lengths = ........................ 8 8 8 8 8 8 8 8 42990075Sobrien * Directory Name = ....................... .\ 43090075Sobrien * File Name = ............................ 8x256_tables.c 43190075Sobrien */ 43290075Sobrien 43390075Sobrienuint32_t sctp_crc_tableil8_o80[256] = 43490075Sobrien{ 43590075Sobrien 0x00000000, 0x68032CC8, 0xD0065990, 0xB8057558, 0xA5E0C5D1, 0xCDE3E919, 0x75E69C41, 0x1DE5B089, 43690075Sobrien 0x4E2DFD53, 0x262ED19B, 0x9E2BA4C3, 0xF628880B, 0xEBCD3882, 0x83CE144A, 0x3BCB6112, 0x53C84DDA, 43790075Sobrien 0x9C5BFAA6, 0xF458D66E, 0x4C5DA336, 0x245E8FFE, 0x39BB3F77, 0x51B813BF, 0xE9BD66E7, 0x81BE4A2F, 43890075Sobrien 0xD27607F5, 0xBA752B3D, 0x02705E65, 0x6A7372AD, 0x7796C224, 0x1F95EEEC, 0xA7909BB4, 0xCF93B77C, 43990075Sobrien 0x3D5B83BD, 0x5558AF75, 0xED5DDA2D, 0x855EF6E5, 0x98BB466C, 0xF0B86AA4, 0x48BD1FFC, 0x20BE3334, 44090075Sobrien 0x73767EEE, 0x1B755226, 0xA370277E, 0xCB730BB6, 0xD696BB3F, 0xBE9597F7, 0x0690E2AF, 0x6E93CE67, 44190075Sobrien 0xA100791B, 0xC90355D3, 0x7106208B, 0x19050C43, 0x04E0BCCA, 0x6CE39002, 0xD4E6E55A, 0xBCE5C992, 44290075Sobrien 0xEF2D8448, 0x872EA880, 0x3F2BDDD8, 0x5728F110, 0x4ACD4199, 0x22CE6D51, 0x9ACB1809, 0xF2C834C1, 44390075Sobrien 0x7AB7077A, 0x12B42BB2, 0xAAB15EEA, 0xC2B27222, 0xDF57C2AB, 0xB754EE63, 0x0F519B3B, 0x6752B7F3, 44490075Sobrien 0x349AFA29, 0x5C99D6E1, 0xE49CA3B9, 0x8C9F8F71, 0x917A3FF8, 0xF9791330, 0x417C6668, 0x297F4AA0, 44590075Sobrien 0xE6ECFDDC, 0x8EEFD114, 0x36EAA44C, 0x5EE98884, 0x430C380D, 0x2B0F14C5, 0x930A619D, 0xFB094D55, 44690075Sobrien 0xA8C1008F, 0xC0C22C47, 0x78C7591F, 0x10C475D7, 0x0D21C55E, 0x6522E996, 0xDD279CCE, 0xB524B006, 44790075Sobrien 0x47EC84C7, 0x2FEFA80F, 0x97EADD57, 0xFFE9F19F, 0xE20C4116, 0x8A0F6DDE, 0x320A1886, 0x5A09344E, 44890075Sobrien 0x09C17994, 0x61C2555C, 0xD9C72004, 0xB1C40CCC, 0xAC21BC45, 0xC422908D, 0x7C27E5D5, 0x1424C91D, 44990075Sobrien 0xDBB77E61, 0xB3B452A9, 0x0BB127F1, 0x63B20B39, 0x7E57BBB0, 0x16549778, 0xAE51E220, 0xC652CEE8, 45090075Sobrien 0x959A8332, 0xFD99AFFA, 0x459CDAA2, 0x2D9FF66A, 0x307A46E3, 0x58796A2B, 0xE07C1F73, 0x887F33BB, 45190075Sobrien 0xF56E0EF4, 0x9D6D223C, 0x25685764, 0x4D6B7BAC, 0x508ECB25, 0x388DE7ED, 0x808892B5, 0xE88BBE7D, 45290075Sobrien 0xBB43F3A7, 0xD340DF6F, 0x6B45AA37, 0x034686FF, 0x1EA33676, 0x76A01ABE, 0xCEA56FE6, 0xA6A6432E, 45390075Sobrien 0x6935F452, 0x0136D89A, 0xB933ADC2, 0xD130810A, 0xCCD53183, 0xA4D61D4B, 0x1CD36813, 0x74D044DB, 45490075Sobrien 0x27180901, 0x4F1B25C9, 0xF71E5091, 0x9F1D7C59, 0x82F8CCD0, 0xEAFBE018, 0x52FE9540, 0x3AFDB988, 45590075Sobrien 0xC8358D49, 0xA036A181, 0x1833D4D9, 0x7030F811, 0x6DD54898, 0x05D66450, 0xBDD31108, 0xD5D03DC0, 45690075Sobrien 0x8618701A, 0xEE1B5CD2, 0x561E298A, 0x3E1D0542, 0x23F8B5CB, 0x4BFB9903, 0xF3FEEC5B, 0x9BFDC093, 45790075Sobrien 0x546E77EF, 0x3C6D5B27, 0x84682E7F, 0xEC6B02B7, 0xF18EB23E, 0x998D9EF6, 0x2188EBAE, 0x498BC766, 45890075Sobrien 0x1A438ABC, 0x7240A674, 0xCA45D32C, 0xA246FFE4, 0xBFA34F6D, 0xD7A063A5, 0x6FA516FD, 0x07A63A35, 45990075Sobrien 0x8FD9098E, 0xE7DA2546, 0x5FDF501E, 0x37DC7CD6, 0x2A39CC5F, 0x423AE097, 0xFA3F95CF, 0x923CB907, 46090075Sobrien 0xC1F4F4DD, 0xA9F7D815, 0x11F2AD4D, 0x79F18185, 0x6414310C, 0x0C171DC4, 0xB412689C, 0xDC114454, 46190075Sobrien 0x1382F328, 0x7B81DFE0, 0xC384AAB8, 0xAB878670, 0xB66236F9, 0xDE611A31, 0x66646F69, 0x0E6743A1, 46290075Sobrien 0x5DAF0E7B, 0x35AC22B3, 0x8DA957EB, 0xE5AA7B23, 0xF84FCBAA, 0x904CE762, 0x2849923A, 0x404ABEF2, 46390075Sobrien 0xB2828A33, 0xDA81A6FB, 0x6284D3A3, 0x0A87FF6B, 0x17624FE2, 0x7F61632A, 0xC7641672, 0xAF673ABA, 46490075Sobrien 0xFCAF7760, 0x94AC5BA8, 0x2CA92EF0, 0x44AA0238, 0x594FB2B1, 0x314C9E79, 0x8949EB21, 0xE14AC7E9, 46590075Sobrien 0x2ED97095, 0x46DA5C5D, 0xFEDF2905, 0x96DC05CD, 0x8B39B544, 0xE33A998C, 0x5B3FECD4, 0x333CC01C, 46690075Sobrien 0x60F48DC6, 0x08F7A10E, 0xB0F2D456, 0xD8F1F89E, 0xC5144817, 0xAD1764DF, 0x15121187, 0x7D113D4F 46790075Sobrien}; 46890075Sobrien 46990075Sobrien/* 47090075Sobrien * end of the CRC lookup table crc_tableil8_o80 47190075Sobrien */ 47290075Sobrien 47390075Sobrien 47490075Sobrien 47590075Sobrien/* 47690075Sobrien * The following CRC lookup table was generated automagically using the 47790075Sobrien * following model parameters: 47890075Sobrien * 47990075Sobrien * Generator Polynomial = ................. 0x1EDC6F41 48090075Sobrien * Generator Polynomial Length = .......... 32 bits 48190075Sobrien * Reflected Bits = ....................... TRUE 48290075Sobrien * Table Generation Offset = .............. 32 bits 48390075Sobrien * Number of Slices = ..................... 8 slices 48490075Sobrien * Slice Lengths = ........................ 8 8 8 8 8 8 8 8 48590075Sobrien * Directory Name = ....................... .\ 48690075Sobrien * File Name = ............................ 8x256_tables.c 48790075Sobrien */ 48890075Sobrien 48990075Sobrienuint32_t sctp_crc_tableil8_o88[256] = 49090075Sobrien{ 49190075Sobrien 0x00000000, 0x493C7D27, 0x9278FA4E, 0xDB448769, 0x211D826D, 0x6821FF4A, 0xB3657823, 0xFA590504, 49290075Sobrien 0x423B04DA, 0x0B0779FD, 0xD043FE94, 0x997F83B3, 0x632686B7, 0x2A1AFB90, 0xF15E7CF9, 0xB86201DE, 49390075Sobrien 0x847609B4, 0xCD4A7493, 0x160EF3FA, 0x5F328EDD, 0xA56B8BD9, 0xEC57F6FE, 0x37137197, 0x7E2F0CB0, 49490075Sobrien 0xC64D0D6E, 0x8F717049, 0x5435F720, 0x1D098A07, 0xE7508F03, 0xAE6CF224, 0x7528754D, 0x3C14086A, 49590075Sobrien 0x0D006599, 0x443C18BE, 0x9F789FD7, 0xD644E2F0, 0x2C1DE7F4, 0x65219AD3, 0xBE651DBA, 0xF759609D, 49690075Sobrien 0x4F3B6143, 0x06071C64, 0xDD439B0D, 0x947FE62A, 0x6E26E32E, 0x271A9E09, 0xFC5E1960, 0xB5626447, 49790075Sobrien 0x89766C2D, 0xC04A110A, 0x1B0E9663, 0x5232EB44, 0xA86BEE40, 0xE1579367, 0x3A13140E, 0x732F6929, 49890075Sobrien 0xCB4D68F7, 0x827115D0, 0x593592B9, 0x1009EF9E, 0xEA50EA9A, 0xA36C97BD, 0x782810D4, 0x31146DF3, 49990075Sobrien 0x1A00CB32, 0x533CB615, 0x8878317C, 0xC1444C5B, 0x3B1D495F, 0x72213478, 0xA965B311, 0xE059CE36, 50090075Sobrien 0x583BCFE8, 0x1107B2CF, 0xCA4335A6, 0x837F4881, 0x79264D85, 0x301A30A2, 0xEB5EB7CB, 0xA262CAEC, 50190075Sobrien 0x9E76C286, 0xD74ABFA1, 0x0C0E38C8, 0x453245EF, 0xBF6B40EB, 0xF6573DCC, 0x2D13BAA5, 0x642FC782, 50290075Sobrien 0xDC4DC65C, 0x9571BB7B, 0x4E353C12, 0x07094135, 0xFD504431, 0xB46C3916, 0x6F28BE7F, 0x2614C358, 50390075Sobrien 0x1700AEAB, 0x5E3CD38C, 0x857854E5, 0xCC4429C2, 0x361D2CC6, 0x7F2151E1, 0xA465D688, 0xED59ABAF, 50490075Sobrien 0x553BAA71, 0x1C07D756, 0xC743503F, 0x8E7F2D18, 0x7426281C, 0x3D1A553B, 0xE65ED252, 0xAF62AF75, 50590075Sobrien 0x9376A71F, 0xDA4ADA38, 0x010E5D51, 0x48322076, 0xB26B2572, 0xFB575855, 0x2013DF3C, 0x692FA21B, 50690075Sobrien 0xD14DA3C5, 0x9871DEE2, 0x4335598B, 0x0A0924AC, 0xF05021A8, 0xB96C5C8F, 0x6228DBE6, 0x2B14A6C1, 50790075Sobrien 0x34019664, 0x7D3DEB43, 0xA6796C2A, 0xEF45110D, 0x151C1409, 0x5C20692E, 0x8764EE47, 0xCE589360, 50890075Sobrien 0x763A92BE, 0x3F06EF99, 0xE44268F0, 0xAD7E15D7, 0x572710D3, 0x1E1B6DF4, 0xC55FEA9D, 0x8C6397BA, 50990075Sobrien 0xB0779FD0, 0xF94BE2F7, 0x220F659E, 0x6B3318B9, 0x916A1DBD, 0xD856609A, 0x0312E7F3, 0x4A2E9AD4, 51090075Sobrien 0xF24C9B0A, 0xBB70E62D, 0x60346144, 0x29081C63, 0xD3511967, 0x9A6D6440, 0x4129E329, 0x08159E0E, 51190075Sobrien 0x3901F3FD, 0x703D8EDA, 0xAB7909B3, 0xE2457494, 0x181C7190, 0x51200CB7, 0x8A648BDE, 0xC358F6F9, 51290075Sobrien 0x7B3AF727, 0x32068A00, 0xE9420D69, 0xA07E704E, 0x5A27754A, 0x131B086D, 0xC85F8F04, 0x8163F223, 51390075Sobrien 0xBD77FA49, 0xF44B876E, 0x2F0F0007, 0x66337D20, 0x9C6A7824, 0xD5560503, 0x0E12826A, 0x472EFF4D, 51490075Sobrien 0xFF4CFE93, 0xB67083B4, 0x6D3404DD, 0x240879FA, 0xDE517CFE, 0x976D01D9, 0x4C2986B0, 0x0515FB97, 51590075Sobrien 0x2E015D56, 0x673D2071, 0xBC79A718, 0xF545DA3F, 0x0F1CDF3B, 0x4620A21C, 0x9D642575, 0xD4585852, 51690075Sobrien 0x6C3A598C, 0x250624AB, 0xFE42A3C2, 0xB77EDEE5, 0x4D27DBE1, 0x041BA6C6, 0xDF5F21AF, 0x96635C88, 51790075Sobrien 0xAA7754E2, 0xE34B29C5, 0x380FAEAC, 0x7133D38B, 0x8B6AD68F, 0xC256ABA8, 0x19122CC1, 0x502E51E6, 51890075Sobrien 0xE84C5038, 0xA1702D1F, 0x7A34AA76, 0x3308D751, 0xC951D255, 0x806DAF72, 0x5B29281B, 0x1215553C, 51990075Sobrien 0x230138CF, 0x6A3D45E8, 0xB179C281, 0xF845BFA6, 0x021CBAA2, 0x4B20C785, 0x906440EC, 0xD9583DCB, 52090075Sobrien 0x613A3C15, 0x28064132, 0xF342C65B, 0xBA7EBB7C, 0x4027BE78, 0x091BC35F, 0xD25F4436, 0x9B633911, 52190075Sobrien 0xA777317B, 0xEE4B4C5C, 0x350FCB35, 0x7C33B612, 0x866AB316, 0xCF56CE31, 0x14124958, 0x5D2E347F, 52290075Sobrien 0xE54C35A1, 0xAC704886, 0x7734CFEF, 0x3E08B2C8, 0xC451B7CC, 0x8D6DCAEB, 0x56294D82, 0x1F1530A5 52390075Sobrien}; 52490075Sobrien 52590075Sobrien/* 52690075Sobrien * end of the CRC lookup table crc_tableil8_o88 52790075Sobrien */ 52890075Sobrien 52990075Sobrien 53090075Sobrienstatic uint32_t 53190075Sobriensctp_crc32c_sb8_64_bit(uint32_t crc, 53290075Sobrien unsigned char *p_buf, 53390075Sobrien uint32_t length, 53490075Sobrien uint32_t init_bytes) 53590075Sobrien{ 53690075Sobrien uint32_t li; 53790075Sobrien uint32_t term1, term2; 53890075Sobrien uint32_t running_length; 53990075Sobrien uint32_t end_bytes; 54090075Sobrien 54190075Sobrien running_length = ((length - init_bytes) / 8) * 8; 54290075Sobrien end_bytes = length - init_bytes - running_length; 54390075Sobrien 54490075Sobrien for (li = 0; li < init_bytes; li++) 54590075Sobrien crc = sctp_crc_tableil8_o32[(crc ^ *p_buf++) & 0x000000FF] ^ 54690075Sobrien (crc >> 8); 54790075Sobrien for (li = 0; li < running_length / 8; li++) { 54890075Sobrien#if BYTE_ORDER == BIG_ENDIAN 54990075Sobrien crc ^= *p_buf++; 55090075Sobrien crc ^= (*p_buf++) << 8; 55190075Sobrien crc ^= (*p_buf++) << 16; 55290075Sobrien crc ^= (*p_buf++) << 24; 55390075Sobrien#else 55490075Sobrien crc ^= *(uint32_t *) p_buf; 55590075Sobrien p_buf += 4; 55690075Sobrien#endif 55790075Sobrien term1 = sctp_crc_tableil8_o88[crc & 0x000000FF] ^ 55890075Sobrien sctp_crc_tableil8_o80[(crc >> 8) & 0x000000FF]; 55990075Sobrien term2 = crc >> 16; 56090075Sobrien crc = term1 ^ 56190075Sobrien sctp_crc_tableil8_o72[term2 & 0x000000FF] ^ 56290075Sobrien sctp_crc_tableil8_o64[(term2 >> 8) & 0x000000FF]; 56390075Sobrien 56490075Sobrien#if BYTE_ORDER == BIG_ENDIAN 56590075Sobrien crc ^= sctp_crc_tableil8_o56[*p_buf++]; 56690075Sobrien crc ^= sctp_crc_tableil8_o48[*p_buf++]; 56790075Sobrien crc ^= sctp_crc_tableil8_o40[*p_buf++]; 56890075Sobrien crc ^= sctp_crc_tableil8_o32[*p_buf++]; 56990075Sobrien#else 57090075Sobrien term1 = sctp_crc_tableil8_o56[(*(uint32_t *) p_buf) & 0x000000FF] ^ 57190075Sobrien sctp_crc_tableil8_o48[((*(uint32_t *) p_buf) >> 8) & 0x000000FF]; 57290075Sobrien 57390075Sobrien term2 = (*(uint32_t *) p_buf) >> 16; 57490075Sobrien crc = crc ^ 57590075Sobrien term1 ^ 57690075Sobrien sctp_crc_tableil8_o40[term2 & 0x000000FF] ^ 57790075Sobrien sctp_crc_tableil8_o32[(term2 >> 8) & 0x000000FF]; 57890075Sobrien p_buf += 4; 57990075Sobrien#endif 58090075Sobrien } 58190075Sobrien for (li = 0; li < end_bytes; li++) 58290075Sobrien crc = sctp_crc_tableil8_o32[(crc ^ *p_buf++) & 0x000000FF] ^ 58390075Sobrien (crc >> 8); 58490075Sobrien return crc; 58590075Sobrien} 58690075Sobrien 58790075Sobrien 58890075Sobrien/** 58990075Sobrien * 59090075Sobrien * Routine Description: 59190075Sobrien * 59290075Sobrien * warms the tables 59390075Sobrien * 59490075Sobrien * Arguments: 59590075Sobrien * 59690075Sobrien * none 59790075Sobrien * 59890075Sobrien * Return value: 59990075Sobrien * 60090075Sobrien * none 60190075Sobrien */ 60290075Sobrienuint32_t 60390075Sobrienupdate_crc32(uint32_t crc32c, 60490075Sobrien unsigned char *buffer, 60590075Sobrien unsigned int length) 60690075Sobrien{ 60790075Sobrien uint32_t to_even_word; 60890075Sobrien 60990075Sobrien if (length == 0) { 61090075Sobrien return (crc32c); 61190075Sobrien } 61290075Sobrien to_even_word = (4 - (((uintptr_t) buffer) & 0x3)); 61390075Sobrien return (sctp_crc32c_sb8_64_bit(crc32c, buffer, length, to_even_word)); 61490075Sobrien} 61590075Sobrien 61690075Sobrienuint32_t sctp_crc_c[256] = { 61790075Sobrien 0x00000000, 0xF26B8303, 0xE13B70F7, 0x1350F3F4, 61890075Sobrien 0xC79A971F, 0x35F1141C, 0x26A1E7E8, 0xD4CA64EB, 61990075Sobrien 0x8AD958CF, 0x78B2DBCC, 0x6BE22838, 0x9989AB3B, 62090075Sobrien 0x4D43CFD0, 0xBF284CD3, 0xAC78BF27, 0x5E133C24, 62190075Sobrien 0x105EC76F, 0xE235446C, 0xF165B798, 0x030E349B, 62290075Sobrien 0xD7C45070, 0x25AFD373, 0x36FF2087, 0xC494A384, 62390075Sobrien 0x9A879FA0, 0x68EC1CA3, 0x7BBCEF57, 0x89D76C54, 62490075Sobrien 0x5D1D08BF, 0xAF768BBC, 0xBC267848, 0x4E4DFB4B, 62590075Sobrien 0x20BD8EDE, 0xD2D60DDD, 0xC186FE29, 0x33ED7D2A, 62690075Sobrien 0xE72719C1, 0x154C9AC2, 0x061C6936, 0xF477EA35, 62790075Sobrien 0xAA64D611, 0x580F5512, 0x4B5FA6E6, 0xB93425E5, 62890075Sobrien 0x6DFE410E, 0x9F95C20D, 0x8CC531F9, 0x7EAEB2FA, 62990075Sobrien 0x30E349B1, 0xC288CAB2, 0xD1D83946, 0x23B3BA45, 63090075Sobrien 0xF779DEAE, 0x05125DAD, 0x1642AE59, 0xE4292D5A, 63190075Sobrien 0xBA3A117E, 0x4851927D, 0x5B016189, 0xA96AE28A, 63290075Sobrien 0x7DA08661, 0x8FCB0562, 0x9C9BF696, 0x6EF07595, 63390075Sobrien 0x417B1DBC, 0xB3109EBF, 0xA0406D4B, 0x522BEE48, 63490075Sobrien 0x86E18AA3, 0x748A09A0, 0x67DAFA54, 0x95B17957, 63590075Sobrien 0xCBA24573, 0x39C9C670, 0x2A993584, 0xD8F2B687, 63690075Sobrien 0x0C38D26C, 0xFE53516F, 0xED03A29B, 0x1F682198, 63790075Sobrien 0x5125DAD3, 0xA34E59D0, 0xB01EAA24, 0x42752927, 63890075Sobrien 0x96BF4DCC, 0x64D4CECF, 0x77843D3B, 0x85EFBE38, 63990075Sobrien 0xDBFC821C, 0x2997011F, 0x3AC7F2EB, 0xC8AC71E8, 64090075Sobrien 0x1C661503, 0xEE0D9600, 0xFD5D65F4, 0x0F36E6F7, 64190075Sobrien 0x61C69362, 0x93AD1061, 0x80FDE395, 0x72966096, 64290075Sobrien 0xA65C047D, 0x5437877E, 0x4767748A, 0xB50CF789, 64390075Sobrien 0xEB1FCBAD, 0x197448AE, 0x0A24BB5A, 0xF84F3859, 64490075Sobrien 0x2C855CB2, 0xDEEEDFB1, 0xCDBE2C45, 0x3FD5AF46, 64590075Sobrien 0x7198540D, 0x83F3D70E, 0x90A324FA, 0x62C8A7F9, 64690075Sobrien 0xB602C312, 0x44694011, 0x5739B3E5, 0xA55230E6, 64790075Sobrien 0xFB410CC2, 0x092A8FC1, 0x1A7A7C35, 0xE811FF36, 64890075Sobrien 0x3CDB9BDD, 0xCEB018DE, 0xDDE0EB2A, 0x2F8B6829, 64990075Sobrien 0x82F63B78, 0x709DB87B, 0x63CD4B8F, 0x91A6C88C, 65090075Sobrien 0x456CAC67, 0xB7072F64, 0xA457DC90, 0x563C5F93, 65190075Sobrien 0x082F63B7, 0xFA44E0B4, 0xE9141340, 0x1B7F9043, 65290075Sobrien 0xCFB5F4A8, 0x3DDE77AB, 0x2E8E845F, 0xDCE5075C, 65390075Sobrien 0x92A8FC17, 0x60C37F14, 0x73938CE0, 0x81F80FE3, 65490075Sobrien 0x55326B08, 0xA759E80B, 0xB4091BFF, 0x466298FC, 65590075Sobrien 0x1871A4D8, 0xEA1A27DB, 0xF94AD42F, 0x0B21572C, 65690075Sobrien 0xDFEB33C7, 0x2D80B0C4, 0x3ED04330, 0xCCBBC033, 65790075Sobrien 0xA24BB5A6, 0x502036A5, 0x4370C551, 0xB11B4652, 65890075Sobrien 0x65D122B9, 0x97BAA1BA, 0x84EA524E, 0x7681D14D, 65990075Sobrien 0x2892ED69, 0xDAF96E6A, 0xC9A99D9E, 0x3BC21E9D, 66090075Sobrien 0xEF087A76, 0x1D63F975, 0x0E330A81, 0xFC588982, 66190075Sobrien 0xB21572C9, 0x407EF1CA, 0x532E023E, 0xA145813D, 66290075Sobrien 0x758FE5D6, 0x87E466D5, 0x94B49521, 0x66DF1622, 66390075Sobrien 0x38CC2A06, 0xCAA7A905, 0xD9F75AF1, 0x2B9CD9F2, 66490075Sobrien 0xFF56BD19, 0x0D3D3E1A, 0x1E6DCDEE, 0xEC064EED, 66590075Sobrien 0xC38D26C4, 0x31E6A5C7, 0x22B65633, 0xD0DDD530, 66690075Sobrien 0x0417B1DB, 0xF67C32D8, 0xE52CC12C, 0x1747422F, 66790075Sobrien 0x49547E0B, 0xBB3FFD08, 0xA86F0EFC, 0x5A048DFF, 66890075Sobrien 0x8ECEE914, 0x7CA56A17, 0x6FF599E3, 0x9D9E1AE0, 66990075Sobrien 0xD3D3E1AB, 0x21B862A8, 0x32E8915C, 0xC083125F, 67090075Sobrien 0x144976B4, 0xE622F5B7, 0xF5720643, 0x07198540, 67190075Sobrien 0x590AB964, 0xAB613A67, 0xB831C993, 0x4A5A4A90, 67290075Sobrien 0x9E902E7B, 0x6CFBAD78, 0x7FAB5E8C, 0x8DC0DD8F, 67390075Sobrien 0xE330A81A, 0x115B2B19, 0x020BD8ED, 0xF0605BEE, 67490075Sobrien 0x24AA3F05, 0xD6C1BC06, 0xC5914FF2, 0x37FACCF1, 67590075Sobrien 0x69E9F0D5, 0x9B8273D6, 0x88D28022, 0x7AB90321, 67690075Sobrien 0xAE7367CA, 0x5C18E4C9, 0x4F48173D, 0xBD23943E, 67790075Sobrien 0xF36E6F75, 0x0105EC76, 0x12551F82, 0xE03E9C81, 67890075Sobrien 0x34F4F86A, 0xC69F7B69, 0xD5CF889D, 0x27A40B9E, 67990075Sobrien 0x79B737BA, 0x8BDCB4B9, 0x988C474D, 0x6AE7C44E, 68090075Sobrien 0xBE2DA0A5, 0x4C4623A6, 0x5F16D052, 0xAD7D5351, 68190075Sobrien}; 68290075Sobrien 68390075Sobrien 68490075Sobrien#define SCTP_CRC32C(c,d) (c=(c>>8)^sctp_crc_c[(c^(d))&0xFF]) 68590075Sobrien 68690075Sobrienstatic uint32_t 68790075Sobrienold_update_crc32(uint32_t crc32c, 68890075Sobrien unsigned char *buffer, 68990075Sobrien unsigned int length) 69090075Sobrien{ 69190075Sobrien unsigned int i; 69290075Sobrien 69390075Sobrien for (i = 0; i < length; i++) { 69490075Sobrien SCTP_CRC32C(crc32c, buffer[i]); 69590075Sobrien } 69690075Sobrien return (crc32c); 69790075Sobrien} 69890075Sobrien 69990075Sobrien 70090075Sobrienuint32_t 70190075Sobriensctp_finalize_crc32(uint32_t crc32c) 70290075Sobrien{ 70390075Sobrien uint32_t result; 70490075Sobrien 70590075Sobrien#if BYTE_ORDER == BIG_ENDIAN 70690075Sobrien uint8_t byte0, byte1, byte2, byte3; 70790075Sobrien 70890075Sobrien#endif 70990075Sobrien /* Complement the result */ 71090075Sobrien result = ~crc32c; 71190075Sobrien#if BYTE_ORDER == BIG_ENDIAN 71290075Sobrien /* 71390075Sobrien * For BIG-ENDIAN.. aka Motorola byte order the result is in 71490075Sobrien * little-endian form. So we must manually swap the bytes. Then we 71590075Sobrien * can call htonl() which does nothing... 71690075Sobrien */ 71790075Sobrien byte0 = result & 0x000000ff; 71890075Sobrien byte1 = (result >> 8) & 0x000000ff; 71990075Sobrien byte2 = (result >> 16) & 0x000000ff; 72090075Sobrien byte3 = (result >> 24) & 0x000000ff; 72190075Sobrien crc32c = ((byte0 << 24) | (byte1 << 16) | (byte2 << 8) | byte3); 72290075Sobrien#else 72390075Sobrien /* 72490075Sobrien * For INTEL platforms the result comes out in network order. No 72590075Sobrien * htonl is required or the swap above. So we optimize out both the 72690075Sobrien * htonl and the manual swap above. 72790075Sobrien */ 72890075Sobrien crc32c = result; 72990075Sobrien#endif 73090075Sobrien return (crc32c); 73190075Sobrien} 73290075Sobrien#else 73390075Sobrienuint32_t 73490075Sobrienupdate_crc32(uint32_t crc32c, unsigned char *buffer, unsigned int length) { 73590075Sobrien 73690075Sobrien return (0); 73790075Sobrien} 73890075Sobrien 73990075Sobrienuint32_t 74090075Sobriensctp_finalize_crc32(uint32_t crc32c) 74190075Sobrien{ 74290075Sobrien return (0); 74390075Sobrien} 74490075Sobrien#endif /* !defined(SCTP_WITH_NO_CSUM) */ 74590075Sobrien 74690075Sobrien#if defined(SCTP_WITH_NO_CSUM) 74790075Sobrienuint32_t 74890075Sobriensctp_calculate_cksum(struct mbuf *m, uint32_t offset) 74990075Sobrien{ 75090075Sobrien return (0); 75190075Sobrien} 75290075Sobrien 75390075Sobrien#else 75490075Sobrienuint32_t 75590075Sobriensctp_calculate_cksum(struct mbuf *m, uint32_t offset) 75690075Sobrien{ 75790075Sobrien /* 75890075Sobrien * given a mbuf chain with a packetheader offset by 'offset' 75990075Sobrien * pointing at a sctphdr (with csum set to 0) go through the chain 76090075Sobrien * of SCTP_BUF_NEXT()'s and calculate the SCTP checksum. This also 76190075Sobrien * has a side bonus as it will calculate the total length of the 76290075Sobrien * mbuf chain. Note: if offset is greater than the total mbuf 76390075Sobrien * length, checksum=1, pktlen=0 is returned (ie. no real error code) 76490075Sobrien */ 76590075Sobrien uint32_t base = 0xffffffff; 76690075Sobrien struct mbuf *at; 76790075Sobrien 76890075Sobrien at = m; 76990075Sobrien /* find the correct mbuf and offset into mbuf */ 77090075Sobrien while ((at != NULL) && (offset > (uint32_t) SCTP_BUF_LEN(at))) { 77190075Sobrien offset -= SCTP_BUF_LEN(at); /* update remaining offset 77290075Sobrien * left */ 77390075Sobrien at = SCTP_BUF_NEXT(at); 77490075Sobrien } 77590075Sobrien while (at != NULL) { 77690075Sobrien if ((SCTP_BUF_LEN(at) - offset) > 0) { 77790075Sobrien if ((SCTP_BUF_LEN(at) - offset) < 4) { 77890075Sobrien /* Use old method if less than 4 bytes */ 77990075Sobrien base = old_update_crc32(base, 78090075Sobrien (unsigned char *)(SCTP_BUF_AT(at, offset)), 78190075Sobrien (unsigned int)(SCTP_BUF_LEN(at) - offset)); 78290075Sobrien } else { 78390075Sobrien base = update_crc32(base, 78490075Sobrien (unsigned char *)(SCTP_BUF_AT(at, offset)), 78590075Sobrien (unsigned int)(SCTP_BUF_LEN(at) - offset)); 78690075Sobrien } 78790075Sobrien /* we only offset once into the first mbuf */ 78890075Sobrien } 78990075Sobrien if (offset) { 79090075Sobrien if (offset < (uint32_t) SCTP_BUF_LEN(at)) 79190075Sobrien offset = 0; 79290075Sobrien else 79390075Sobrien offset -= SCTP_BUF_LEN(at); 79490075Sobrien } 79590075Sobrien at = SCTP_BUF_NEXT(at); 79690075Sobrien } 79790075Sobrien base = sctp_finalize_crc32(base); 79890075Sobrien return (base); 79990075Sobrien} 80090075Sobrien 80190075Sobrien#endif 80290075Sobrien 80390075Sobrienvoid 80490075Sobriensctp_delayed_cksum(struct mbuf *m) 80590075Sobrien{ 80690075Sobrien struct ip *ip; 80790075Sobrien uint32_t checksum; 80890075Sobrien uint32_t offset; 80990075Sobrien 81090075Sobrien ip = mtod(m, struct ip *); 81190075Sobrien offset = ip->ip_hl << 2; 81290075Sobrien checksum = sctp_calculate_cksum(m, offset); 81390075Sobrien SCTP_STAT_DECR(sctps_sendhwcrc); 81490075Sobrien SCTP_STAT_INCR(sctps_sendswcrc); 81590075Sobrien offset += offsetof(struct sctphdr, checksum); 81690075Sobrien 81790075Sobrien if (offset + sizeof(uint32_t) > (uint32_t) (m->m_len)) { 81890075Sobrien printf("delayed m_pullup, m->len: %d off: %d p: %d\n", 81990075Sobrien (uint32_t) m->m_len, offset, ip->ip_p); 82090075Sobrien /* 82190075Sobrien * XXX this shouldn't happen, but if it does, the correct 82290075Sobrien * behavior may be to insert the checksum in the appropriate 82390075Sobrien * next mbuf in the chain. 82490075Sobrien */ 82590075Sobrien return; 82690075Sobrien } 82790075Sobrien *(uint32_t *) (m->m_data + offset) = checksum; 82890075Sobrien} 82990075Sobrien