iPXE
|
TCP/IP self-tests. More...
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <ipxe/test.h>
#include <ipxe/profile.h>
#include <ipxe/tcpip.h>
Go to the source code of this file.
Data Structures | |
struct | tcpip_test |
A TCP/IP fixed-data test. More... | |
struct | tcpip_random_test |
A TCP/IP pseudorandom-data test. More... | |
Macros | |
#define | PROFILE_COUNT 16 |
Number of sample iterations for profiling. More... | |
#define | DATA(...) { __VA_ARGS__ } |
Define inline data. More... | |
#define | TCPIP_TEST(name, DATA) |
Define a TCP/IP fixed-data test. More... | |
#define | TCPIP_RANDOM_TEST(name, SEED, LEN, OFFSET) |
Define a TCP/IP pseudorandom-data test. More... | |
#define | tcpip_ok(test) tcpip_okx ( test, __FILE__, __LINE__ ) |
#define | tcpip_random_ok(test) tcpip_random_okx ( test, __FILE__, __LINE__ ) |
Functions | |
FILE_LICENCE (GPL2_OR_LATER_OR_UBDL) | |
TCPIP_TEST (empty, DATA()) | |
Empty data. More... | |
TCPIP_TEST (one_byte, DATA(0xeb)) | |
Single byte. More... | |
TCPIP_TEST (two_bytes, DATA(0xba, 0xbe)) | |
Double byte. More... | |
TCPIP_TEST (positive_zero, DATA(0x00, 0x00)) | |
Positive zero data. More... | |
TCPIP_TEST (negative_zero, DATA(0xff, 0xff)) | |
Negative zero data. More... | |
TCPIP_TEST (final_carry_big, DATA(0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01)) | |
Final wrap-around carry (big-endian) More... | |
TCPIP_TEST (final_carry_little, DATA(0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00)) | |
Final wrap-around carry (little-endian) More... | |
TCPIP_RANDOM_TEST (random_aligned, 0x12345678UL, 4096, 0) | |
Random data (aligned) More... | |
TCPIP_RANDOM_TEST (random_unaligned_1, 0x12345678UL, 4096, 1) | |
Random data (unaligned, +1) More... | |
TCPIP_RANDOM_TEST (random_unaligned_2, 0x12345678UL, 4096, 2) | |
Random data (unaligned, +2) More... | |
TCPIP_RANDOM_TEST (random_aligned_truncated, 0x12345678UL, 4095, 0) | |
Random data (aligned, truncated) More... | |
TCPIP_RANDOM_TEST (partial, 0xcafebabe, 121, 5) | |
Random data (unaligned start and finish) More... | |
static uint16_t | rfc_tcpip_chksum (const void *data, size_t len) |
Calculate TCP/IP checksum. More... | |
static void | tcpip_okx (struct tcpip_test *test, const char *file, unsigned int line) |
Report TCP/IP fixed-data test result. More... | |
static void | tcpip_random_okx (struct tcpip_random_test *test, const char *file, unsigned int line) |
Report TCP/IP pseudorandom-data test result. More... | |
static void | tcpip_test_exec (void) |
Perform TCP/IP self-tests. More... | |
Variables | |
static uint8_t | tcpip_data [4096+7] |
Buffer for pseudorandom-data tests. More... | |
struct self_test tcpip_test | __self_test |
TCP/IP self-test. More... | |
TCP/IP self-tests.
Definition in file tcpip_test.c.
#define PROFILE_COUNT 16 |
Number of sample iterations for profiling.
Definition at line 44 of file tcpip_test.c.
#define DATA | ( | ... | ) | { __VA_ARGS__ } |
Define inline data.
Definition at line 65 of file tcpip_test.c.
Define a TCP/IP fixed-data test.
Definition at line 68 of file tcpip_test.c.
#define TCPIP_RANDOM_TEST | ( | name, | |
SEED, | |||
LEN, | |||
OFFSET | |||
) |
Define a TCP/IP pseudorandom-data test.
Definition at line 77 of file tcpip_test.c.
Definition at line 186 of file tcpip_test.c.
#define tcpip_random_ok | ( | test | ) | tcpip_random_okx ( test, __FILE__, __LINE__ ) |
Definition at line 234 of file tcpip_test.c.
FILE_LICENCE | ( | GPL2_OR_LATER_OR_UBDL | ) |
TCPIP_TEST | ( | empty | , |
DATA() | |||
) |
Empty data.
TCPIP_TEST | ( | one_byte | , |
DATA(0xeb) | |||
) |
Single byte.
TCPIP_TEST | ( | two_bytes | , |
DATA(0xba, 0xbe) | |||
) |
Double byte.
TCPIP_TEST | ( | positive_zero | , |
DATA(0x00, 0x00) | |||
) |
Positive zero data.
TCPIP_TEST | ( | negative_zero | , |
DATA(0xff, 0xff) | |||
) |
Negative zero data.
TCPIP_TEST | ( | final_carry_big | , |
DATA(0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01) | |||
) |
Final wrap-around carry (big-endian)
TCPIP_TEST | ( | final_carry_little | , |
DATA(0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00) | |||
) |
Final wrap-around carry (little-endian)
TCPIP_RANDOM_TEST | ( | random_aligned | , |
0x12345678UL | , | ||
4096 | , | ||
0 | |||
) |
Random data (aligned)
TCPIP_RANDOM_TEST | ( | random_unaligned_1 | , |
0x12345678UL | , | ||
4096 | , | ||
1 | |||
) |
Random data (unaligned, +1)
TCPIP_RANDOM_TEST | ( | random_unaligned_2 | , |
0x12345678UL | , | ||
4096 | , | ||
2 | |||
) |
Random data (unaligned, +2)
TCPIP_RANDOM_TEST | ( | random_aligned_truncated | , |
0x12345678UL | , | ||
4095 | , | ||
0 | |||
) |
Random data (aligned, truncated)
TCPIP_RANDOM_TEST | ( | partial | , |
0xcafebabe | , | ||
121 | , | ||
5 | |||
) |
Random data (unaligned start and finish)
Calculate TCP/IP checksum.
data | Data to sum |
len | Length of data |
cksum | Checksum |
This is a reference implementation taken from RFC1071 (and modified to fix compilation without warnings under gcc).
The initial value of the one's complement sum
is changed from positive zero (0x0000) to negative zero (0xffff). This ensures that the return value will always use the positive representation of zero (0x0000). Without this change, the return value would use negative zero (0xffff) if the input data is zero length (or all zeros) but positive zero (0x0000) for any other data which sums to zero.
Definition at line 144 of file tcpip_test.c.
References assert(), data, and len.
Referenced by tcpip_okx(), and tcpip_random_okx().
|
static |
Report TCP/IP fixed-data test result.
test | TCP/IP test |
file | Test code file |
line | Test code line |
Definition at line 170 of file tcpip_test.c.
References generic_tcpip_continue_chksum(), okx, rfc_tcpip_chksum(), tcpip_continue_chksum(), TCPIP_EMPTY_CSUM, and test.
|
static |
Report TCP/IP pseudorandom-data test result.
test | TCP/IP test |
file | Test code file |
line | Test code line |
Definition at line 195 of file tcpip_test.c.
References assert(), data, DBG, generic_tcpip_continue_chksum(), memset(), okx, PROFILE_COUNT, profile_mean(), profile_start(), profile_stddev(), profile_stop(), random(), rfc_tcpip_chksum(), srandom(), tcpip_continue_chksum(), tcpip_data, TCPIP_EMPTY_CSUM, and test.
|
static |
Perform TCP/IP self-tests.
Definition at line 240 of file tcpip_test.c.
References tcpip_ok, and tcpip_random_ok.
|
static |
Buffer for pseudorandom-data tests.
Definition at line 86 of file tcpip_test.c.
Referenced by tcpip_random_okx().
struct self_test tcpip_test __self_test |
TCP/IP self-test.
Definition at line 257 of file tcpip_test.c.