summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAlexander V. Chernikov <melifaro@FreeBSD.org>2020-08-22 18:14:05 +0000
committerAlexander V. Chernikov <melifaro@FreeBSD.org>2020-08-22 18:14:05 +0000
commit5676d488c295b399a3ca89b9dcdd90700d2f2d1b (patch)
treed4f89ab12655f7502c84a03d65c695d0c276d371 /tests
parentde0fcd3a4499408be6ead3db8d2982e65724217b (diff)
downloadsrc-test-5676d488c295b399a3ca89b9dcdd90700d2f2d1b.tar.gz
src-test-5676d488c295b399a3ca89b9dcdd90700d2f2d1b.zip
Add test for checking RTF_HOST and RTAX_NETMASK inconsistency.
RTF_HOST indicates whether route is a host route (netmask is empty or /{32,128}). Check that if netmask is empty and host route is not specified, kernel returns an error. Differential Revision: https://reviews.freebsd.org/D26155
Notes
Notes: svn path=/head/; revision=364489
Diffstat (limited to 'tests')
-rw-r--r--tests/sys/net/routing/test_rtsock_l3.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/tests/sys/net/routing/test_rtsock_l3.c b/tests/sys/net/routing/test_rtsock_l3.c
index 0ee46917f5196..f568f7851b893 100644
--- a/tests/sys/net/routing/test_rtsock_l3.c
+++ b/tests/sys/net/routing/test_rtsock_l3.c
@@ -365,7 +365,6 @@ ATF_TC_BODY(rtm_get_v4_empty_dst_failure, tc)
(struct sockaddr *)&c->mask4, NULL);
rtsock_update_rtm_len(rtm);
- write(c->rtsock_fd, rtm, rtm->rtm_msglen);
ATF_CHECK_ERRNO(EINVAL, write(c->rtsock_fd, rtm, rtm->rtm_msglen));
}
@@ -441,6 +440,30 @@ ATF_TC_CLEANUP(rtm_add_v4_gw_direct_success, tc)
CLEANUP_AFTER_TEST;
}
+RTM_DECLARE_ROOT_TEST(rtm_add_v4_no_rtf_host_failure,
+ "Tests failure with netmask sa and RTF_HOST inconsistency");
+
+ATF_TC_BODY(rtm_add_v4_no_rtf_host_failure, tc)
+{
+ DECLARE_TEST_VARS;
+
+ c = presetup_ipv4(tc);
+
+ /* Create IPv4 subnetwork with smaller prefix */
+ struct sockaddr_in mask4;
+ struct sockaddr_in net4;
+ struct sockaddr_in gw4;
+ prepare_v4_network(c, &net4, &mask4, &gw4);
+
+ prepare_route_message(rtm, RTM_ADD, (struct sockaddr *)&net4,
+ NULL, (struct sockaddr *)&gw4);
+ rtsock_update_rtm_len(rtm);
+
+ /* RTF_HOST is NOT specified, while netmask is empty */
+
+ ATF_CHECK_ERRNO(EINVAL, write(c->rtsock_fd, rtm, rtm->rtm_msglen));
+}
+
ATF_TC_WITH_CLEANUP(rtm_del_v4_prefix_nogw_success);
ATF_TC_HEAD(rtm_del_v4_prefix_nogw_success, tc)
{
@@ -1269,6 +1292,7 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, rtm_get_v4_lpm_success);
ATF_TP_ADD_TC(tp, rtm_get_v4_hostbits_failure);
ATF_TP_ADD_TC(tp, rtm_get_v4_empty_dst_failure);
+ ATF_TP_ADD_TC(tp, rtm_add_v4_no_rtf_host_failure);
ATF_TP_ADD_TC(tp, rtm_add_v4_gw_direct_success);
ATF_TP_ADD_TC(tp, rtm_del_v4_prefix_nogw_success);
ATF_TP_ADD_TC(tp, rtm_add_v6_gu_gw_gu_direct_success);