1 /*-
2  * SPDX-License-Identifier: BSD-3-Clause
3  *
4  * Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved.
5  * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
6  * Copyright (c) 2008-2012, by Michael Tuexen. All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions are met:
10  *
11  * a) Redistributions of source code must retain the above copyright notice,
12  *   this list of conditions and the following disclaimer.
13  *
14  * b) Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in
16  *   the documentation and/or other materials provided with the distribution.
17  *
18  * c) Neither the name of Cisco Systems, Inc. nor the names of its
19  *    contributors may be used to endorse or promote products derived
20  *    from this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
24  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
26  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
32  * THE POSSIBILITY OF SUCH DAMAGE.
33  */
34 
35 #if defined(__FreeBSD__) && !defined(__Userspace__)
36 #include <sys/cdefs.h>
37 __FBSDID("$FreeBSD: head/sys/netinet/sctp_crc32.c 362498 2020-06-22 14:36:14Z tuexen $");
38 
39 #include "opt_sctp.h"
40 
41 #include <sys/param.h>
42 #include <sys/systm.h>
43 #include <sys/gsb_crc32.h>
44 #include <sys/mbuf.h>
45 
46 #include <netinet/sctp.h>
47 #include <netinet/sctp_crc32.h>
48 #if defined(SCTP) || defined(SCTP_SUPPORT)
49 #include <netinet/sctp_os.h>
50 #include <netinet/sctp_pcb.h>
51 #endif
52 #else
53 #include <netinet/sctp_os.h>
54 #include <netinet/sctp.h>
55 #include <netinet/sctp_crc32.h>
56 #include <netinet/sctp_pcb.h>
57 #endif
58 
59 #if !(defined(__FreeBSD__) && !defined(__Userspace__))
60 /**
61  *
62  * Routine Description:
63  *
64  * Computes the CRC32c checksum for the specified buffer using the slicing by 8
65  * algorithm over 64 bit quantities.
66  *
67  * Arguments:
68  *
69  *		p_running_crc - pointer to the initial or final remainder value
70  *				used in CRC computations. It should be set to
71  *				non-NULL if the mode argument is equal to CONT or END
72  *		p_buf - the packet buffer where crc computations are being performed
73  *		length - the length of p_buf in bytes
74  *		init_bytes - the number of initial bytes that need to be procesed before
75  *					 aligning p_buf to multiples of 4 bytes
76  *		mode - can be any of the following: BEGIN, CONT, END, BODY, ALIGN
77  *
78  * Return value:
79  *
80  *		The computed CRC32c value
81  */
82 
83 
84 /*
85  * Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved
86  *
87  *
88  * This software program is licensed subject to the BSD License, available at
89  * http://www.opensource.org/licenses/bsd-license.html.
90  *
91  * Abstract:
92  *
93  * Tables for software CRC generation
94  */
95 
96 /*
97  * The following CRC lookup table was generated automagically using the
98  * following model parameters:
99  *
100  * Generator Polynomial = ................. 0x1EDC6F41
101  * Generator Polynomial Length = .......... 32 bits
102  * Reflected Bits = ....................... TRUE
103  * Table Generation Offset = .............. 32 bits
104  * Number of Slices = ..................... 8 slices
105  * Slice Lengths = ........................ 8 8 8 8 8 8 8 8
106  * Directory Name = ....................... .\
107  * File Name = ............................ 8x256_tables.c
108  */
109 
110 static const uint32_t sctp_crc_tableil8_o32[256] =
111 {
112 	0x00000000, 0xF26B8303, 0xE13B70F7, 0x1350F3F4, 0xC79A971F, 0x35F1141C, 0x26A1E7E8, 0xD4CA64EB,
113 	0x8AD958CF, 0x78B2DBCC, 0x6BE22838, 0x9989AB3B, 0x4D43CFD0, 0xBF284CD3, 0xAC78BF27, 0x5E133C24,
114 	0x105EC76F, 0xE235446C, 0xF165B798, 0x030E349B, 0xD7C45070, 0x25AFD373, 0x36FF2087, 0xC494A384,
115 	0x9A879FA0, 0x68EC1CA3, 0x7BBCEF57, 0x89D76C54, 0x5D1D08BF, 0xAF768BBC, 0xBC267848, 0x4E4DFB4B,
116 	0x20BD8EDE, 0xD2D60DDD, 0xC186FE29, 0x33ED7D2A, 0xE72719C1, 0x154C9AC2, 0x061C6936, 0xF477EA35,
117 	0xAA64D611, 0x580F5512, 0x4B5FA6E6, 0xB93425E5, 0x6DFE410E, 0x9F95C20D, 0x8CC531F9, 0x7EAEB2FA,
118 	0x30E349B1, 0xC288CAB2, 0xD1D83946, 0x23B3BA45, 0xF779DEAE, 0x05125DAD, 0x1642AE59, 0xE4292D5A,
119 	0xBA3A117E, 0x4851927D, 0x5B016189, 0xA96AE28A, 0x7DA08661, 0x8FCB0562, 0x9C9BF696, 0x6EF07595,
120 	0x417B1DBC, 0xB3109EBF, 0xA0406D4B, 0x522BEE48, 0x86E18AA3, 0x748A09A0, 0x67DAFA54, 0x95B17957,
121 	0xCBA24573, 0x39C9C670, 0x2A993584, 0xD8F2B687, 0x0C38D26C, 0xFE53516F, 0xED03A29B, 0x1F682198,
122 	0x5125DAD3, 0xA34E59D0, 0xB01EAA24, 0x42752927, 0x96BF4DCC, 0x64D4CECF, 0x77843D3B, 0x85EFBE38,
123 	0xDBFC821C, 0x2997011F, 0x3AC7F2EB, 0xC8AC71E8, 0x1C661503, 0xEE0D9600, 0xFD5D65F4, 0x0F36E6F7,
124 	0x61C69362, 0x93AD1061, 0x80FDE395, 0x72966096, 0xA65C047D, 0x5437877E, 0x4767748A, 0xB50CF789,
125 	0xEB1FCBAD, 0x197448AE, 0x0A24BB5A, 0xF84F3859, 0x2C855CB2, 0xDEEEDFB1, 0xCDBE2C45, 0x3FD5AF46,
126 	0x7198540D, 0x83F3D70E, 0x90A324FA, 0x62C8A7F9, 0xB602C312, 0x44694011, 0x5739B3E5, 0xA55230E6,
127 	0xFB410CC2, 0x092A8FC1, 0x1A7A7C35, 0xE811FF36, 0x3CDB9BDD, 0xCEB018DE, 0xDDE0EB2A, 0x2F8B6829,
128 	0x82F63B78, 0x709DB87B, 0x63CD4B8F, 0x91A6C88C, 0x456CAC67, 0xB7072F64, 0xA457DC90, 0x563C5F93,
129 	0x082F63B7, 0xFA44E0B4, 0xE9141340, 0x1B7F9043, 0xCFB5F4A8, 0x3DDE77AB, 0x2E8E845F, 0xDCE5075C,
130 	0x92A8FC17, 0x60C37F14, 0x73938CE0, 0x81F80FE3, 0x55326B08, 0xA759E80B, 0xB4091BFF, 0x466298FC,
131 	0x1871A4D8, 0xEA1A27DB, 0xF94AD42F, 0x0B21572C, 0xDFEB33C7, 0x2D80B0C4, 0x3ED04330, 0xCCBBC033,
132 	0xA24BB5A6, 0x502036A5, 0x4370C551, 0xB11B4652, 0x65D122B9, 0x97BAA1BA, 0x84EA524E, 0x7681D14D,
133 	0x2892ED69, 0xDAF96E6A, 0xC9A99D9E, 0x3BC21E9D, 0xEF087A76, 0x1D63F975, 0x0E330A81, 0xFC588982,
134 	0xB21572C9, 0x407EF1CA, 0x532E023E, 0xA145813D, 0x758FE5D6, 0x87E466D5, 0x94B49521, 0x66DF1622,
135 	0x38CC2A06, 0xCAA7A905, 0xD9F75AF1, 0x2B9CD9F2, 0xFF56BD19, 0x0D3D3E1A, 0x1E6DCDEE, 0xEC064EED,
136 	0xC38D26C4, 0x31E6A5C7, 0x22B65633, 0xD0DDD530, 0x0417B1DB, 0xF67C32D8, 0xE52CC12C, 0x1747422F,
137 	0x49547E0B, 0xBB3FFD08, 0xA86F0EFC, 0x5A048DFF, 0x8ECEE914, 0x7CA56A17, 0x6FF599E3, 0x9D9E1AE0,
138 	0xD3D3E1AB, 0x21B862A8, 0x32E8915C, 0xC083125F, 0x144976B4, 0xE622F5B7, 0xF5720643, 0x07198540,
139 	0x590AB964, 0xAB613A67, 0xB831C993, 0x4A5A4A90, 0x9E902E7B, 0x6CFBAD78, 0x7FAB5E8C, 0x8DC0DD8F,
140 	0xE330A81A, 0x115B2B19, 0x020BD8ED, 0xF0605BEE, 0x24AA3F05, 0xD6C1BC06, 0xC5914FF2, 0x37FACCF1,
141 	0x69E9F0D5, 0x9B8273D6, 0x88D28022, 0x7AB90321, 0xAE7367CA, 0x5C18E4C9, 0x4F48173D, 0xBD23943E,
142 	0xF36E6F75, 0x0105EC76, 0x12551F82, 0xE03E9C81, 0x34F4F86A, 0xC69F7B69, 0xD5CF889D, 0x27A40B9E,
143 	0x79B737BA, 0x8BDCB4B9, 0x988C474D, 0x6AE7C44E, 0xBE2DA0A5, 0x4C4623A6, 0x5F16D052, 0xAD7D5351
144 };
145 
146 /*
147  * end of the CRC lookup table crc_tableil8_o32
148  */
149 
150 
151 
152 /*
153  * The following CRC lookup table was generated automagically using the
154  * following model parameters:
155  *
156  * Generator Polynomial = ................. 0x1EDC6F41
157  * Generator Polynomial Length = .......... 32 bits
158  * Reflected Bits = ....................... TRUE
159  * Table Generation Offset = .............. 32 bits
160  * Number of Slices = ..................... 8 slices
161  * Slice Lengths = ........................ 8 8 8 8 8 8 8 8
162  * Directory Name = ....................... .\
163  * File Name = ............................ 8x256_tables.c
164  */
165 
166 static const uint32_t sctp_crc_tableil8_o40[256] =
167 {
168 	0x00000000, 0x13A29877, 0x274530EE, 0x34E7A899, 0x4E8A61DC, 0x5D28F9AB, 0x69CF5132, 0x7A6DC945,
169 	0x9D14C3B8, 0x8EB65BCF, 0xBA51F356, 0xA9F36B21, 0xD39EA264, 0xC03C3A13, 0xF4DB928A, 0xE7790AFD,
170 	0x3FC5F181, 0x2C6769F6, 0x1880C16F, 0x0B225918, 0x714F905D, 0x62ED082A, 0x560AA0B3, 0x45A838C4,
171 	0xA2D13239, 0xB173AA4E, 0x859402D7, 0x96369AA0, 0xEC5B53E5, 0xFFF9CB92, 0xCB1E630B, 0xD8BCFB7C,
172 	0x7F8BE302, 0x6C297B75, 0x58CED3EC, 0x4B6C4B9B, 0x310182DE, 0x22A31AA9, 0x1644B230, 0x05E62A47,
173 	0xE29F20BA, 0xF13DB8CD, 0xC5DA1054, 0xD6788823, 0xAC154166, 0xBFB7D911, 0x8B507188, 0x98F2E9FF,
174 	0x404E1283, 0x53EC8AF4, 0x670B226D, 0x74A9BA1A, 0x0EC4735F, 0x1D66EB28, 0x298143B1, 0x3A23DBC6,
175 	0xDD5AD13B, 0xCEF8494C, 0xFA1FE1D5, 0xE9BD79A2, 0x93D0B0E7, 0x80722890, 0xB4958009, 0xA737187E,
176 	0xFF17C604, 0xECB55E73, 0xD852F6EA, 0xCBF06E9D, 0xB19DA7D8, 0xA23F3FAF, 0x96D89736, 0x857A0F41,
177 	0x620305BC, 0x71A19DCB, 0x45463552, 0x56E4AD25, 0x2C896460, 0x3F2BFC17, 0x0BCC548E, 0x186ECCF9,
178 	0xC0D23785, 0xD370AFF2, 0xE797076B, 0xF4359F1C, 0x8E585659, 0x9DFACE2E, 0xA91D66B7, 0xBABFFEC0,
179 	0x5DC6F43D, 0x4E646C4A, 0x7A83C4D3, 0x69215CA4, 0x134C95E1, 0x00EE0D96, 0x3409A50F, 0x27AB3D78,
180 	0x809C2506, 0x933EBD71, 0xA7D915E8, 0xB47B8D9F, 0xCE1644DA, 0xDDB4DCAD, 0xE9537434, 0xFAF1EC43,
181 	0x1D88E6BE, 0x0E2A7EC9, 0x3ACDD650, 0x296F4E27, 0x53028762, 0x40A01F15, 0x7447B78C, 0x67E52FFB,
182 	0xBF59D487, 0xACFB4CF0, 0x981CE469, 0x8BBE7C1E, 0xF1D3B55B, 0xE2712D2C, 0xD69685B5, 0xC5341DC2,
183 	0x224D173F, 0x31EF8F48, 0x050827D1, 0x16AABFA6, 0x6CC776E3, 0x7F65EE94, 0x4B82460D, 0x5820DE7A,
184 	0xFBC3FAF9, 0xE861628E, 0xDC86CA17, 0xCF245260, 0xB5499B25, 0xA6EB0352, 0x920CABCB, 0x81AE33BC,
185 	0x66D73941, 0x7575A136, 0x419209AF, 0x523091D8, 0x285D589D, 0x3BFFC0EA, 0x0F186873, 0x1CBAF004,
186 	0xC4060B78, 0xD7A4930F, 0xE3433B96, 0xF0E1A3E1, 0x8A8C6AA4, 0x992EF2D3, 0xADC95A4A, 0xBE6BC23D,
187 	0x5912C8C0, 0x4AB050B7, 0x7E57F82E, 0x6DF56059, 0x1798A91C, 0x043A316B, 0x30DD99F2, 0x237F0185,
188 	0x844819FB, 0x97EA818C, 0xA30D2915, 0xB0AFB162, 0xCAC27827, 0xD960E050, 0xED8748C9, 0xFE25D0BE,
189 	0x195CDA43, 0x0AFE4234, 0x3E19EAAD, 0x2DBB72DA, 0x57D6BB9F, 0x447423E8, 0x70938B71, 0x63311306,
190 	0xBB8DE87A, 0xA82F700D, 0x9CC8D894, 0x8F6A40E3, 0xF50789A6, 0xE6A511D1, 0xD242B948, 0xC1E0213F,
191 	0x26992BC2, 0x353BB3B5, 0x01DC1B2C, 0x127E835B, 0x68134A1E, 0x7BB1D269, 0x4F567AF0, 0x5CF4E287,
192 	0x04D43CFD, 0x1776A48A, 0x23910C13, 0x30339464, 0x4A5E5D21, 0x59FCC556, 0x6D1B6DCF, 0x7EB9F5B8,
193 	0x99C0FF45, 0x8A626732, 0xBE85CFAB, 0xAD2757DC, 0xD74A9E99, 0xC4E806EE, 0xF00FAE77, 0xE3AD3600,
194 	0x3B11CD7C, 0x28B3550B, 0x1C54FD92, 0x0FF665E5, 0x759BACA0, 0x663934D7, 0x52DE9C4E, 0x417C0439,
195 	0xA6050EC4, 0xB5A796B3, 0x81403E2A, 0x92E2A65D, 0xE88F6F18, 0xFB2DF76F, 0xCFCA5FF6, 0xDC68C781,
196 	0x7B5FDFFF, 0x68FD4788, 0x5C1AEF11, 0x4FB87766, 0x35D5BE23, 0x26772654, 0x12908ECD, 0x013216BA,
197 	0xE64B1C47, 0xF5E98430, 0xC10E2CA9, 0xD2ACB4DE, 0xA8C17D9B, 0xBB63E5EC, 0x8F844D75, 0x9C26D502,
198 	0x449A2E7E, 0x5738B609, 0x63DF1E90, 0x707D86E7, 0x0A104FA2, 0x19B2D7D5, 0x2D557F4C, 0x3EF7E73B,
199 	0xD98EEDC6, 0xCA2C75B1, 0xFECBDD28, 0xED69455F, 0x97048C1A, 0x84A6146D, 0xB041BCF4, 0xA3E32483
200 };
201 
202 /*
203  * end of the CRC lookup table crc_tableil8_o40
204  */
205 
206 
207 
208 /*
209  * The following CRC lookup table was generated automagically using the
210  * following model parameters:
211  *
212  * Generator Polynomial = ................. 0x1EDC6F41
213  * Generator Polynomial Length = .......... 32 bits
214  * Reflected Bits = ....................... TRUE
215  * Table Generation Offset = .............. 32 bits
216  * Number of Slices = ..................... 8 slices
217  * Slice Lengths = ........................ 8 8 8 8 8 8 8 8
218  * Directory Name = ....................... .\
219  * File Name = ............................ 8x256_tables.c
220  */
221 
222 static const uint32_t sctp_crc_tableil8_o48[256] =
223 {
224 	0x00000000, 0xA541927E, 0x4F6F520D, 0xEA2EC073, 0x9EDEA41A, 0x3B9F3664, 0xD1B1F617, 0x74F06469,
225 	0x38513EC5, 0x9D10ACBB, 0x773E6CC8, 0xD27FFEB6, 0xA68F9ADF, 0x03CE08A1, 0xE9E0C8D2, 0x4CA15AAC,
226 	0x70A27D8A, 0xD5E3EFF4, 0x3FCD2F87, 0x9A8CBDF9, 0xEE7CD990, 0x4B3D4BEE, 0xA1138B9D, 0x045219E3,
227 	0x48F3434F, 0xEDB2D131, 0x079C1142, 0xA2DD833C, 0xD62DE755, 0x736C752B, 0x9942B558, 0x3C032726,
228 	0xE144FB14, 0x4405696A, 0xAE2BA919, 0x0B6A3B67, 0x7F9A5F0E, 0xDADBCD70, 0x30F50D03, 0x95B49F7D,
229 	0xD915C5D1, 0x7C5457AF, 0x967A97DC, 0x333B05A2, 0x47CB61CB, 0xE28AF3B5, 0x08A433C6, 0xADE5A1B8,
230 	0x91E6869E, 0x34A714E0, 0xDE89D493, 0x7BC846ED, 0x0F382284, 0xAA79B0FA, 0x40577089, 0xE516E2F7,
231 	0xA9B7B85B, 0x0CF62A25, 0xE6D8EA56, 0x43997828, 0x37691C41, 0x92288E3F, 0x78064E4C, 0xDD47DC32,
232 	0xC76580D9, 0x622412A7, 0x880AD2D4, 0x2D4B40AA, 0x59BB24C3, 0xFCFAB6BD, 0x16D476CE, 0xB395E4B0,
233 	0xFF34BE1C, 0x5A752C62, 0xB05BEC11, 0x151A7E6F, 0x61EA1A06, 0xC4AB8878, 0x2E85480B, 0x8BC4DA75,
234 	0xB7C7FD53, 0x12866F2D, 0xF8A8AF5E, 0x5DE93D20, 0x29195949, 0x8C58CB37, 0x66760B44, 0xC337993A,
235 	0x8F96C396, 0x2AD751E8, 0xC0F9919B, 0x65B803E5, 0x1148678C, 0xB409F5F2, 0x5E273581, 0xFB66A7FF,
236 	0x26217BCD, 0x8360E9B3, 0x694E29C0, 0xCC0FBBBE, 0xB8FFDFD7, 0x1DBE4DA9, 0xF7908DDA, 0x52D11FA4,
237 	0x1E704508, 0xBB31D776, 0x511F1705, 0xF45E857B, 0x80AEE112, 0x25EF736C, 0xCFC1B31F, 0x6A802161,
238 	0x56830647, 0xF3C29439, 0x19EC544A, 0xBCADC634, 0xC85DA25D, 0x6D1C3023, 0x8732F050, 0x2273622E,
239 	0x6ED23882, 0xCB93AAFC, 0x21BD6A8F, 0x84FCF8F1, 0xF00C9C98, 0x554D0EE6, 0xBF63CE95, 0x1A225CEB,
240 	0x8B277743, 0x2E66E53D, 0xC448254E, 0x6109B730, 0x15F9D359, 0xB0B84127, 0x5A968154, 0xFFD7132A,
241 	0xB3764986, 0x1637DBF8, 0xFC191B8B, 0x595889F5, 0x2DA8ED9C, 0x88E97FE2, 0x62C7BF91, 0xC7862DEF,
242 	0xFB850AC9, 0x5EC498B7, 0xB4EA58C4, 0x11ABCABA, 0x655BAED3, 0xC01A3CAD, 0x2A34FCDE, 0x8F756EA0,
243 	0xC3D4340C, 0x6695A672, 0x8CBB6601, 0x29FAF47F, 0x5D0A9016, 0xF84B0268, 0x1265C21B, 0xB7245065,
244 	0x6A638C57, 0xCF221E29, 0x250CDE5A, 0x804D4C24, 0xF4BD284D, 0x51FCBA33, 0xBBD27A40, 0x1E93E83E,
245 	0x5232B292, 0xF77320EC, 0x1D5DE09F, 0xB81C72E1, 0xCCEC1688, 0x69AD84F6, 0x83834485, 0x26C2D6FB,
246 	0x1AC1F1DD, 0xBF8063A3, 0x55AEA3D0, 0xF0EF31AE, 0x841F55C7, 0x215EC7B9, 0xCB7007CA, 0x6E3195B4,
247 	0x2290CF18, 0x87D15D66, 0x6DFF9D15, 0xC8BE0F6B, 0xBC4E6B02, 0x190FF97C, 0xF321390F, 0x5660AB71,
248 	0x4C42F79A, 0xE90365E4, 0x032DA597, 0xA66C37E9, 0xD29C5380, 0x77DDC1FE, 0x9DF3018D, 0x38B293F3,
249 	0x7413C95F, 0xD1525B21, 0x3B7C9B52, 0x9E3D092C, 0xEACD6D45, 0x4F8CFF3B, 0xA5A23F48, 0x00E3AD36,
250 	0x3CE08A10, 0x99A1186E, 0x738FD81D, 0xD6CE4A63, 0xA23E2E0A, 0x077FBC74, 0xED517C07, 0x4810EE79,
251 	0x04B1B4D5, 0xA1F026AB, 0x4BDEE6D8, 0xEE9F74A6, 0x9A6F10CF, 0x3F2E82B1, 0xD50042C2, 0x7041D0BC,
252 	0xAD060C8E, 0x08479EF0, 0xE2695E83, 0x4728CCFD, 0x33D8A894, 0x96993AEA, 0x7CB7FA99, 0xD9F668E7,
253 	0x9557324B, 0x3016A035, 0xDA386046, 0x7F79F238, 0x0B899651, 0xAEC8042F, 0x44E6C45C, 0xE1A75622,
254 	0xDDA47104, 0x78E5E37A, 0x92CB2309, 0x378AB177, 0x437AD51E, 0xE63B4760, 0x0C158713, 0xA954156D,
255 	0xE5F54FC1, 0x40B4DDBF, 0xAA9A1DCC, 0x0FDB8FB2, 0x7B2BEBDB, 0xDE6A79A5, 0x3444B9D6, 0x91052BA8
256 };
257 
258 /*
259  * end of the CRC lookup table crc_tableil8_o48
260  */
261 
262 
263 
264 /*
265  * The following CRC lookup table was generated automagically using the
266  * following model parameters:
267  *
268  * Generator Polynomial = ................. 0x1EDC6F41
269  * Generator Polynomial Length = .......... 32 bits
270  * Reflected Bits = ....................... TRUE
271  * Table Generation Offset = .............. 32 bits
272  * Number of Slices = ..................... 8 slices
273  * Slice Lengths = ........................ 8 8 8 8 8 8 8 8
274  * Directory Name = ....................... .\
275  * File Name = ............................ 8x256_tables.c
276  */
277 
278 static const uint32_t sctp_crc_tableil8_o56[256] =
279 {
280 	0x00000000, 0xDD45AAB8, 0xBF672381, 0x62228939, 0x7B2231F3, 0xA6679B4B, 0xC4451272, 0x1900B8CA,
281 	0xF64463E6, 0x2B01C95E, 0x49234067, 0x9466EADF, 0x8D665215, 0x5023F8AD, 0x32017194, 0xEF44DB2C,
282 	0xE964B13D, 0x34211B85, 0x560392BC, 0x8B463804, 0x924680CE, 0x4F032A76, 0x2D21A34F, 0xF06409F7,
283 	0x1F20D2DB, 0xC2657863, 0xA047F15A, 0x7D025BE2, 0x6402E328, 0xB9474990, 0xDB65C0A9, 0x06206A11,
284 	0xD725148B, 0x0A60BE33, 0x6842370A, 0xB5079DB2, 0xAC072578, 0x71428FC0, 0x136006F9, 0xCE25AC41,
285 	0x2161776D, 0xFC24DDD5, 0x9E0654EC, 0x4343FE54, 0x5A43469E, 0x8706EC26, 0xE524651F, 0x3861CFA7,
286 	0x3E41A5B6, 0xE3040F0E, 0x81268637, 0x5C632C8F, 0x45639445, 0x98263EFD, 0xFA04B7C4, 0x27411D7C,
287 	0xC805C650, 0x15406CE8, 0x7762E5D1, 0xAA274F69, 0xB327F7A3, 0x6E625D1B, 0x0C40D422, 0xD1057E9A,
288 	0xABA65FE7, 0x76E3F55F, 0x14C17C66, 0xC984D6DE, 0xD0846E14, 0x0DC1C4AC, 0x6FE34D95, 0xB2A6E72D,
289 	0x5DE23C01, 0x80A796B9, 0xE2851F80, 0x3FC0B538, 0x26C00DF2, 0xFB85A74A, 0x99A72E73, 0x44E284CB,
290 	0x42C2EEDA, 0x9F874462, 0xFDA5CD5B, 0x20E067E3, 0x39E0DF29, 0xE4A57591, 0x8687FCA8, 0x5BC25610,
291 	0xB4868D3C, 0x69C32784, 0x0BE1AEBD, 0xD6A40405, 0xCFA4BCCF, 0x12E11677, 0x70C39F4E, 0xAD8635F6,
292 	0x7C834B6C, 0xA1C6E1D4, 0xC3E468ED, 0x1EA1C255, 0x07A17A9F, 0xDAE4D027, 0xB8C6591E, 0x6583F3A6,
293 	0x8AC7288A, 0x57828232, 0x35A00B0B, 0xE8E5A1B3, 0xF1E51979, 0x2CA0B3C1, 0x4E823AF8, 0x93C79040,
294 	0x95E7FA51, 0x48A250E9, 0x2A80D9D0, 0xF7C57368, 0xEEC5CBA2, 0x3380611A, 0x51A2E823, 0x8CE7429B,
295 	0x63A399B7, 0xBEE6330F, 0xDCC4BA36, 0x0181108E, 0x1881A844, 0xC5C402FC, 0xA7E68BC5, 0x7AA3217D,
296 	0x52A0C93F, 0x8FE56387, 0xEDC7EABE, 0x30824006, 0x2982F8CC, 0xF4C75274, 0x96E5DB4D, 0x4BA071F5,
297 	0xA4E4AAD9, 0x79A10061, 0x1B838958, 0xC6C623E0, 0xDFC69B2A, 0x02833192, 0x60A1B8AB, 0xBDE41213,
298 	0xBBC47802, 0x6681D2BA, 0x04A35B83, 0xD9E6F13B, 0xC0E649F1, 0x1DA3E349, 0x7F816A70, 0xA2C4C0C8,
299 	0x4D801BE4, 0x90C5B15C, 0xF2E73865, 0x2FA292DD, 0x36A22A17, 0xEBE780AF, 0x89C50996, 0x5480A32E,
300 	0x8585DDB4, 0x58C0770C, 0x3AE2FE35, 0xE7A7548D, 0xFEA7EC47, 0x23E246FF, 0x41C0CFC6, 0x9C85657E,
301 	0x73C1BE52, 0xAE8414EA, 0xCCA69DD3, 0x11E3376B, 0x08E38FA1, 0xD5A62519, 0xB784AC20, 0x6AC10698,
302 	0x6CE16C89, 0xB1A4C631, 0xD3864F08, 0x0EC3E5B0, 0x17C35D7A, 0xCA86F7C2, 0xA8A47EFB, 0x75E1D443,
303 	0x9AA50F6F, 0x47E0A5D7, 0x25C22CEE, 0xF8878656, 0xE1873E9C, 0x3CC29424, 0x5EE01D1D, 0x83A5B7A5,
304 	0xF90696D8, 0x24433C60, 0x4661B559, 0x9B241FE1, 0x8224A72B, 0x5F610D93, 0x3D4384AA, 0xE0062E12,
305 	0x0F42F53E, 0xD2075F86, 0xB025D6BF, 0x6D607C07, 0x7460C4CD, 0xA9256E75, 0xCB07E74C, 0x16424DF4,
306 	0x106227E5, 0xCD278D5D, 0xAF050464, 0x7240AEDC, 0x6B401616, 0xB605BCAE, 0xD4273597, 0x09629F2F,
307 	0xE6264403, 0x3B63EEBB, 0x59416782, 0x8404CD3A, 0x9D0475F0, 0x4041DF48, 0x22635671, 0xFF26FCC9,
308 	0x2E238253, 0xF36628EB, 0x9144A1D2, 0x4C010B6A, 0x5501B3A0, 0x88441918, 0xEA669021, 0x37233A99,
309 	0xD867E1B5, 0x05224B0D, 0x6700C234, 0xBA45688C, 0xA345D046, 0x7E007AFE, 0x1C22F3C7, 0xC167597F,
310 	0xC747336E, 0x1A0299D6, 0x782010EF, 0xA565BA57, 0xBC65029D, 0x6120A825, 0x0302211C, 0xDE478BA4,
311 	0x31035088, 0xEC46FA30, 0x8E647309, 0x5321D9B1, 0x4A21617B, 0x9764CBC3, 0xF54642FA, 0x2803E842
312 };
313 
314 /*
315  * end of the CRC lookup table crc_tableil8_o56
316  */
317 
318 
319 
320 /*
321  * The following CRC lookup table was generated automagically using the
322  * following model parameters:
323  *
324  * Generator Polynomial = ................. 0x1EDC6F41
325  * Generator Polynomial Length = .......... 32 bits
326  * Reflected Bits = ....................... TRUE
327  * Table Generation Offset = .............. 32 bits
328  * Number of Slices = ..................... 8 slices
329  * Slice Lengths = ........................ 8 8 8 8 8 8 8 8
330  * Directory Name = ....................... .\
331  * File Name = ............................ 8x256_tables.c
332  */
333 
334 static const uint32_t sctp_crc_tableil8_o64[256] =
335 {
336 	0x00000000, 0x38116FAC, 0x7022DF58, 0x4833B0F4, 0xE045BEB0, 0xD854D11C, 0x906761E8, 0xA8760E44,
337 	0xC5670B91, 0xFD76643D, 0xB545D4C9, 0x8D54BB65, 0x2522B521, 0x1D33DA8D, 0x55006A79, 0x6D1105D5,
338 	0x8F2261D3, 0xB7330E7F, 0xFF00BE8B, 0xC711D127, 0x6F67DF63, 0x5776B0CF, 0x1F45003B, 0x27546F97,
339 	0x4A456A42, 0x725405EE, 0x3A67B51A, 0x0276DAB6, 0xAA00D4F2, 0x9211BB5E, 0xDA220BAA, 0xE2336406,
340 	0x1BA8B557, 0x23B9DAFB, 0x6B8A6A0F, 0x539B05A3, 0xFBED0BE7, 0xC3FC644B, 0x8BCFD4BF, 0xB3DEBB13,
341 	0xDECFBEC6, 0xE6DED16A, 0xAEED619E, 0x96FC0E32, 0x3E8A0076, 0x069B6FDA, 0x4EA8DF2E, 0x76B9B082,
342 	0x948AD484, 0xAC9BBB28, 0xE4A80BDC, 0xDCB96470, 0x74CF6A34, 0x4CDE0598, 0x04EDB56C, 0x3CFCDAC0,
343 	0x51EDDF15, 0x69FCB0B9, 0x21CF004D, 0x19DE6FE1, 0xB1A861A5, 0x89B90E09, 0xC18ABEFD, 0xF99BD151,
344 	0x37516AAE, 0x0F400502, 0x4773B5F6, 0x7F62DA5A, 0xD714D41E, 0xEF05BBB2, 0xA7360B46, 0x9F2764EA,
345 	0xF236613F, 0xCA270E93, 0x8214BE67, 0xBA05D1CB, 0x1273DF8F, 0x2A62B023, 0x625100D7, 0x5A406F7B,
346 	0xB8730B7D, 0x806264D1, 0xC851D425, 0xF040BB89, 0x5836B5CD, 0x6027DA61, 0x28146A95, 0x10050539,
347 	0x7D1400EC, 0x45056F40, 0x0D36DFB4, 0x3527B018, 0x9D51BE5C, 0xA540D1F0, 0xED736104, 0xD5620EA8,
348 	0x2CF9DFF9, 0x14E8B055, 0x5CDB00A1, 0x64CA6F0D, 0xCCBC6149, 0xF4AD0EE5, 0xBC9EBE11, 0x848FD1BD,
349 	0xE99ED468, 0xD18FBBC4, 0x99BC0B30, 0xA1AD649C, 0x09DB6AD8, 0x31CA0574, 0x79F9B580, 0x41E8DA2C,
350 	0xA3DBBE2A, 0x9BCAD186, 0xD3F96172, 0xEBE80EDE, 0x439E009A, 0x7B8F6F36, 0x33BCDFC2, 0x0BADB06E,
351 	0x66BCB5BB, 0x5EADDA17, 0x169E6AE3, 0x2E8F054F, 0x86F90B0B, 0xBEE864A7, 0xF6DBD453, 0xCECABBFF,
352 	0x6EA2D55C, 0x56B3BAF0, 0x1E800A04, 0x269165A8, 0x8EE76BEC, 0xB6F60440, 0xFEC5B4B4, 0xC6D4DB18,
353 	0xABC5DECD, 0x93D4B161, 0xDBE70195, 0xE3F66E39, 0x4B80607D, 0x73910FD1, 0x3BA2BF25, 0x03B3D089,
354 	0xE180B48F, 0xD991DB23, 0x91A26BD7, 0xA9B3047B, 0x01C50A3F, 0x39D46593, 0x71E7D567, 0x49F6BACB,
355 	0x24E7BF1E, 0x1CF6D0B2, 0x54C56046, 0x6CD40FEA, 0xC4A201AE, 0xFCB36E02, 0xB480DEF6, 0x8C91B15A,
356 	0x750A600B, 0x4D1B0FA7, 0x0528BF53, 0x3D39D0FF, 0x954FDEBB, 0xAD5EB117, 0xE56D01E3, 0xDD7C6E4F,
357 	0xB06D6B9A, 0x887C0436, 0xC04FB4C2, 0xF85EDB6E, 0x5028D52A, 0x6839BA86, 0x200A0A72, 0x181B65DE,
358 	0xFA2801D8, 0xC2396E74, 0x8A0ADE80, 0xB21BB12C, 0x1A6DBF68, 0x227CD0C4, 0x6A4F6030, 0x525E0F9C,
359 	0x3F4F0A49, 0x075E65E5, 0x4F6DD511, 0x777CBABD, 0xDF0AB4F9, 0xE71BDB55, 0xAF286BA1, 0x9739040D,
360 	0x59F3BFF2, 0x61E2D05E, 0x29D160AA, 0x11C00F06, 0xB9B60142, 0x81A76EEE, 0xC994DE1A, 0xF185B1B6,
361 	0x9C94B463, 0xA485DBCF, 0xECB66B3B, 0xD4A70497, 0x7CD10AD3, 0x44C0657F, 0x0CF3D58B, 0x34E2BA27,
362 	0xD6D1DE21, 0xEEC0B18D, 0xA6F30179, 0x9EE26ED5, 0x36946091, 0x0E850F3D, 0x46B6BFC9, 0x7EA7D065,
363 	0x13B6D5B0, 0x2BA7BA1C, 0x63940AE8, 0x5B856544, 0xF3F36B00, 0xCBE204AC, 0x83D1B458, 0xBBC0DBF4,
364 	0x425B0AA5, 0x7A4A6509, 0x3279D5FD, 0x0A68BA51, 0xA21EB415, 0x9A0FDBB9, 0xD23C6B4D, 0xEA2D04E1,
365 	0x873C0134, 0xBF2D6E98, 0xF71EDE6C, 0xCF0FB1C0, 0x6779BF84, 0x5F68D028, 0x175B60DC, 0x2F4A0F70,
366 	0xCD796B76, 0xF56804DA, 0xBD5BB42E, 0x854ADB82, 0x2D3CD5C6, 0x152DBA6A, 0x5D1E0A9E, 0x650F6532,
367 	0x081E60E7, 0x300F0F4B, 0x783CBFBF, 0x402DD013, 0xE85BDE57, 0xD04AB1FB, 0x9879010F, 0xA0686EA3
368 };
369 
370 /*
371  * end of the CRC lookup table crc_tableil8_o64
372  */
373 
374 
375 
376 /*
377  * The following CRC lookup table was generated automagically using the
378  * following model parameters:
379  *
380  * Generator Polynomial = ................. 0x1EDC6F41
381  * Generator Polynomial Length = .......... 32 bits
382  * Reflected Bits = ....................... TRUE
383  * Table Generation Offset = .............. 32 bits
384  * Number of Slices = ..................... 8 slices
385  * Slice Lengths = ........................ 8 8 8 8 8 8 8 8
386  * Directory Name = ....................... .\
387  * File Name = ............................ 8x256_tables.c
388  */
389 
390 static const uint32_t sctp_crc_tableil8_o72[256] =
391 {
392 	0x00000000, 0xEF306B19, 0xDB8CA0C3, 0x34BCCBDA, 0xB2F53777, 0x5DC55C6E, 0x697997B4, 0x8649FCAD,
393 	0x6006181F, 0x8F367306, 0xBB8AB8DC, 0x54BAD3C5, 0xD2F32F68, 0x3DC34471, 0x097F8FAB, 0xE64FE4B2,
394 	0xC00C303E, 0x2F3C5B27, 0x1B8090FD, 0xF4B0FBE4, 0x72F90749, 0x9DC96C50, 0xA975A78A, 0x4645CC93,
395 	0xA00A2821, 0x4F3A4338, 0x7B8688E2, 0x94B6E3FB, 0x12FF1F56, 0xFDCF744F, 0xC973BF95, 0x2643D48C,
396 	0x85F4168D, 0x6AC47D94, 0x5E78B64E, 0xB148DD57, 0x370121FA, 0xD8314AE3, 0xEC8D8139, 0x03BDEA20,
397 	0xE5F20E92, 0x0AC2658B, 0x3E7EAE51, 0xD14EC548, 0x570739E5, 0xB83752FC, 0x8C8B9926, 0x63BBF23F,
398 	0x45F826B3, 0xAAC84DAA, 0x9E748670, 0x7144ED69, 0xF70D11C4, 0x183D7ADD, 0x2C81B107, 0xC3B1DA1E,
399 	0x25FE3EAC, 0xCACE55B5, 0xFE729E6F, 0x1142F576, 0x970B09DB, 0x783B62C2, 0x4C87A918, 0xA3B7C201,
400 	0x0E045BEB, 0xE13430F2, 0xD588FB28, 0x3AB89031, 0xBCF16C9C, 0x53C10785, 0x677DCC5F, 0x884DA746,
401 	0x6E0243F4, 0x813228ED, 0xB58EE337, 0x5ABE882E, 0xDCF77483, 0x33C71F9A, 0x077BD440, 0xE84BBF59,
402 	0xCE086BD5, 0x213800CC, 0x1584CB16, 0xFAB4A00F, 0x7CFD5CA2, 0x93CD37BB, 0xA771FC61, 0x48419778,
403 	0xAE0E73CA, 0x413E18D3, 0x7582D309, 0x9AB2B810, 0x1CFB44BD, 0xF3CB2FA4, 0xC777E47E, 0x28478F67,
404 	0x8BF04D66, 0x64C0267F, 0x507CEDA5, 0xBF4C86BC, 0x39057A11, 0xD6351108, 0xE289DAD2, 0x0DB9B1CB,
405 	0xEBF65579, 0x04C63E60, 0x307AF5BA, 0xDF4A9EA3, 0x5903620E, 0xB6330917, 0x828FC2CD, 0x6DBFA9D4,
406 	0x4BFC7D58, 0xA4CC1641, 0x9070DD9B, 0x7F40B682, 0xF9094A2F, 0x16392136, 0x2285EAEC, 0xCDB581F5,
407 	0x2BFA6547, 0xC4CA0E5E, 0xF076C584, 0x1F46AE9D, 0x990F5230, 0x763F3929, 0x4283F2F3, 0xADB399EA,
408 	0x1C08B7D6, 0xF338DCCF, 0xC7841715, 0x28B47C0C, 0xAEFD80A1, 0x41CDEBB8, 0x75712062, 0x9A414B7B,
409 	0x7C0EAFC9, 0x933EC4D0, 0xA7820F0A, 0x48B26413, 0xCEFB98BE, 0x21CBF3A7, 0x1577387D, 0xFA475364,
410 	0xDC0487E8, 0x3334ECF1, 0x0788272B, 0xE8B84C32, 0x6EF1B09F, 0x81C1DB86, 0xB57D105C, 0x5A4D7B45,
411 	0xBC029FF7, 0x5332F4EE, 0x678E3F34, 0x88BE542D, 0x0EF7A880, 0xE1C7C399, 0xD57B0843, 0x3A4B635A,
412 	0x99FCA15B, 0x76CCCA42, 0x42700198, 0xAD406A81, 0x2B09962C, 0xC439FD35, 0xF08536EF, 0x1FB55DF6,
413 	0xF9FAB944, 0x16CAD25D, 0x22761987, 0xCD46729E, 0x4B0F8E33, 0xA43FE52A, 0x90832EF0, 0x7FB345E9,
414 	0x59F09165, 0xB6C0FA7C, 0x827C31A6, 0x6D4C5ABF, 0xEB05A612, 0x0435CD0B, 0x308906D1, 0xDFB96DC8,
415 	0x39F6897A, 0xD6C6E263, 0xE27A29B9, 0x0D4A42A0, 0x8B03BE0D, 0x6433D514, 0x508F1ECE, 0xBFBF75D7,
416 	0x120CEC3D, 0xFD3C8724, 0xC9804CFE, 0x26B027E7, 0xA0F9DB4A, 0x4FC9B053, 0x7B757B89, 0x94451090,
417 	0x720AF422, 0x9D3A9F3B, 0xA98654E1, 0x46B63FF8, 0xC0FFC355, 0x2FCFA84C, 0x1B736396, 0xF443088F,
418 	0xD200DC03, 0x3D30B71A, 0x098C7CC0, 0xE6BC17D9, 0x60F5EB74, 0x8FC5806D, 0xBB794BB7, 0x544920AE,
419 	0xB206C41C, 0x5D36AF05, 0x698A64DF, 0x86BA0FC6, 0x00F3F36B, 0xEFC39872, 0xDB7F53A8, 0x344F38B1,
420 	0x97F8FAB0, 0x78C891A9, 0x4C745A73, 0xA344316A, 0x250DCDC7, 0xCA3DA6DE, 0xFE816D04, 0x11B1061D,
421 	0xF7FEE2AF, 0x18CE89B6, 0x2C72426C, 0xC3422975, 0x450BD5D8, 0xAA3BBEC1, 0x9E87751B, 0x71B71E02,
422 	0x57F4CA8E, 0xB8C4A197, 0x8C786A4D, 0x63480154, 0xE501FDF9, 0x0A3196E0, 0x3E8D5D3A, 0xD1BD3623,
423 	0x37F2D291, 0xD8C2B988, 0xEC7E7252, 0x034E194B, 0x8507E5E6, 0x6A378EFF, 0x5E8B4525, 0xB1BB2E3C
424 };
425 
426 /*
427  * end of the CRC lookup table crc_tableil8_o72
428  */
429 
430 
431 
432 /*
433  * The following CRC lookup table was generated automagically using the
434  * following model parameters:
435  *
436  * Generator Polynomial = ................. 0x1EDC6F41
437  * Generator Polynomial Length = .......... 32 bits
438  * Reflected Bits = ....................... TRUE
439  * Table Generation Offset = .............. 32 bits
440  * Number of Slices = ..................... 8 slices
441  * Slice Lengths = ........................ 8 8 8 8 8 8 8 8
442  * Directory Name = ....................... .\
443  * File Name = ............................ 8x256_tables.c
444  */
445 
446 static const uint32_t sctp_crc_tableil8_o80[256] =
447 {
448 	0x00000000, 0x68032CC8, 0xD0065990, 0xB8057558, 0xA5E0C5D1, 0xCDE3E919, 0x75E69C41, 0x1DE5B089,
449 	0x4E2DFD53, 0x262ED19B, 0x9E2BA4C3, 0xF628880B, 0xEBCD3882, 0x83CE144A, 0x3BCB6112, 0x53C84DDA,
450 	0x9C5BFAA6, 0xF458D66E, 0x4C5DA336, 0x245E8FFE, 0x39BB3F77, 0x51B813BF, 0xE9BD66E7, 0x81BE4A2F,
451 	0xD27607F5, 0xBA752B3D, 0x02705E65, 0x6A7372AD, 0x7796C224, 0x1F95EEEC, 0xA7909BB4, 0xCF93B77C,
452 	0x3D5B83BD, 0x5558AF75, 0xED5DDA2D, 0x855EF6E5, 0x98BB466C, 0xF0B86AA4, 0x48BD1FFC, 0x20BE3334,
453 	0x73767EEE, 0x1B755226, 0xA370277E, 0xCB730BB6, 0xD696BB3F, 0xBE9597F7, 0x0690E2AF, 0x6E93CE67,
454 	0xA100791B, 0xC90355D3, 0x7106208B, 0x19050C43, 0x04E0BCCA, 0x6CE39002, 0xD4E6E55A, 0xBCE5C992,
455 	0xEF2D8448, 0x872EA880, 0x3F2BDDD8, 0x5728F110, 0x4ACD4199, 0x22CE6D51, 0x9ACB1809, 0xF2C834C1,
456 	0x7AB7077A, 0x12B42BB2, 0xAAB15EEA, 0xC2B27222, 0xDF57C2AB, 0xB754EE63, 0x0F519B3B, 0x6752B7F3,
457 	0x349AFA29, 0x5C99D6E1, 0xE49CA3B9, 0x8C9F8F71, 0x917A3FF8, 0xF9791330, 0x417C6668, 0x297F4AA0,
458 	0xE6ECFDDC, 0x8EEFD114, 0x36EAA44C, 0x5EE98884, 0x430C380D, 0x2B0F14C5, 0x930A619D, 0xFB094D55,
459 	0xA8C1008F, 0xC0C22C47, 0x78C7591F, 0x10C475D7, 0x0D21C55E, 0x6522E996, 0xDD279CCE, 0xB524B006,
460 	0x47EC84C7, 0x2FEFA80F, 0x97EADD57, 0xFFE9F19F, 0xE20C4116, 0x8A0F6DDE, 0x320A1886, 0x5A09344E,
461 	0x09C17994, 0x61C2555C, 0xD9C72004, 0xB1C40CCC, 0xAC21BC45, 0xC422908D, 0x7C27E5D5, 0x1424C91D,
462 	0xDBB77E61, 0xB3B452A9, 0x0BB127F1, 0x63B20B39, 0x7E57BBB0, 0x16549778, 0xAE51E220, 0xC652CEE8,
463 	0x959A8332, 0xFD99AFFA, 0x459CDAA2, 0x2D9FF66A, 0x307A46E3, 0x58796A2B, 0xE07C1F73, 0x887F33BB,
464 	0xF56E0EF4, 0x9D6D223C, 0x25685764, 0x4D6B7BAC, 0x508ECB25, 0x388DE7ED, 0x808892B5, 0xE88BBE7D,
465 	0xBB43F3A7, 0xD340DF6F, 0x6B45AA37, 0x034686FF, 0x1EA33676, 0x76A01ABE, 0xCEA56FE6, 0xA6A6432E,
466 	0x6935F452, 0x0136D89A, 0xB933ADC2, 0xD130810A, 0xCCD53183, 0xA4D61D4B, 0x1CD36813, 0x74D044DB,
467 	0x27180901, 0x4F1B25C9, 0xF71E5091, 0x9F1D7C59, 0x82F8CCD0, 0xEAFBE018, 0x52FE9540, 0x3AFDB988,
468 	0xC8358D49, 0xA036A181, 0x1833D4D9, 0x7030F811, 0x6DD54898, 0x05D66450, 0xBDD31108, 0xD5D03DC0,
469 	0x8618701A, 0xEE1B5CD2, 0x561E298A, 0x3E1D0542, 0x23F8B5CB, 0x4BFB9903, 0xF3FEEC5B, 0x9BFDC093,
470 	0x546E77EF, 0x3C6D5B27, 0x84682E7F, 0xEC6B02B7, 0xF18EB23E, 0x998D9EF6, 0x2188EBAE, 0x498BC766,
471 	0x1A438ABC, 0x7240A674, 0xCA45D32C, 0xA246FFE4, 0xBFA34F6D, 0xD7A063A5, 0x6FA516FD, 0x07A63A35,
472 	0x8FD9098E, 0xE7DA2546, 0x5FDF501E, 0x37DC7CD6, 0x2A39CC5F, 0x423AE097, 0xFA3F95CF, 0x923CB907,
473 	0xC1F4F4DD, 0xA9F7D815, 0x11F2AD4D, 0x79F18185, 0x6414310C, 0x0C171DC4, 0xB412689C, 0xDC114454,
474 	0x1382F328, 0x7B81DFE0, 0xC384AAB8, 0xAB878670, 0xB66236F9, 0xDE611A31, 0x66646F69, 0x0E6743A1,
475 	0x5DAF0E7B, 0x35AC22B3, 0x8DA957EB, 0xE5AA7B23, 0xF84FCBAA, 0x904CE762, 0x2849923A, 0x404ABEF2,
476 	0xB2828A33, 0xDA81A6FB, 0x6284D3A3, 0x0A87FF6B, 0x17624FE2, 0x7F61632A, 0xC7641672, 0xAF673ABA,
477 	0xFCAF7760, 0x94AC5BA8, 0x2CA92EF0, 0x44AA0238, 0x594FB2B1, 0x314C9E79, 0x8949EB21, 0xE14AC7E9,
478 	0x2ED97095, 0x46DA5C5D, 0xFEDF2905, 0x96DC05CD, 0x8B39B544, 0xE33A998C, 0x5B3FECD4, 0x333CC01C,
479 	0x60F48DC6, 0x08F7A10E, 0xB0F2D456, 0xD8F1F89E, 0xC5144817, 0xAD1764DF, 0x15121187, 0x7D113D4F
480 };
481 
482 /*
483  * end of the CRC lookup table crc_tableil8_o80
484  */
485 
486 
487 
488 /*
489  * The following CRC lookup table was generated automagically using the
490  * following model parameters:
491  *
492  * Generator Polynomial = ................. 0x1EDC6F41
493  * Generator Polynomial Length = .......... 32 bits
494  * Reflected Bits = ....................... TRUE
495  * Table Generation Offset = .............. 32 bits
496  * Number of Slices = ..................... 8 slices
497  * Slice Lengths = ........................ 8 8 8 8 8 8 8 8
498  * Directory Name = ....................... .\
499  * File Name = ............................ 8x256_tables.c
500  */
501 
502 static const uint32_t sctp_crc_tableil8_o88[256] =
503 {
504 	0x00000000, 0x493C7D27, 0x9278FA4E, 0xDB448769, 0x211D826D, 0x6821FF4A, 0xB3657823, 0xFA590504,
505 	0x423B04DA, 0x0B0779FD, 0xD043FE94, 0x997F83B3, 0x632686B7, 0x2A1AFB90, 0xF15E7CF9, 0xB86201DE,
506 	0x847609B4, 0xCD4A7493, 0x160EF3FA, 0x5F328EDD, 0xA56B8BD9, 0xEC57F6FE, 0x37137197, 0x7E2F0CB0,
507 	0xC64D0D6E, 0x8F717049, 0x5435F720, 0x1D098A07, 0xE7508F03, 0xAE6CF224, 0x7528754D, 0x3C14086A,
508 	0x0D006599, 0x443C18BE, 0x9F789FD7, 0xD644E2F0, 0x2C1DE7F4, 0x65219AD3, 0xBE651DBA, 0xF759609D,
509 	0x4F3B6143, 0x06071C64, 0xDD439B0D, 0x947FE62A, 0x6E26E32E, 0x271A9E09, 0xFC5E1960, 0xB5626447,
510 	0x89766C2D, 0xC04A110A, 0x1B0E9663, 0x5232EB44, 0xA86BEE40, 0xE1579367, 0x3A13140E, 0x732F6929,
511 	0xCB4D68F7, 0x827115D0, 0x593592B9, 0x1009EF9E, 0xEA50EA9A, 0xA36C97BD, 0x782810D4, 0x31146DF3,
512 	0x1A00CB32, 0x533CB615, 0x8878317C, 0xC1444C5B, 0x3B1D495F, 0x72213478, 0xA965B311, 0xE059CE36,
513 	0x583BCFE8, 0x1107B2CF, 0xCA4335A6, 0x837F4881, 0x79264D85, 0x301A30A2, 0xEB5EB7CB, 0xA262CAEC,
514 	0x9E76C286, 0xD74ABFA1, 0x0C0E38C8, 0x453245EF, 0xBF6B40EB, 0xF6573DCC, 0x2D13BAA5, 0x642FC782,
515 	0xDC4DC65C, 0x9571BB7B, 0x4E353C12, 0x07094135, 0xFD504431, 0xB46C3916, 0x6F28BE7F, 0x2614C358,
516 	0x1700AEAB, 0x5E3CD38C, 0x857854E5, 0xCC4429C2, 0x361D2CC6, 0x7F2151E1, 0xA465D688, 0xED59ABAF,
517 	0x553BAA71, 0x1C07D756, 0xC743503F, 0x8E7F2D18, 0x7426281C, 0x3D1A553B, 0xE65ED252, 0xAF62AF75,
518 	0x9376A71F, 0xDA4ADA38, 0x010E5D51, 0x48322076, 0xB26B2572, 0xFB575855, 0x2013DF3C, 0x692FA21B,
519 	0xD14DA3C5, 0x9871DEE2, 0x4335598B, 0x0A0924AC, 0xF05021A8, 0xB96C5C8F, 0x6228DBE6, 0x2B14A6C1,
520 	0x34019664, 0x7D3DEB43, 0xA6796C2A, 0xEF45110D, 0x151C1409, 0x5C20692E, 0x8764EE47, 0xCE589360,
521 	0x763A92BE, 0x3F06EF99, 0xE44268F0, 0xAD7E15D7, 0x572710D3, 0x1E1B6DF4, 0xC55FEA9D, 0x8C6397BA,
522 	0xB0779FD0, 0xF94BE2F7, 0x220F659E, 0x6B3318B9, 0x916A1DBD, 0xD856609A, 0x0312E7F3, 0x4A2E9AD4,
523 	0xF24C9B0A, 0xBB70E62D, 0x60346144, 0x29081C63, 0xD3511967, 0x9A6D6440, 0x4129E329, 0x08159E0E,
524 	0x3901F3FD, 0x703D8EDA, 0xAB7909B3, 0xE2457494, 0x181C7190, 0x51200CB7, 0x8A648BDE, 0xC358F6F9,
525 	0x7B3AF727, 0x32068A00, 0xE9420D69, 0xA07E704E, 0x5A27754A, 0x131B086D, 0xC85F8F04, 0x8163F223,
526 	0xBD77FA49, 0xF44B876E, 0x2F0F0007, 0x66337D20, 0x9C6A7824, 0xD5560503, 0x0E12826A, 0x472EFF4D,
527 	0xFF4CFE93, 0xB67083B4, 0x6D3404DD, 0x240879FA, 0xDE517CFE, 0x976D01D9, 0x4C2986B0, 0x0515FB97,
528 	0x2E015D56, 0x673D2071, 0xBC79A718, 0xF545DA3F, 0x0F1CDF3B, 0x4620A21C, 0x9D642575, 0xD4585852,
529 	0x6C3A598C, 0x250624AB, 0xFE42A3C2, 0xB77EDEE5, 0x4D27DBE1, 0x041BA6C6, 0xDF5F21AF, 0x96635C88,
530 	0xAA7754E2, 0xE34B29C5, 0x380FAEAC, 0x7133D38B, 0x8B6AD68F, 0xC256ABA8, 0x19122CC1, 0x502E51E6,
531 	0xE84C5038, 0xA1702D1F, 0x7A34AA76, 0x3308D751, 0xC951D255, 0x806DAF72, 0x5B29281B, 0x1215553C,
532 	0x230138CF, 0x6A3D45E8, 0xB179C281, 0xF845BFA6, 0x021CBAA2, 0x4B20C785, 0x906440EC, 0xD9583DCB,
533 	0x613A3C15, 0x28064132, 0xF342C65B, 0xBA7EBB7C, 0x4027BE78, 0x091BC35F, 0xD25F4436, 0x9B633911,
534 	0xA777317B, 0xEE4B4C5C, 0x350FCB35, 0x7C33B612, 0x866AB316, 0xCF56CE31, 0x14124958, 0x5D2E347F,
535 	0xE54C35A1, 0xAC704886, 0x7734CFEF, 0x3E08B2C8, 0xC451B7CC, 0x8D6DCAEB, 0x56294D82, 0x1F1530A5
536 };
537 
538 /*
539  * end of the CRC lookup table crc_tableil8_o88
540  */
541 
542 
543 static uint32_t
sctp_crc32c_sb8_64_bit(uint32_t crc,const unsigned char * p_buf,uint32_t length,uint32_t init_bytes)544 sctp_crc32c_sb8_64_bit(uint32_t crc,
545                        const unsigned char *p_buf,
546                        uint32_t length,
547                        uint32_t init_bytes)
548 {
549 	uint32_t li;
550 	uint32_t term1, term2;
551 	uint32_t running_length;
552 	uint32_t end_bytes;
553 
554 	running_length = ((length - init_bytes) / 8) * 8;
555 	end_bytes = length - init_bytes - running_length;
556 
557 	for (li = 0; li < init_bytes; li++)
558 		crc = sctp_crc_tableil8_o32[(crc ^ *p_buf++) & 0x000000FF] ^
559 		    (crc >> 8);
560 	for (li = 0; li < running_length / 8; li++) {
561 #if BYTE_ORDER == BIG_ENDIAN
562 		crc ^= *p_buf++;
563 		crc ^= (*p_buf++) << 8;
564 		crc ^= (*p_buf++) << 16;
565 		crc ^= (*p_buf++) << 24;
566 #else
567 		crc ^= *(const uint32_t *) p_buf;
568 		p_buf += 4;
569 #endif
570 		term1 = sctp_crc_tableil8_o88[crc & 0x000000FF] ^
571 		    sctp_crc_tableil8_o80[(crc >> 8) & 0x000000FF];
572 		term2 = crc >> 16;
573 		crc = term1 ^
574 		    sctp_crc_tableil8_o72[term2 & 0x000000FF] ^
575 		    sctp_crc_tableil8_o64[(term2 >> 8) & 0x000000FF];
576 
577 #if BYTE_ORDER == BIG_ENDIAN
578 		crc ^= sctp_crc_tableil8_o56[*p_buf++];
579 		crc ^= sctp_crc_tableil8_o48[*p_buf++];
580 		crc ^= sctp_crc_tableil8_o40[*p_buf++];
581 		crc ^= sctp_crc_tableil8_o32[*p_buf++];
582 #else
583 		term1 = sctp_crc_tableil8_o56[(*(const uint32_t *) p_buf) & 0x000000FF] ^
584 		    sctp_crc_tableil8_o48[((*(const uint32_t *) p_buf) >> 8) & 0x000000FF];
585 
586 		term2 = (*(const uint32_t *) p_buf) >> 16;
587 		crc = crc ^
588 		    term1 ^
589 		    sctp_crc_tableil8_o40[term2 & 0x000000FF] ^
590 		    sctp_crc_tableil8_o32[(term2 >> 8) & 0x000000FF];
591 		p_buf += 4;
592 #endif
593 	}
594 	for (li = 0; li < end_bytes; li++)
595 		crc = sctp_crc_tableil8_o32[(crc ^ *p_buf++) & 0x000000FF] ^
596 		    (crc >> 8);
597 	return (crc);
598 }
599 
600 
601 /**
602  *
603  * Routine Description:
604  *
605  * warms the tables
606  *
607  * Arguments:
608  *
609  *		none
610  *
611  * Return value:
612  *
613  *		none
614  */
615 static uint32_t
multitable_crc32c(uint32_t crc32c,const unsigned char * buffer,unsigned int length)616 multitable_crc32c(uint32_t crc32c,
617                   const unsigned char *buffer,
618                   unsigned int length)
619 {
620 	uint32_t to_even_word;
621 
622 	if (length == 0) {
623 		return (crc32c);
624 	}
625 	to_even_word = (4 - (((uintptr_t) buffer) & 0x3));
626 	return (sctp_crc32c_sb8_64_bit(crc32c, buffer, length, to_even_word));
627 }
628 
629 static const uint32_t sctp_crc_c[256] = {
630 	0x00000000, 0xF26B8303, 0xE13B70F7, 0x1350F3F4,
631 	0xC79A971F, 0x35F1141C, 0x26A1E7E8, 0xD4CA64EB,
632 	0x8AD958CF, 0x78B2DBCC, 0x6BE22838, 0x9989AB3B,
633 	0x4D43CFD0, 0xBF284CD3, 0xAC78BF27, 0x5E133C24,
634 	0x105EC76F, 0xE235446C, 0xF165B798, 0x030E349B,
635 	0xD7C45070, 0x25AFD373, 0x36FF2087, 0xC494A384,
636 	0x9A879FA0, 0x68EC1CA3, 0x7BBCEF57, 0x89D76C54,
637 	0x5D1D08BF, 0xAF768BBC, 0xBC267848, 0x4E4DFB4B,
638 	0x20BD8EDE, 0xD2D60DDD, 0xC186FE29, 0x33ED7D2A,
639 	0xE72719C1, 0x154C9AC2, 0x061C6936, 0xF477EA35,
640 	0xAA64D611, 0x580F5512, 0x4B5FA6E6, 0xB93425E5,
641 	0x6DFE410E, 0x9F95C20D, 0x8CC531F9, 0x7EAEB2FA,
642 	0x30E349B1, 0xC288CAB2, 0xD1D83946, 0x23B3BA45,
643 	0xF779DEAE, 0x05125DAD, 0x1642AE59, 0xE4292D5A,
644 	0xBA3A117E, 0x4851927D, 0x5B016189, 0xA96AE28A,
645 	0x7DA08661, 0x8FCB0562, 0x9C9BF696, 0x6EF07595,
646 	0x417B1DBC, 0xB3109EBF, 0xA0406D4B, 0x522BEE48,
647 	0x86E18AA3, 0x748A09A0, 0x67DAFA54, 0x95B17957,
648 	0xCBA24573, 0x39C9C670, 0x2A993584, 0xD8F2B687,
649 	0x0C38D26C, 0xFE53516F, 0xED03A29B, 0x1F682198,
650 	0x5125DAD3, 0xA34E59D0, 0xB01EAA24, 0x42752927,
651 	0x96BF4DCC, 0x64D4CECF, 0x77843D3B, 0x85EFBE38,
652 	0xDBFC821C, 0x2997011F, 0x3AC7F2EB, 0xC8AC71E8,
653 	0x1C661503, 0xEE0D9600, 0xFD5D65F4, 0x0F36E6F7,
654 	0x61C69362, 0x93AD1061, 0x80FDE395, 0x72966096,
655 	0xA65C047D, 0x5437877E, 0x4767748A, 0xB50CF789,
656 	0xEB1FCBAD, 0x197448AE, 0x0A24BB5A, 0xF84F3859,
657 	0x2C855CB2, 0xDEEEDFB1, 0xCDBE2C45, 0x3FD5AF46,
658 	0x7198540D, 0x83F3D70E, 0x90A324FA, 0x62C8A7F9,
659 	0xB602C312, 0x44694011, 0x5739B3E5, 0xA55230E6,
660 	0xFB410CC2, 0x092A8FC1, 0x1A7A7C35, 0xE811FF36,
661 	0x3CDB9BDD, 0xCEB018DE, 0xDDE0EB2A, 0x2F8B6829,
662 	0x82F63B78, 0x709DB87B, 0x63CD4B8F, 0x91A6C88C,
663 	0x456CAC67, 0xB7072F64, 0xA457DC90, 0x563C5F93,
664 	0x082F63B7, 0xFA44E0B4, 0xE9141340, 0x1B7F9043,
665 	0xCFB5F4A8, 0x3DDE77AB, 0x2E8E845F, 0xDCE5075C,
666 	0x92A8FC17, 0x60C37F14, 0x73938CE0, 0x81F80FE3,
667 	0x55326B08, 0xA759E80B, 0xB4091BFF, 0x466298FC,
668 	0x1871A4D8, 0xEA1A27DB, 0xF94AD42F, 0x0B21572C,
669 	0xDFEB33C7, 0x2D80B0C4, 0x3ED04330, 0xCCBBC033,
670 	0xA24BB5A6, 0x502036A5, 0x4370C551, 0xB11B4652,
671 	0x65D122B9, 0x97BAA1BA, 0x84EA524E, 0x7681D14D,
672 	0x2892ED69, 0xDAF96E6A, 0xC9A99D9E, 0x3BC21E9D,
673 	0xEF087A76, 0x1D63F975, 0x0E330A81, 0xFC588982,
674 	0xB21572C9, 0x407EF1CA, 0x532E023E, 0xA145813D,
675 	0x758FE5D6, 0x87E466D5, 0x94B49521, 0x66DF1622,
676 	0x38CC2A06, 0xCAA7A905, 0xD9F75AF1, 0x2B9CD9F2,
677 	0xFF56BD19, 0x0D3D3E1A, 0x1E6DCDEE, 0xEC064EED,
678 	0xC38D26C4, 0x31E6A5C7, 0x22B65633, 0xD0DDD530,
679 	0x0417B1DB, 0xF67C32D8, 0xE52CC12C, 0x1747422F,
680 	0x49547E0B, 0xBB3FFD08, 0xA86F0EFC, 0x5A048DFF,
681 	0x8ECEE914, 0x7CA56A17, 0x6FF599E3, 0x9D9E1AE0,
682 	0xD3D3E1AB, 0x21B862A8, 0x32E8915C, 0xC083125F,
683 	0x144976B4, 0xE622F5B7, 0xF5720643, 0x07198540,
684 	0x590AB964, 0xAB613A67, 0xB831C993, 0x4A5A4A90,
685 	0x9E902E7B, 0x6CFBAD78, 0x7FAB5E8C, 0x8DC0DD8F,
686 	0xE330A81A, 0x115B2B19, 0x020BD8ED, 0xF0605BEE,
687 	0x24AA3F05, 0xD6C1BC06, 0xC5914FF2, 0x37FACCF1,
688 	0x69E9F0D5, 0x9B8273D6, 0x88D28022, 0x7AB90321,
689 	0xAE7367CA, 0x5C18E4C9, 0x4F48173D, 0xBD23943E,
690 	0xF36E6F75, 0x0105EC76, 0x12551F82, 0xE03E9C81,
691 	0x34F4F86A, 0xC69F7B69, 0xD5CF889D, 0x27A40B9E,
692 	0x79B737BA, 0x8BDCB4B9, 0x988C474D, 0x6AE7C44E,
693 	0xBE2DA0A5, 0x4C4623A6, 0x5F16D052, 0xAD7D5351,
694 };
695 
696 
697 #define SCTP_CRC32C(c,d) (c=(c>>8)^sctp_crc_c[(c^(d))&0xFF])
698 
699 static uint32_t
singletable_crc32c(uint32_t crc32c,const unsigned char * buffer,unsigned int length)700 singletable_crc32c(uint32_t crc32c,
701                    const unsigned char *buffer,
702                    unsigned int length)
703 {
704 	unsigned int i;
705 
706 	for (i = 0; i < length; i++) {
707 		SCTP_CRC32C(crc32c, buffer[i]);
708 	}
709 	return (crc32c);
710 }
711 
712 #if defined(__Userspace__)
713 uint32_t
714 #else
715 static uint32_t
716 #endif
calculate_crc32c(uint32_t crc32c,const unsigned char * buffer,unsigned int length)717 calculate_crc32c(uint32_t crc32c,
718                  const unsigned char *buffer,
719                  unsigned int length)
720 {
721 	if (length < 4) {
722 		return (singletable_crc32c(crc32c, buffer, length));
723 	} else {
724 		return (multitable_crc32c(crc32c, buffer, length));
725 	}
726 }
727 
728 #endif
729 #if defined(__Userspace__)
730 uint32_t
731 #else
732 static uint32_t
733 #endif
sctp_finalize_crc32c(uint32_t crc32c)734 sctp_finalize_crc32c(uint32_t crc32c)
735 {
736 	uint32_t result;
737 #if BYTE_ORDER == BIG_ENDIAN
738 	uint8_t byte0, byte1, byte2, byte3;
739 #endif
740 
741 	/* Complement the result */
742 	result = ~crc32c;
743 #if BYTE_ORDER == BIG_ENDIAN
744 	/*
745 	 * For BIG-ENDIAN platforms the result is in little-endian form. So we
746 	 * must swap the bytes to return the result in network byte order.
747 	 */
748 	byte0 = result & 0x000000ff;
749 	byte1 = (result >> 8) & 0x000000ff;
750 	byte2 = (result >> 16) & 0x000000ff;
751 	byte3 = (result >> 24) & 0x000000ff;
752 	crc32c = ((byte0 << 24) | (byte1 << 16) | (byte2 << 8) | byte3);
753 #else
754 	/*
755 	 * For LITTLE ENDIAN platforms the result is in already in network
756 	 * byte order.
757 	 */
758 	crc32c = result;
759 #endif
760 	return (crc32c);
761 }
762 
763 /*
764  * Compute the SCTP checksum in network byte order for a given mbuf chain m
765  * which contains an SCTP packet starting at offset.
766  * Since this function is also called by ipfw, don't assume that
767  * it is compiled on a kernel with SCTP support.
768  */
769 uint32_t
sctp_calculate_cksum(struct mbuf * m,uint32_t offset)770 sctp_calculate_cksum(struct mbuf *m, uint32_t offset)
771 {
772 	uint32_t base = 0xffffffff;
773 
774 	while (offset > 0) {
775 		KASSERT(m != NULL, ("sctp_calculate_cksum, offset > length of mbuf chain"));
776 		if (offset < (uint32_t)m->m_len) {
777 			break;
778 		}
779 		offset -= m->m_len;
780 		m = m->m_next;
781 	}
782 	if (offset > 0) {
783 		base = calculate_crc32c(base,
784 		                        (unsigned char *)(m->m_data + offset),
785 		                        (unsigned int)(m->m_len - offset));
786 		m = m->m_next;
787 	}
788 	while (m != NULL) {
789 		base = calculate_crc32c(base,
790 		                        (unsigned char *)m->m_data,
791 		                        (unsigned int)m->m_len);
792 		m = m->m_next;
793 	}
794 	base = sctp_finalize_crc32c(base);
795 	return (base);
796 }
797 
798 #if defined(__FreeBSD__) && !defined(__Userspace__)
799 #if defined(SCTP) || defined(SCTP_SUPPORT)
800 
801 VNET_DEFINE(struct sctp_base_info, system_base_info);
802 
803 /*
804  * Compute and insert the SCTP checksum in network byte order for a given
805  * mbuf chain m which contains an SCTP packet starting at offset.
806  */
807 void
sctp_delayed_cksum(struct mbuf * m,uint32_t offset)808 sctp_delayed_cksum(struct mbuf *m, uint32_t offset)
809 {
810 	uint32_t checksum;
811 
812 	checksum = sctp_calculate_cksum(m, offset);
813 	SCTP_STAT_DECR(sctps_sendhwcrc);
814 	SCTP_STAT_INCR(sctps_sendswcrc);
815 	offset += offsetof(struct sctphdr, checksum);
816 
817 	if (offset + sizeof(uint32_t) > (uint32_t)(m->m_pkthdr.len)) {
818 #ifdef INVARIANTS
819 		panic("sctp_delayed_cksum(): m->m_pkthdr.len: %d, offset: %u.",
820 		      m->m_pkthdr.len, offset);
821 #else
822 		SCTP_PRINTF("sctp_delayed_cksum(): m->m_pkthdr.len: %d, offset: %u.\n",
823 		            m->m_pkthdr.len, offset);
824 #endif
825 		return;
826 	}
827 	m_copyback(m, (int)offset, (int)sizeof(uint32_t), (caddr_t)&checksum);
828 }
829 #endif
830 #endif
831 
832