-#if PNAT_TEST_DEBUG
- clib_warning("Received packet: %U", format_ip4_header, ip, 20);
- clib_warning("Expected packet: %U", format_ip4_header, expected_ip, 20);
- tcp_header_t *tcp = ip4_next_header(ip);
- clib_warning("IP: %U TCP: %U", format_ip4_header, ip, sizeof(*ip),
- format_tcp_header, tcp, sizeof(*tcp));
- tcp = ip4_next_header(expected_ip);
- clib_warning("IP: %U TCP: %U", format_ip4_header, expected_ip, sizeof(*ip),
- format_tcp_header, tcp, sizeof(*tcp));
-#endif
-
- u32 flags = ip4_tcp_udp_validate_checksum(vm, b);
- assert((flags & VNET_BUFFER_F_L4_CHECKSUM_CORRECT) != 0);
- flags = ip4_tcp_udp_validate_checksum(vm, expected_b);
- assert((flags & VNET_BUFFER_F_L4_CHECKSUM_CORRECT) != 0);
- assert(b->current_length == expected_b->current_length);
-
- test_assert(memcmp(ip, expected_ip, b->current_length) == 0, "%s", name);
+ if (ip->protocol == IP_PROTOCOL_UDP || ip->protocol == IP_PROTOCOL_TCP) {
+ u32 flags = ip4_tcp_udp_validate_checksum(vm, b);
+ test_assert((flags & VNET_BUFFER_F_L4_CHECKSUM_CORRECT) != 0, "%s",
+ name);
+ flags = ip4_tcp_udp_validate_checksum(vm, expected_b);
+ test_assert((flags & VNET_BUFFER_F_L4_CHECKSUM_CORRECT) != 0, "%s",
+ name);
+ }
+ test_assert(b->current_length == expected_b->current_length, "%s %d vs %d",
+ name, b->current_length, expected_b->current_length);
+
+ if (memcmp(ip, expected_ip, b->current_length) != 0) {
+ if (ip->protocol == IP_PROTOCOL_UDP) {
+ udp_header_t *udp = ip4_next_header(ip);
+ clib_warning("Received: IP: %U UDP: %U", format_ip4_header, ip,
+ sizeof(*ip), format_udp_header, udp, sizeof(*udp));
+ udp = ip4_next_header(expected_ip);
+ clib_warning("%U", format_hexdump, ip, b->current_length);
+ clib_warning("Expected: IP: %U UDP: %U", format_ip4_header,
+ expected_ip, sizeof(*ip), format_udp_header, udp,
+ sizeof(*udp));
+ clib_warning("%U", format_hexdump, expected_ip,
+ expected_b->current_length);
+ } else if (ip->protocol == IP_PROTOCOL_TCP) {
+ tcp_header_t *tcp = ip4_next_header(ip);
+ clib_warning("Received IP: %U TCP: %U", format_ip4_header, ip,
+ sizeof(*ip), format_tcp_header, tcp, sizeof(*tcp));
+ tcp = ip4_next_header(expected_ip);
+ clib_warning("Expected IP: %U TCP: %U", format_ip4_header,
+ expected_ip, sizeof(*ip), format_tcp_header, tcp,
+ sizeof(*tcp));
+ } else {
+ clib_warning("Received: IP: %U", format_ip4_header, ip,
+ sizeof(*ip));
+ clib_warning("Expected: IP: %U", format_ip4_header, expected_ip,
+ sizeof(*ip));
+ }
+ test_assert_log(0, "%s", name);
+ } else {
+ test_assert_log(1, "%s", name);
+ }