@@ -7814,7 +7814,7 @@ START_TEST(test_udp_try_recv_unmatched_port_sends_icmp_unreachable)
78147814 struct wolfIP s;
78157815 uint8_t udp_buf[sizeof(struct wolfIP_udp_datagram) + 4];
78167816 struct wolfIP_udp_datagram *udp = (struct wolfIP_udp_datagram *)udp_buf;
7817- struct wolfIP_icmp_ttl_exceeded_packet *icmp;
7817+ struct wolfIP_icmp_dest_unreachable_packet *icmp;
78187818 uint32_t local_ip = 0x0A000001U;
78197819 uint32_t remote_ip = 0x0A000002U;
78207820 uint8_t src_mac[6] = {0x20, 0x21, 0x22, 0x23, 0x24, 0x25};
@@ -7846,8 +7846,8 @@ START_TEST(test_udp_try_recv_unmatched_port_sends_icmp_unreachable)
78467846 (uint32_t)(ETH_HEADER_LEN + IP_HEADER_LEN + UDP_HEADER_LEN + 4));
78477847
78487848 ck_assert_uint_eq(last_frame_sent_size,
7849- sizeof(struct wolfIP_icmp_ttl_exceeded_packet ));
7850- icmp = (struct wolfIP_icmp_ttl_exceeded_packet *)last_frame_sent;
7849+ sizeof(struct wolfIP_icmp_dest_unreachable_packet ));
7850+ icmp = (struct wolfIP_icmp_dest_unreachable_packet *)last_frame_sent;
78517851 ck_assert_uint_eq(icmp->type, 3U);
78527852 ck_assert_uint_eq(icmp->code, 3U);
78537853 ck_assert_mem_eq(icmp->unused, "\x00\x00\x00\x00", sizeof(icmp->unused));
@@ -7860,6 +7860,41 @@ START_TEST(test_udp_try_recv_unmatched_port_sends_icmp_unreachable)
78607860}
78617861END_TEST
78627862
7863+ START_TEST(test_udp_try_recv_unmatched_nonlocal_dst_does_not_send_icmp)
7864+ {
7865+ struct wolfIP s;
7866+ uint8_t udp_buf[sizeof(struct wolfIP_udp_datagram) + 4];
7867+ struct wolfIP_udp_datagram *udp = (struct wolfIP_udp_datagram *)udp_buf;
7868+ uint32_t local_ip = 0x0A000001U;
7869+ uint32_t remote_ip = 0x0A000002U;
7870+
7871+ wolfIP_init(&s);
7872+ mock_link_init(&s);
7873+ wolfIP_ipconfig_set(&s, local_ip, 0xFFFFFF00U, 0);
7874+
7875+ memset(udp_buf, 0, sizeof(udp_buf));
7876+ udp->ip.ver_ihl = 0x45;
7877+ udp->ip.ttl = 64;
7878+ udp->ip.proto = WI_IPPROTO_UDP;
7879+ udp->ip.len = ee16(IP_HEADER_LEN + UDP_HEADER_LEN + 4);
7880+ udp->ip.src = ee32(remote_ip);
7881+ udp->ip.dst = ee32(0x0A0000FEU);
7882+ udp->src_port = ee16(4321);
7883+ udp->dst_port = ee16(1234);
7884+ udp->len = ee16(UDP_HEADER_LEN + 4);
7885+ memcpy(udp->data, "test", 4);
7886+ fix_udp_checksums(udp);
7887+
7888+ memset(last_frame_sent, 0, sizeof(last_frame_sent));
7889+ last_frame_sent_size = 0;
7890+
7891+ udp_try_recv(&s, TEST_PRIMARY_IF, udp,
7892+ (uint32_t)(ETH_HEADER_LEN + IP_HEADER_LEN + UDP_HEADER_LEN + 4));
7893+
7894+ ck_assert_uint_eq(last_frame_sent_size, 0U);
7895+ }
7896+ END_TEST
7897+
78637898START_TEST(test_dns_callback_bad_flags)
78647899{
78657900 struct wolfIP s;
@@ -15034,6 +15069,24 @@ START_TEST(test_tcp_input_unmatched_ack_sends_rst)
1503415069}
1503515070END_TEST
1503615071
15072+ START_TEST(test_tcp_input_unmatched_ack_nonlocal_dst_does_not_send_rst)
15073+ {
15074+ struct wolfIP s;
15075+
15076+ wolfIP_init(&s);
15077+ mock_link_init(&s);
15078+ wolfIP_ipconfig_set(&s, 0x0A000001U, 0xFFFFFF00U, 0);
15079+
15080+ last_frame_sent_size = 0;
15081+ memset(last_frame_sent, 0, sizeof(last_frame_sent));
15082+
15083+ inject_tcp_segment(&s, TEST_PRIMARY_IF, 0x0A000002U, 0x0A0000FEU,
15084+ 4321, 1234, 77, 101, TCP_FLAG_ACK);
15085+
15086+ ck_assert_uint_eq(last_frame_sent_size, 0U);
15087+ }
15088+ END_TEST
15089+
1503715090START_TEST(test_tcp_input_unmatched_syn_sends_rst_ack)
1503815091{
1503915092 struct wolfIP s;
@@ -19360,6 +19413,7 @@ Suite *wolf_suite(void)
1936019413 tcase_add_test(tc_utils, test_udp_try_recv_conf_null);
1936119414 tcase_add_test(tc_utils, test_udp_try_recv_remote_ip_matches_local_ip);
1936219415 tcase_add_test(tc_utils, test_udp_try_recv_unmatched_port_sends_icmp_unreachable);
19416+ tcase_add_test(tc_utils, test_udp_try_recv_unmatched_nonlocal_dst_does_not_send_icmp);
1936319417 tcase_add_test(tc_utils, test_dns_callback_bad_flags);
1936419418 tcase_add_test(tc_utils, test_dns_callback_bad_name);
1936519419 tcase_add_test(tc_utils, test_dns_callback_short_header_ignored);
@@ -19451,6 +19505,7 @@ Suite *wolf_suite(void)
1945119505 tcase_add_test(tc_utils, test_tcp_input_filter_drop);
1945219506 tcase_add_test(tc_utils, test_tcp_input_port_mismatch_skips_socket);
1945319507 tcase_add_test(tc_utils, test_tcp_input_unmatched_ack_sends_rst);
19508+ tcase_add_test(tc_utils, test_tcp_input_unmatched_ack_nonlocal_dst_does_not_send_rst);
1945419509 tcase_add_test(tc_utils, test_tcp_input_unmatched_syn_sends_rst_ack);
1945519510 tcase_add_test(tc_utils, test_tcp_input_unmatched_rst_is_discarded);
1945619511 tcase_add_test(tc_utils, test_tcp_input_syn_bound_ip_mismatch);
0 commit comments