diff options
author | Alexander V. Chernikov <melifaro@FreeBSD.org> | 2020-08-22 18:14:05 +0000 |
---|---|---|
committer | Alexander V. Chernikov <melifaro@FreeBSD.org> | 2020-08-22 18:14:05 +0000 |
commit | 5676d488c295b399a3ca89b9dcdd90700d2f2d1b (patch) | |
tree | d4f89ab12655f7502c84a03d65c695d0c276d371 /tests/sys/net | |
parent | de0fcd3a4499408be6ead3db8d2982e65724217b (diff) | |
download | src-5676d488c295b399a3ca89b9dcdd90700d2f2d1b.tar.gz src-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/sys/net')
-rw-r--r-- | tests/sys/net/routing/test_rtsock_l3.c | 26 |
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 0ee46917f519..f568f7851b89 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); |