Message ID | 1524914997-27080-1-git-send-email-alexey.kodanev@oracle.com |
---|---|
State | Accepted |
Delegated to: | Jan Stancek |
Headers | show |
Series | [v3,1/3] lib/tst_checksum: add crc32c checksum | expand |
Hi Alexey, > It will be used to make a SCTP packet in the test. > Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com> > --- > v3: use SPDX License-Identifier > v2: As suggested by Cyril: > * updated the docs, added section 2.2.25 > * added 'tst_' prefix > * changed type 'int' to 'size_t' for the buffer length > doc/test-writing-guidelines.txt | 6 +++ > include/tst_checksum.h | 16 ++++++++ > lib/tst_checksum.c | 81 +++++++++++++++++++++++++++++++++++++++ > 3 files changed, 103 insertions(+), 0 deletions(-) > create mode 100644 include/tst_checksum.h > create mode 100644 lib/tst_checksum.c Whole patchset LGTM. BTW sctp_big_chunk still uses crazy big load on kernels before 4.17 rc2 :(. Kind regards, Petr
On 05/03/2018 04:06 PM, Petr Vorel wrote: > Hi Alexey, > >> It will be used to make a SCTP packet in the test. > >> Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com> >> --- >> v3: use SPDX License-Identifier > >> v2: As suggested by Cyril: >> * updated the docs, added section 2.2.25 >> * added 'tst_' prefix >> * changed type 'int' to 'size_t' for the buffer length > >> doc/test-writing-guidelines.txt | 6 +++ >> include/tst_checksum.h | 16 ++++++++ >> lib/tst_checksum.c | 81 +++++++++++++++++++++++++++++++++++++++ >> 3 files changed, 103 insertions(+), 0 deletions(-) >> create mode 100644 include/tst_checksum.h >> create mode 100644 lib/tst_checksum.c > > Whole patchset LGTM. > > BTW sctp_big_chunk still uses crazy big load on kernels before 4.17 rc2 :(. I wonder, what is the time the test needs to complete on your system, could you post the numbers at least from 'time' command? Does it take minutes? I've not seen it takes more than a second. Will remove sending this packet 3 times, it should be enough to send it just once. I assume, the load is on the server, in the kernel? i.e. when it receives and processes that INIT packet. What is the time in 4.17-rc2 with this change: diff --git a/testcases/network/sctp/sctp_big_chunk.c b/testcases/network/sctp/sctp_big_chunk.c index 333e502..c663f71 100644 --- a/testcases/network/sctp/sctp_big_chunk.c +++ b/testcases/network/sctp/sctp_big_chunk.c @@ -109,11 +109,11 @@ static void setup_client(void) uint16_t param_len = htons(20); /* IPv6(40) + SCTP_COMMON(12) + SCTP_CHUNK(20) + SCTP_OPT(65460)) */ - for (i = 0; i < addr_num; ++i) { + for (i = 1; i <= addr_num; ++i) { update_packet_field(&off, ¶m_type, 2); update_packet_field(&off, ¶m_len, 2); - packet[off + 15] = 1; - off += 16; + off += 12; + update_packet_field(&off, &i, 4); } pkt_len = off; when we are using unique addresses...
On 04.05.2018 13:50, Alexey Kodanev wrote: > On 05/03/2018 04:06 PM, Petr Vorel wrote: >> Hi Alexey, >> >>> It will be used to make a SCTP packet in the test. >> >>> Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com> >>> --- >>> v3: use SPDX License-Identifier >> >>> v2: As suggested by Cyril: >>> * updated the docs, added section 2.2.25 >>> * added 'tst_' prefix >>> * changed type 'int' to 'size_t' for the buffer length >> >>> doc/test-writing-guidelines.txt | 6 +++ >>> include/tst_checksum.h | 16 ++++++++ >>> lib/tst_checksum.c | 81 +++++++++++++++++++++++++++++++++++++++ >>> 3 files changed, 103 insertions(+), 0 deletions(-) >>> create mode 100644 include/tst_checksum.h >>> create mode 100644 lib/tst_checksum.c >> >> Whole patchset LGTM. Removed sending the packet three times, fixed SPDX License-Identifier and applied. Thanks!
Hi Alexey, > > BTW sctp_big_chunk still uses crazy big load on kernels before 4.17 rc2 :(. > I wonder, what is the time the test needs to complete on your system, > could you post the numbers at least from 'time' command? Does it take > minutes? I've not seen it takes more than a second. I'm testing it on several OS (SLES 15, Centos 7, Debian 9, ...) which all have kernels older than 4.17-rc2. It behaves like DOS - the only thing I can do is to restart machines :(. With vanilla kernel 4.17-rc2 it works well. > Will remove sending this packet 3 times, it should be enough to send > it just once. I assume, the load is on the server, in the kernel? > i.e. when it receives and processes that INIT packet. > What is the time in 4.17-rc2 with this change: I'll let you know. > diff --git a/testcases/network/sctp/sctp_big_chunk.c b/testcases/network/sctp/sctp_big_chunk.c > index 333e502..c663f71 100644 > --- a/testcases/network/sctp/sctp_big_chunk.c > +++ b/testcases/network/sctp/sctp_big_chunk.c > @@ -109,11 +109,11 @@ static void setup_client(void) > uint16_t param_len = htons(20); > /* IPv6(40) + SCTP_COMMON(12) + SCTP_CHUNK(20) + SCTP_OPT(65460)) */ > - for (i = 0; i < addr_num; ++i) { > + for (i = 1; i <= addr_num; ++i) { > update_packet_field(&off, ¶m_type, 2); > update_packet_field(&off, ¶m_len, 2); > - packet[off + 15] = 1; > - off += 16; > + off += 12; > + update_packet_field(&off, &i, 4); > } > pkt_len = off; > when we are using unique addresses... Kind regards, Petr
diff --git a/doc/test-writing-guidelines.txt b/doc/test-writing-guidelines.txt index cbbfe6c..8e405a0 100644 --- a/doc/test-writing-guidelines.txt +++ b/doc/test-writing-guidelines.txt @@ -1366,6 +1366,12 @@ For reference to tainted kernels, see kernel documentation: Documentation/admin-guide/tainted-kernels.rst or https://www.kernel.org/doc/html/latest/admin-guide/tainted-kernels.html +2.2.25 Checksums +^^^^^^^^^^^^^^^^ + +CRC32c checksum generation is supported by LTP. In order to use it, the +test should include "tst_checksum.h" header, then can call tst_crc32c(). + 2.3 Writing a testcase in shell ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/include/tst_checksum.h b/include/tst_checksum.h new file mode 100644 index 0000000..4f43115 --- /dev/null +++ b/include/tst_checksum.h @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: GPL-2.0 + * Copyright (c) 2018 Oracle and/or its affiliates. All Rights Reserved. + */ + +#ifndef TST_CHECKSUM_H__ +#define TST_CHECKSUM_H__ + +#include <stdint.h> +#include <stddef.h> + +/* + * Generates CRC32c checksum. + */ +uint32_t tst_crc32c(uint8_t *buf, size_t buf_len); + +#endif diff --git a/lib/tst_checksum.c b/lib/tst_checksum.c new file mode 100644 index 0000000..9aaf9d4 --- /dev/null +++ b/lib/tst_checksum.c @@ -0,0 +1,81 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (c) 2018 Oracle and/or its affiliates. All Rights Reserved. */ + +#include "tst_checksum.h" + +static const uint32_t crc32c_table[] = { + 0x00000000, 0xf26b8303, 0xe13b70f7, 0x1350f3f4, + 0xc79a971f, 0x35f1141c, 0x26a1e7e8, 0xd4ca64eb, + 0x8ad958cf, 0x78b2dbcc, 0x6be22838, 0x9989ab3b, + 0x4d43cfd0, 0xbf284cd3, 0xac78bf27, 0x5e133c24, + 0x105ec76f, 0xe235446c, 0xf165b798, 0x030e349b, + 0xd7c45070, 0x25afd373, 0x36ff2087, 0xc494a384, + 0x9a879fa0, 0x68ec1ca3, 0x7bbcef57, 0x89d76c54, + 0x5d1d08bf, 0xaf768bbc, 0xbc267848, 0x4e4dfb4b, + 0x20bd8ede, 0xd2d60ddd, 0xc186fe29, 0x33ed7d2a, + 0xe72719c1, 0x154c9ac2, 0x061c6936, 0xf477ea35, + 0xaa64d611, 0x580f5512, 0x4b5fa6e6, 0xb93425e5, + 0x6dfe410e, 0x9f95c20d, 0x8cc531f9, 0x7eaeb2fa, + 0x30e349b1, 0xc288cab2, 0xd1d83946, 0x23b3ba45, + 0xf779deae, 0x05125dad, 0x1642ae59, 0xe4292d5a, + 0xba3a117e, 0x4851927d, 0x5b016189, 0xa96ae28a, + 0x7da08661, 0x8fcb0562, 0x9c9bf696, 0x6ef07595, + 0x417b1dbc, 0xb3109ebf, 0xa0406d4b, 0x522bee48, + 0x86e18aa3, 0x748a09a0, 0x67dafa54, 0x95b17957, + 0xcba24573, 0x39c9c670, 0x2a993584, 0xd8f2b687, + 0x0c38d26c, 0xfe53516f, 0xed03a29b, 0x1f682198, + 0x5125dad3, 0xa34e59d0, 0xb01eaa24, 0x42752927, + 0x96bf4dcc, 0x64d4cecf, 0x77843d3b, 0x85efbe38, + 0xdbfc821c, 0x2997011f, 0x3ac7f2eb, 0xc8ac71e8, + 0x1c661503, 0xee0d9600, 0xfd5d65f4, 0x0f36e6f7, + 0x61c69362, 0x93ad1061, 0x80fde395, 0x72966096, + 0xa65c047d, 0x5437877e, 0x4767748a, 0xb50cf789, + 0xeb1fcbad, 0x197448ae, 0x0a24bb5a, 0xf84f3859, + 0x2c855cb2, 0xdeeedfb1, 0xcdbe2c45, 0x3fd5af46, + 0x7198540d, 0x83f3d70e, 0x90a324fa, 0x62c8a7f9, + 0xb602c312, 0x44694011, 0x5739b3e5, 0xa55230e6, + 0xfb410cc2, 0x092a8fc1, 0x1a7a7c35, 0xe811ff36, + 0x3cdb9bdd, 0xceb018de, 0xdde0eb2a, 0x2f8b6829, + 0x82f63b78, 0x709db87b, 0x63cd4b8f, 0x91a6c88c, + 0x456cac67, 0xb7072f64, 0xa457dc90, 0x563c5f93, + 0x082f63b7, 0xfa44e0b4, 0xe9141340, 0x1b7f9043, + 0xcfb5f4a8, 0x3dde77ab, 0x2e8e845f, 0xdce5075c, + 0x92a8fc17, 0x60c37f14, 0x73938ce0, 0x81f80fe3, + 0x55326b08, 0xa759e80b, 0xb4091bff, 0x466298fc, + 0x1871a4d8, 0xea1a27db, 0xf94ad42f, 0x0b21572c, + 0xdfeb33c7, 0x2d80b0c4, 0x3ed04330, 0xccbbc033, + 0xa24bb5a6, 0x502036a5, 0x4370c551, 0xb11b4652, + 0x65d122b9, 0x97baa1ba, 0x84ea524e, 0x7681d14d, + 0x2892ed69, 0xdaf96e6a, 0xc9a99d9e, 0x3bc21e9d, + 0xef087a76, 0x1d63f975, 0x0e330a81, 0xfc588982, + 0xb21572c9, 0x407ef1ca, 0x532e023e, 0xa145813d, + 0x758fe5d6, 0x87e466d5, 0x94b49521, 0x66df1622, + 0x38cc2a06, 0xcaa7a905, 0xd9f75af1, 0x2b9cd9f2, + 0xff56bd19, 0x0d3d3e1a, 0x1e6dcdee, 0xec064eed, + 0xc38d26c4, 0x31e6a5c7, 0x22b65633, 0xd0ddd530, + 0x0417b1db, 0xf67c32d8, 0xe52cc12c, 0x1747422f, + 0x49547e0b, 0xbb3ffd08, 0xa86f0efc, 0x5a048dff, + 0x8ecee914, 0x7ca56a17, 0x6ff599e3, 0x9d9e1ae0, + 0xd3d3e1ab, 0x21b862a8, 0x32e8915c, 0xc083125f, + 0x144976b4, 0xe622f5b7, 0xf5720643, 0x07198540, + 0x590ab964, 0xab613a67, 0xb831c993, 0x4a5a4a90, + 0x9e902e7b, 0x6cfbad78, 0x7fab5e8c, 0x8dc0dd8f, + 0xe330a81a, 0x115b2b19, 0x020bd8ed, 0xf0605bee, + 0x24aa3f05, 0xd6c1bc06, 0xc5914ff2, 0x37faccf1, + 0x69e9f0d5, 0x9b8273d6, 0x88d28022, 0x7ab90321, + 0xae7367ca, 0x5c18e4c9, 0x4f48173d, 0xbd23943e, + 0xf36e6f75, 0x0105ec76, 0x12551f82, 0xe03e9c81, + 0x34f4f86a, 0xc69f7b69, 0xd5cf889d, 0x27a40b9e, + 0x79b737ba, 0x8bdcb4b9, 0x988c474d, 0x6ae7c44e, + 0xbe2da0a5, 0x4c4623a6, 0x5f16d052, 0xad7d5351, +}; + +uint32_t tst_crc32c(uint8_t *buf, size_t buf_len) +{ + uint32_t crc = 0xffffffff; + + while (buf_len--) + crc = crc32c_table[(crc ^ (*buf++)) & 0xff] ^ (crc >> 8); + + return ~crc; +}
It will be used to make a SCTP packet in the test. Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com> --- v3: use SPDX License-Identifier v2: As suggested by Cyril: * updated the docs, added section 2.2.25 * added 'tst_' prefix * changed type 'int' to 'size_t' for the buffer length doc/test-writing-guidelines.txt | 6 +++ include/tst_checksum.h | 16 ++++++++ lib/tst_checksum.c | 81 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 103 insertions(+), 0 deletions(-) create mode 100644 include/tst_checksum.h create mode 100644 lib/tst_checksum.c