Changeset View
Changeset View
Standalone View
Standalone View
sbin/ping/tests/in_cksum_test.c
Show All 23 Lines | |||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||||
* SUCH DAMAGE. | * SUCH DAMAGE. | ||||
*/ | */ | ||||
#include <sys/cdefs.h> | #include <sys/cdefs.h> | ||||
__FBSDID("$FreeBSD: head/sbin/ping/tests/in_cksum_test.c 351318 2019-08-20 21:59:48Z asomers $"); | __FBSDID("$FreeBSD: head/sbin/ping/tests/in_cksum_test.c 351318 2019-08-20 21:59:48Z asomers $"); | ||||
#include <sys/endian.h> | |||||
#include <sys/param.h> | #include <sys/param.h> | ||||
#include <atf-c.h> | #include <atf-c.h> | ||||
#include "../utils.h" | #include "../utils.h" | ||||
/* | /* | ||||
* Test cases. | * Test cases. | ||||
*/ | */ | ||||
ATF_TC_WITHOUT_HEAD(aligned_even_length_big_endian); | ATF_TC_WITHOUT_HEAD(aligned_even_length); | ||||
ATF_TC_BODY(aligned_even_length_big_endian, tc) | ATF_TC_BODY(aligned_even_length, tc) | ||||
{ | { | ||||
#if _BYTE_ORDER == _LITTLE_ENDIAN | |||||
u_char data[] __aligned(sizeof(u_short)) = | u_char data[] __aligned(sizeof(u_short)) = | ||||
{0x34, 0x12, 0x78, 0x56}; | |||||
#else | |||||
u_char data[] __aligned(sizeof(u_short)) = | |||||
{0x12, 0x34, 0x56, 0x78}; | {0x12, 0x34, 0x56, 0x78}; | ||||
#endif | |||||
u_short sum; | u_short sum; | ||||
sum = in_cksum(data, nitems(data)); | sum = in_cksum(data, nitems(data)); | ||||
ATF_REQUIRE(sum == 0x5397); | ATF_REQUIRE(sum == 0x9753); | ||||
} | } | ||||
ATF_TC_WITHOUT_HEAD(aligned_odd_length_big_endian); | ATF_TC_WITHOUT_HEAD(aligned_odd_length); | ||||
ATF_TC_BODY(aligned_odd_length_big_endian, tc) | ATF_TC_BODY(aligned_odd_length, tc) | ||||
{ | { | ||||
#if _BYTE_ORDER == _LITTLE_ENDIAN | |||||
u_char data[] __aligned(sizeof(u_short)) = | u_char data[] __aligned(sizeof(u_short)) = | ||||
{0x34, 0x12, 0x78, 0x56, 0x00, 0x9a}; | |||||
#else | |||||
u_char data[] __aligned(sizeof(u_short)) = | |||||
{0x12, 0x34, 0x56, 0x78, 0x9a}; | {0x12, 0x34, 0x56, 0x78, 0x9a}; | ||||
#endif | |||||
u_short sum; | u_short sum; | ||||
sum = in_cksum(data, nitems(data)); | sum = in_cksum(data, nitems(data)); | ||||
ATF_REQUIRE(sum == 0x52fd); | |||||
} | |||||
ATF_TC_WITHOUT_HEAD(aligned_even_length_little_endian); | |||||
ATF_TC_BODY(aligned_even_length_little_endian, tc) | |||||
{ | |||||
u_char data[] __aligned(sizeof(u_short)) = | |||||
{0x34, 0x12, 0x78, 0x56}; | |||||
u_short sum; | |||||
sum = in_cksum(data, nitems(data)); | |||||
ATF_REQUIRE_MSG(sum == 0x9753, "%d", sum); | |||||
} | |||||
ATF_TC_WITHOUT_HEAD(aligned_odd_length_little_endian); | |||||
ATF_TC_BODY(aligned_odd_length_little_endian, tc) | |||||
{ | |||||
u_char data[] __aligned(sizeof(u_short)) = | |||||
{0x34, 0x12, 0x78, 0x56, 0x00, 0x9a}; | |||||
u_short sum; | |||||
sum = in_cksum(data, nitems(data)); | |||||
ATF_REQUIRE(sum == 0xfd52); | ATF_REQUIRE(sum == 0xfd52); | ||||
} | } | ||||
ATF_TC_WITHOUT_HEAD(unaligned_even_length_big_endian); | ATF_TC_WITHOUT_HEAD(unaligned_even_length); | ||||
ATF_TC_BODY(unaligned_even_length_big_endian, tc) | ATF_TC_BODY(unaligned_even_length, tc) | ||||
{ | { | ||||
#if _BYTE_ORDER == _LITTLE_ENDIAN | |||||
u_char data[] __aligned(sizeof(u_short)) = | u_char data[] __aligned(sizeof(u_short)) = | ||||
{0x00, 0x34, 0x12, 0x78, 0x56}; | |||||
#else | |||||
u_char data[] __aligned(sizeof(u_short)) = | |||||
{0x00, 0x12, 0x34, 0x56, 0x78}; | {0x00, 0x12, 0x34, 0x56, 0x78}; | ||||
#endif | |||||
u_short sum; | u_short sum; | ||||
sum = in_cksum(data + 1, nitems(data) - 1); | sum = in_cksum(data + 1, nitems(data) - 1); | ||||
ATF_REQUIRE(sum == 0x5397); | ATF_REQUIRE(sum == 0x9753); | ||||
} | } | ||||
ATF_TC_WITHOUT_HEAD(unaligned_odd_length_big_endian); | ATF_TC_WITHOUT_HEAD(unaligned_odd_length); | ||||
ATF_TC_BODY(unaligned_odd_length_big_endian, tc) | ATF_TC_BODY(unaligned_odd_length, tc) | ||||
{ | { | ||||
#if _BYTE_ORDER == _LITTLE_ENDIAN | |||||
u_char data[] __aligned(sizeof(u_short)) = | u_char data[] __aligned(sizeof(u_short)) = | ||||
{0x00, 0x34, 0x12, 0x78, 0x56, 0x00, 0x9a}; | |||||
#else | |||||
u_char data[] __aligned(sizeof(u_short)) = | |||||
{0x00, 0x12, 0x34, 0x56, 0x78, 0x9a}; | {0x00, 0x12, 0x34, 0x56, 0x78, 0x9a}; | ||||
#endif | |||||
u_short sum; | u_short sum; | ||||
sum = in_cksum(data + 1, nitems(data) - 1); | sum = in_cksum(data + 1, nitems(data) - 1); | ||||
ATF_REQUIRE(sum == 0x52fd); | |||||
} | |||||
ATF_TC_WITHOUT_HEAD(unaligned_even_length_little_endian); | |||||
ATF_TC_BODY(unaligned_even_length_little_endian, tc) | |||||
{ | |||||
u_char data[] __aligned(sizeof(u_short)) = | |||||
{0x00, 0x34, 0x12, 0x78, 0x56}; | |||||
u_short sum; | |||||
sum = in_cksum(data + 1, nitems(data) - 1); | |||||
ATF_REQUIRE_MSG(sum == 0x9753, "%d", sum); | |||||
} | |||||
ATF_TC_WITHOUT_HEAD(unaligned_odd_length_little_endian); | |||||
ATF_TC_BODY(unaligned_odd_length_little_endian, tc) | |||||
{ | |||||
u_char data[] __aligned(sizeof(u_short)) = | |||||
{0x00, 0x34, 0x12, 0x78, 0x56, 0x00, 0x9a}; | |||||
u_short sum; | |||||
sum = in_cksum(data + 1, nitems(data) - 1); | |||||
ATF_REQUIRE(sum == 0xfd52); | ATF_REQUIRE(sum == 0xfd52); | ||||
} | } | ||||
/* | /* | ||||
* Main. | * Main. | ||||
*/ | */ | ||||
ATF_TP_ADD_TCS(tp) | ATF_TP_ADD_TCS(tp) | ||||
{ | { | ||||
ATF_TP_ADD_TC(tp, aligned_even_length_big_endian); | ATF_TP_ADD_TC(tp, aligned_even_length); | ||||
ATF_TP_ADD_TC(tp, aligned_odd_length_big_endian); | ATF_TP_ADD_TC(tp, aligned_odd_length); | ||||
ATF_TP_ADD_TC(tp, aligned_even_length_little_endian); | ATF_TP_ADD_TC(tp, unaligned_even_length); | ||||
ATF_TP_ADD_TC(tp, aligned_odd_length_little_endian); | ATF_TP_ADD_TC(tp, unaligned_odd_length); | ||||
ATF_TP_ADD_TC(tp, unaligned_even_length_big_endian); | |||||
ATF_TP_ADD_TC(tp, unaligned_odd_length_big_endian); | |||||
ATF_TP_ADD_TC(tp, unaligned_even_length_little_endian); | |||||
ATF_TP_ADD_TC(tp, unaligned_odd_length_little_endian); | |||||
return (atf_no_error()); | return (atf_no_error()); | ||||
} | } |