diff options
Diffstat (limited to 'tests/sys/netlink')
| -rw-r--r-- | tests/sys/netlink/netlink_socket.c | 45 | ||||
| -rw-r--r-- | tests/sys/netlink/test_snl.c | 19 | ||||
| -rw-r--r-- | tests/sys/netlink/test_snl_generic.c | 16 |
3 files changed, 43 insertions, 37 deletions
diff --git a/tests/sys/netlink/netlink_socket.c b/tests/sys/netlink/netlink_socket.c index 6dcc894b6695..cee864bb9bab 100644 --- a/tests/sys/netlink/netlink_socket.c +++ b/tests/sys/netlink/netlink_socket.c @@ -116,7 +116,11 @@ fullsocket(void) return (fd); } -ATF_TC_WITHOUT_HEAD(overflow); +ATF_TC(overflow); +ATF_TC_HEAD(overflow, tc) +{ + atf_tc_set_md_var(tc, "require.kmods", "netlink"); +} ATF_TC_BODY(overflow, tc) { char buf[BUFLEN]; @@ -143,7 +147,11 @@ ATF_TC_BODY(overflow, tc) ATF_REQUIRE(timer_done == 0); } -ATF_TC_WITHOUT_HEAD(peek); +ATF_TC(peek); +ATF_TC_HEAD(peek, tc) +{ + atf_tc_set_md_var(tc, "require.kmods", "netlink"); +} ATF_TC_BODY(peek, tc) { char *buf; @@ -185,7 +193,11 @@ cmsg_check(struct msghdr *msg) ATF_REQUIRE((msg->msg_flags & MSG_CTRUNC) == 0); } -ATF_TC_WITHOUT_HEAD(sizes); +ATF_TC(sizes); +ATF_TC_HEAD(sizes, tc) +{ + atf_tc_set_md_var(tc, "require.kmods", "netlink"); +} ATF_TC_BODY(sizes, tc) { #define NLMSG_LARGE 2048 /* XXX: match kernel nl_buf */ @@ -199,9 +211,22 @@ ATF_TC_BODY(sizes, tc) .msg_controllen = sizeof(cbuf), }; ssize_t ss; - int fd, size, rsize; + int fd, size, msize, rsize; - fd = fullsocket(); + /* + * Create a socket with NMSGS messages in the receive buffer. + */ +#define NMSGS 5 + ATF_REQUIRE((fd = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE)) != -1); + ATF_REQUIRE(send(fd, &hdr, sizeof(hdr), 0) == sizeof(hdr)); + ATF_REQUIRE(recv(fd, buf, sizeof(hdr), MSG_WAITALL | MSG_PEEK) == + sizeof(hdr)); + ATF_REQUIRE(ioctl(fd, FIONREAD, &msize) != -1); + for (u_int i = 0; i < NMSGS; i++) + ATF_REQUIRE(send(fd, &hdr, sizeof(hdr), 0) == sizeof(hdr)); + do { + ATF_REQUIRE(ioctl(fd, FIONREAD, &rsize) != -1); + } while (rsize < msize * (NMSGS + 1)); /* * Set NETLINK_MSG_INFO, so that later cmsg_check will check that any @@ -252,6 +277,7 @@ ATF_TC_BODY(sizes, tc) .iov_len = sizeof(buf) < rsize ? sizeof(buf) : rsize, }; ss = recvmsg(fd, &msg, 0); + ATF_REQUIRE(ss > hdr.nlmsg_len); ATF_REQUIRE(ss > NLMSG_LARGE * 9 || ss == rsize); cmsg_check(&msg); } @@ -273,7 +299,11 @@ nla_RTA_DST(struct nlattr *start, ssize_t len) * Check that NETLINK_ADD_MEMBERSHIP subscribes us. Add & delete a temporary * route and check if announcements came in. */ -ATF_TC_WITHOUT_HEAD(membership); +ATF_TC(membership); +ATF_TC_HEAD(membership, tc) +{ + atf_tc_set_md_var(tc, "require.kmods", "netlink"); +} ATF_TC_BODY(membership, tc) { struct { @@ -329,9 +359,6 @@ ATF_TC_BODY(membership, tc) ATF_TP_ADD_TCS(tp) { - if (modfind("netlink") == -1) - atf_tc_skip("netlink module not loaded"); - ATF_TP_ADD_TC(tp, overflow); ATF_TP_ADD_TC(tp, peek); ATF_TP_ADD_TC(tp, sizes); diff --git a/tests/sys/netlink/test_snl.c b/tests/sys/netlink/test_snl.c index 040414a96e2c..3990aa0b075d 100644 --- a/tests/sys/netlink/test_snl.c +++ b/tests/sys/netlink/test_snl.c @@ -25,13 +25,6 @@ static const struct snl_hdr_parser *snl_all_route_parsers[] = { &_addr_fbsd_parser, &snl_rtm_addr_parser, &_nh_fbsd_parser, &snl_nhmsg_parser, }; -static void -require_netlink(void) -{ - if (modfind("netlink") == -1) - atf_tc_skip("netlink module not loaded"); -} - ATF_TC(snl_verify_core_parsers); ATF_TC_HEAD(snl_verify_core_parsers, tc) { @@ -60,6 +53,7 @@ ATF_TC(snl_parse_errmsg_capped); ATF_TC_HEAD(snl_parse_errmsg_capped, tc) { atf_tc_set_md_var(tc, "descr", "Tests snl(3) correctly parsing capped errors"); + atf_tc_set_md_var(tc, "require.kmods", "netlink"); } ATF_TC_BODY(snl_parse_errmsg_capped, tc) @@ -67,8 +61,6 @@ ATF_TC_BODY(snl_parse_errmsg_capped, tc) struct snl_state ss; struct snl_writer nw; - require_netlink(); - if (!snl_init(&ss, NETLINK_ROUTE)) atf_tc_fail("snl_init() failed"); @@ -102,6 +94,7 @@ ATF_TC(snl_parse_errmsg_capped_extack); ATF_TC_HEAD(snl_parse_errmsg_capped_extack, tc) { atf_tc_set_md_var(tc, "descr", "Tests snl(3) correctly parsing capped errors with extack"); + atf_tc_set_md_var(tc, "require.kmods", "netlink"); } ATF_TC_BODY(snl_parse_errmsg_capped_extack, tc) @@ -109,8 +102,6 @@ ATF_TC_BODY(snl_parse_errmsg_capped_extack, tc) struct snl_state ss; struct snl_writer nw; - require_netlink(); - if (!snl_init(&ss, NETLINK_ROUTE)) atf_tc_fail("snl_init() failed"); @@ -145,6 +136,7 @@ ATF_TC(snl_parse_errmsg_uncapped_extack); ATF_TC_HEAD(snl_parse_errmsg_uncapped_extack, tc) { atf_tc_set_md_var(tc, "descr", "Tests snl(3) correctly parsing errors with extack"); + atf_tc_set_md_var(tc, "require.kmods", "netlink"); } ATF_TC_BODY(snl_parse_errmsg_uncapped_extack, tc) @@ -152,8 +144,6 @@ ATF_TC_BODY(snl_parse_errmsg_uncapped_extack, tc) struct snl_state ss; struct snl_writer nw; - require_netlink(); - ATF_CHECK(snl_init(&ss, NETLINK_ROUTE)); int optval = 1; @@ -185,6 +175,7 @@ ATF_TC(snl_list_ifaces); ATF_TC_HEAD(snl_list_ifaces, tc) { atf_tc_set_md_var(tc, "descr", "Tests snl(3) listing interfaces"); + atf_tc_set_md_var(tc, "require.kmods", "netlink"); } struct nl_parsed_link { @@ -212,8 +203,6 @@ ATF_TC_BODY(snl_list_ifaces, tc) struct snl_state ss; struct snl_writer nw; - require_netlink(); - if (!snl_init(&ss, NETLINK_ROUTE)) atf_tc_fail("snl_init() failed"); diff --git a/tests/sys/netlink/test_snl_generic.c b/tests/sys/netlink/test_snl_generic.c index c63b1380f2ad..8613bf04a45c 100644 --- a/tests/sys/netlink/test_snl_generic.c +++ b/tests/sys/netlink/test_snl_generic.c @@ -15,13 +15,6 @@ static const struct snl_hdr_parser *snl_all_genl_parsers[] = { &_genl_ctrl_getfam_parser, &_genl_ctrl_mc_parser, }; -static void -require_netlink(void) -{ - if (modfind("netlink") == -1) - atf_tc_skip("netlink module not loaded"); -} - ATF_TC(snl_verify_genl_parsers); ATF_TC_HEAD(snl_verify_genl_parsers, tc) { @@ -38,14 +31,13 @@ ATF_TC(test_snl_get_genl_family_success); ATF_TC_HEAD(test_snl_get_genl_family_success, tc) { atf_tc_set_md_var(tc, "descr", "Tests successfull resolution of the 'nlctrl' family"); + atf_tc_set_md_var(tc, "require.kmods", "netlink"); } ATF_TC_BODY(test_snl_get_genl_family_success, tc) { struct snl_state ss; - require_netlink(); - if (!snl_init(&ss, NETLINK_GENERIC)) atf_tc_fail("snl_init() failed"); @@ -56,14 +48,13 @@ ATF_TC(test_snl_get_genl_family_failure); ATF_TC_HEAD(test_snl_get_genl_family_failure, tc) { atf_tc_set_md_var(tc, "descr", "Tests unsuccessfull resolution of 'no-such-family' family"); + atf_tc_set_md_var(tc, "require.kmods", "netlink"); } ATF_TC_BODY(test_snl_get_genl_family_failure, tc) { struct snl_state ss; - require_netlink(); - if (!snl_init(&ss, NETLINK_GENERIC)) atf_tc_fail("snl_init() failed"); @@ -74,6 +65,7 @@ ATF_TC(test_snl_get_genl_family_groups); ATF_TC_HEAD(test_snl_get_genl_family_groups, tc) { atf_tc_set_md_var(tc, "descr", "Tests getting 'nlctrl' groups"); + atf_tc_set_md_var(tc, "require.kmods", "netlink"); } ATF_TC_BODY(test_snl_get_genl_family_groups, tc) @@ -82,8 +74,6 @@ ATF_TC_BODY(test_snl_get_genl_family_groups, tc) struct snl_writer nw; struct nlmsghdr *hdr; - require_netlink(); - if (!snl_init(&ss, NETLINK_GENERIC)) atf_tc_fail("snl_init() failed"); |
