xref: /freebsd/tests/sys/netpfil/pf/ioctl/validation.c (revision d3cc40300eaa672ce8f7d1782454267d3ea15dfb)
198c5f988SKristof Provost /*-
298c5f988SKristof Provost  * Copyright (c) 2018	Kristof Provost <kp@FreeBSD.org>
398c5f988SKristof Provost  *
498c5f988SKristof Provost  * Redistribution and use in source and binary forms, with or without
598c5f988SKristof Provost  * modification, are permitted provided that the following conditions
698c5f988SKristof Provost  * are met:
798c5f988SKristof Provost  * 1. Redistributions of source code must retain the above copyright
898c5f988SKristof Provost  *    notice, this list of conditions and the following disclaimer.
998c5f988SKristof Provost  * 2. Redistributions in binary form must reproduce the above copyright
1098c5f988SKristof Provost  *    notice, this list of conditions and the following disclaimer in the
1198c5f988SKristof Provost  *    documentation and/or other materials provided with the distribution.
1298c5f988SKristof Provost  *
1398c5f988SKristof Provost  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1498c5f988SKristof Provost  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1598c5f988SKristof Provost  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1698c5f988SKristof Provost  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
1798c5f988SKristof Provost  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1898c5f988SKristof Provost  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
1998c5f988SKristof Provost  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2098c5f988SKristof Provost  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2198c5f988SKristof Provost  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2298c5f988SKristof Provost  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2398c5f988SKristof Provost  * SUCH DAMAGE.
2498c5f988SKristof Provost  *
2598c5f988SKristof Provost  * $FreeBSD$
2698c5f988SKristof Provost  */
2798c5f988SKristof Provost 
2898c5f988SKristof Provost #include <sys/param.h>
2998c5f988SKristof Provost #include <sys/module.h>
3098c5f988SKristof Provost #include <sys/types.h>
3198c5f988SKristof Provost #include <sys/ioctl.h>
3298c5f988SKristof Provost #include <sys/socket.h>
3398c5f988SKristof Provost 
3498c5f988SKristof Provost #include <net/if.h>
3598c5f988SKristof Provost #include <net/pfvar.h>
3698c5f988SKristof Provost 
3798c5f988SKristof Provost #include <fcntl.h>
3898c5f988SKristof Provost #include <stdio.h>
3998c5f988SKristof Provost 
4098c5f988SKristof Provost #include <atf-c.h>
4198c5f988SKristof Provost 
4298c5f988SKristof Provost static int dev;
4398c5f988SKristof Provost 
4498c5f988SKristof Provost #define COMMON_HEAD() \
4598c5f988SKristof Provost 	if (modfind("pf") == -1) \
4698c5f988SKristof Provost 		atf_tc_skip("pf not loaded"); \
4798c5f988SKristof Provost 	dev = open("/dev/pf", O_RDWR); \
4898c5f988SKristof Provost 	if (dev == -1) \
4998c5f988SKristof Provost 		atf_tc_skip("Failed to open /dev/pf");
5098c5f988SKristof Provost 
5198c5f988SKristof Provost #define COMMON_CLEANUP() \
5298c5f988SKristof Provost 	close(dev);
5398c5f988SKristof Provost 
541ff545d6SKristof Provost void
551ff545d6SKristof Provost common_init_tbl(struct pfr_table *tbl)
561ff545d6SKristof Provost {
571ff545d6SKristof Provost 	bzero(tbl, sizeof(struct pfr_table));
581ff545d6SKristof Provost 	strcpy(tbl->pfrt_anchor, "anchor");
591ff545d6SKristof Provost 	strcpy(tbl->pfrt_name, "name");
601ff545d6SKristof Provost 	tbl->pfrt_flags = 0;
611ff545d6SKristof Provost 	tbl->pfrt_fback = 0;
621ff545d6SKristof Provost }
631ff545d6SKristof Provost 
64*d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(addtables);
6587c7063cSKristof Provost ATF_TC_HEAD(addtables, tc)
6687c7063cSKristof Provost {
6787c7063cSKristof Provost 	atf_tc_set_md_var(tc, "require.user", "root");
6887c7063cSKristof Provost }
6987c7063cSKristof Provost 
7098c5f988SKristof Provost ATF_TC_BODY(addtables, tc)
7198c5f988SKristof Provost {
7298c5f988SKristof Provost 	struct pfioc_table io;
7398c5f988SKristof Provost 	struct pfr_table tbl;
741bb72c29SKristof Provost 	struct pfr_table tbls[4];
7598c5f988SKristof Provost 	int flags;
7698c5f988SKristof Provost 
7798c5f988SKristof Provost 	COMMON_HEAD();
7898c5f988SKristof Provost 
7998c5f988SKristof Provost 	flags = 0;
8098c5f988SKristof Provost 
8198c5f988SKristof Provost 	bzero(&io, sizeof(io));
8298c5f988SKristof Provost 	io.pfrio_flags = flags;
8398c5f988SKristof Provost 	io.pfrio_buffer = &tbl;
8498c5f988SKristof Provost 	io.pfrio_esize = sizeof(tbl);
8598c5f988SKristof Provost 
8698c5f988SKristof Provost 	/* Negative size */
8798c5f988SKristof Provost 	io.pfrio_size = -1;
8898c5f988SKristof Provost 	if (ioctl(dev, DIOCRADDTABLES, &io) == 0)
8998c5f988SKristof Provost 		atf_tc_fail("Request with size -1 succeeded");
9098c5f988SKristof Provost 
9198c5f988SKristof Provost 	/* Overly large size */
9298c5f988SKristof Provost 	io.pfrio_size = 1 << 24;
9398c5f988SKristof Provost 	if (ioctl(dev, DIOCRADDTABLES, &io) == 0)
9498c5f988SKristof Provost 		atf_tc_fail("Request with size 1 << 24 succeeded");
9598c5f988SKristof Provost 
9698c5f988SKristof Provost 	/* NULL buffer */
9798c5f988SKristof Provost 	io.pfrio_size = 1;
9898c5f988SKristof Provost 	io.pfrio_buffer = NULL;
9998c5f988SKristof Provost 	if (ioctl(dev, DIOCRADDTABLES, &io) == 0)
10098c5f988SKristof Provost 		atf_tc_fail("Request with NULL buffer succeeded");
10198c5f988SKristof Provost 
1021bb72c29SKristof Provost 	/* This can provoke a memory leak, see r331225. */
1031bb72c29SKristof Provost 	io.pfrio_size = 4;
1041bb72c29SKristof Provost 	for (int i = 0; i < io.pfrio_size; i++)
1051bb72c29SKristof Provost 		common_init_tbl(&tbls[i]);
1061bb72c29SKristof Provost 
1071bb72c29SKristof Provost 	io.pfrio_buffer = &tbls;
1081bb72c29SKristof Provost 	ioctl(dev, DIOCRADDTABLES, &io);
109*d3cc4030SKristof Provost }
1101bb72c29SKristof Provost 
111*d3cc4030SKristof Provost ATF_TC_CLEANUP(addtables, tc)
112*d3cc4030SKristof Provost {
11398c5f988SKristof Provost 	COMMON_CLEANUP();
11498c5f988SKristof Provost }
11598c5f988SKristof Provost 
116*d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(deltables);
11787c7063cSKristof Provost ATF_TC_HEAD(deltables, tc)
11887c7063cSKristof Provost {
11987c7063cSKristof Provost 	atf_tc_set_md_var(tc, "require.user", "root");
12087c7063cSKristof Provost }
12187c7063cSKristof Provost 
12298c5f988SKristof Provost ATF_TC_BODY(deltables, tc)
12398c5f988SKristof Provost {
12498c5f988SKristof Provost 	struct pfioc_table io;
12598c5f988SKristof Provost 	struct pfr_table tbl;
12698c5f988SKristof Provost 	int flags;
12798c5f988SKristof Provost 
12898c5f988SKristof Provost 	COMMON_HEAD();
12998c5f988SKristof Provost 
13098c5f988SKristof Provost 	flags = 0;
13198c5f988SKristof Provost 
13298c5f988SKristof Provost 	bzero(&io, sizeof(io));
13398c5f988SKristof Provost 	io.pfrio_flags = flags;
13498c5f988SKristof Provost 	io.pfrio_buffer = &tbl;
13598c5f988SKristof Provost 	io.pfrio_esize = sizeof(tbl);
13698c5f988SKristof Provost 
13798c5f988SKristof Provost 	/* Negative size */
13898c5f988SKristof Provost 	io.pfrio_size = -1;
13998c5f988SKristof Provost 	if (ioctl(dev, DIOCRDELTABLES, &io) == 0)
14098c5f988SKristof Provost 		atf_tc_fail("Request with size -1 succeeded");
14198c5f988SKristof Provost 
14298c5f988SKristof Provost 	/* Overly large size */
14398c5f988SKristof Provost 	io.pfrio_size = 1 << 24;
14498c5f988SKristof Provost 	if (ioctl(dev, DIOCRDELTABLES, &io) == 0)
14598c5f988SKristof Provost 		atf_tc_fail("Request with size 1 << 24 succeeded");
14698c5f988SKristof Provost 
14798c5f988SKristof Provost 	/* NULL buffer */
14898c5f988SKristof Provost 	io.pfrio_size = 1;
14998c5f988SKristof Provost 	io.pfrio_buffer = NULL;
15098c5f988SKristof Provost 	if (ioctl(dev, DIOCRDELTABLES, &io) == 0)
15198c5f988SKristof Provost 		atf_tc_fail("Request with NULL buffer succeeded");
152*d3cc4030SKristof Provost }
15398c5f988SKristof Provost 
154*d3cc4030SKristof Provost ATF_TC_CLEANUP(deltables, tc)
155*d3cc4030SKristof Provost {
15698c5f988SKristof Provost 	COMMON_CLEANUP();
15798c5f988SKristof Provost }
15898c5f988SKristof Provost 
159*d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(gettables);
16087c7063cSKristof Provost ATF_TC_HEAD(gettables, tc)
16187c7063cSKristof Provost {
16287c7063cSKristof Provost 	atf_tc_set_md_var(tc, "require.user", "root");
16387c7063cSKristof Provost }
16487c7063cSKristof Provost 
1651ff545d6SKristof Provost ATF_TC_BODY(gettables, tc)
1661ff545d6SKristof Provost {
1671ff545d6SKristof Provost 	struct pfioc_table io;
1681ff545d6SKristof Provost 	struct pfr_table tbl;
1691ff545d6SKristof Provost 	int flags;
1701ff545d6SKristof Provost 
1711ff545d6SKristof Provost 	COMMON_HEAD();
1721ff545d6SKristof Provost 
1731ff545d6SKristof Provost 	flags = 0;
1741ff545d6SKristof Provost 
1751ff545d6SKristof Provost 	bzero(&io, sizeof(io));
1761ff545d6SKristof Provost 	io.pfrio_flags = flags;
1771ff545d6SKristof Provost 	io.pfrio_buffer = &tbl;
1781ff545d6SKristof Provost 	io.pfrio_esize = sizeof(tbl);
1791ff545d6SKristof Provost 
1801ff545d6SKristof Provost 	/* Negative size. This will succeed, because the kernel will not copy
1811ff545d6SKristof Provost 	 * tables than it has. */
1821ff545d6SKristof Provost 	io.pfrio_size = -1;
1831ff545d6SKristof Provost 	if (ioctl(dev, DIOCRGETTABLES, &io) != 0)
1841ff545d6SKristof Provost 		atf_tc_fail("Request with size -1 failed");
1851ff545d6SKristof Provost 
1861ff545d6SKristof Provost 	/* Overly large size. See above. */
1871ff545d6SKristof Provost 	io.pfrio_size = 1 << 24;
1881ff545d6SKristof Provost 	if (ioctl(dev, DIOCRGETTABLES, &io) != 0)
1891ff545d6SKristof Provost 		atf_tc_fail("Request with size 1 << 24 failed");
190*d3cc4030SKristof Provost }
1911ff545d6SKristof Provost 
192*d3cc4030SKristof Provost ATF_TC_CLEANUP(gettables, tc)
193*d3cc4030SKristof Provost {
1941ff545d6SKristof Provost 	COMMON_CLEANUP();
1951ff545d6SKristof Provost }
1961ff545d6SKristof Provost 
197*d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(gettstats);
19887c7063cSKristof Provost ATF_TC_HEAD(gettstats, tc)
19987c7063cSKristof Provost {
20087c7063cSKristof Provost 	atf_tc_set_md_var(tc, "require.user", "root");
20187c7063cSKristof Provost }
20287c7063cSKristof Provost 
2031ff545d6SKristof Provost ATF_TC_BODY(gettstats, tc)
2041ff545d6SKristof Provost {
2051ff545d6SKristof Provost 	struct pfioc_table io;
2061ff545d6SKristof Provost 	struct pfr_tstats stats;
2071ff545d6SKristof Provost 	int flags;
2081ff545d6SKristof Provost 
2091ff545d6SKristof Provost 	COMMON_HEAD();
2101ff545d6SKristof Provost 
2111ff545d6SKristof Provost 	flags = 0;
2121ff545d6SKristof Provost 
2131ff545d6SKristof Provost 	bzero(&io, sizeof(io));
2141ff545d6SKristof Provost 	io.pfrio_flags = flags;
2151ff545d6SKristof Provost 	io.pfrio_buffer = &stats;
2161ff545d6SKristof Provost 	io.pfrio_esize = sizeof(stats);
2171ff545d6SKristof Provost 
2181ff545d6SKristof Provost 	/* Negative size. This will succeed, because the kernel will not copy
2191ff545d6SKristof Provost 	 * tables than it has. */
2201ff545d6SKristof Provost 	io.pfrio_size = -1;
2211ff545d6SKristof Provost 	if (ioctl(dev, DIOCRGETTSTATS, &io) != 0)
2221ff545d6SKristof Provost 		atf_tc_fail("Request with size -1 failed");
2231ff545d6SKristof Provost 
2241ff545d6SKristof Provost 	/* Overly large size. See above. */
2251ff545d6SKristof Provost 	io.pfrio_size = 1 << 24;
2261ff545d6SKristof Provost 	if (ioctl(dev, DIOCRGETTSTATS, &io) != 0)
2271ff545d6SKristof Provost 		atf_tc_fail("Request with size 1 << 24 failed");
228*d3cc4030SKristof Provost }
2291ff545d6SKristof Provost 
230*d3cc4030SKristof Provost ATF_TC_CLEANUP(gettstats, tc)
231*d3cc4030SKristof Provost {
2321ff545d6SKristof Provost 	COMMON_CLEANUP();
2331ff545d6SKristof Provost }
2341ff545d6SKristof Provost 
235*d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(clrtstats);
23687c7063cSKristof Provost ATF_TC_HEAD(clrtstats, tc)
23787c7063cSKristof Provost {
23887c7063cSKristof Provost 	atf_tc_set_md_var(tc, "require.user", "root");
23987c7063cSKristof Provost }
24087c7063cSKristof Provost 
2411ff545d6SKristof Provost ATF_TC_BODY(clrtstats, tc)
2421ff545d6SKristof Provost {
2431ff545d6SKristof Provost 	struct pfioc_table io;
2441ff545d6SKristof Provost 	struct pfr_table tbl;
2451ff545d6SKristof Provost 	int flags;
2461ff545d6SKristof Provost 
2471ff545d6SKristof Provost 	COMMON_HEAD();
2481ff545d6SKristof Provost 
2491ff545d6SKristof Provost 	flags = 0;
2501ff545d6SKristof Provost 
2511ff545d6SKristof Provost 	common_init_tbl(&tbl);
2521ff545d6SKristof Provost 
2531ff545d6SKristof Provost 	bzero(&io, sizeof(io));
2541ff545d6SKristof Provost 	io.pfrio_flags = flags;
2551ff545d6SKristof Provost 	io.pfrio_buffer = &tbl;
2561ff545d6SKristof Provost 	io.pfrio_esize = sizeof(tbl);
2571ff545d6SKristof Provost 
2581ff545d6SKristof Provost 	/* Negative size. This will succeed, because the kernel will not copy
2591ff545d6SKristof Provost 	 * tables than it has. */
2601ff545d6SKristof Provost 	io.pfrio_size = -1;
2611ff545d6SKristof Provost 	if (ioctl(dev, DIOCRCLRTSTATS, &io) != 0)
2621ff545d6SKristof Provost 		atf_tc_fail("Request with size -1 failed ");
2631ff545d6SKristof Provost 
2641ff545d6SKristof Provost 	/* Overly large size. See above. */
2651ff545d6SKristof Provost 	io.pfrio_size = 1 << 24;
2661ff545d6SKristof Provost 	if (ioctl(dev, DIOCRCLRTSTATS, &io) != 0)
2671ff545d6SKristof Provost 		atf_tc_fail("Request with size 1 << 24 failed");
268*d3cc4030SKristof Provost }
2691ff545d6SKristof Provost 
270*d3cc4030SKristof Provost ATF_TC_CLEANUP(clrtstats, tc)
271*d3cc4030SKristof Provost {
2721ff545d6SKristof Provost 	COMMON_CLEANUP();
2731ff545d6SKristof Provost }
2741ff545d6SKristof Provost 
275*d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(settflags);
27687c7063cSKristof Provost ATF_TC_HEAD(settflags, tc)
27787c7063cSKristof Provost {
27887c7063cSKristof Provost 	atf_tc_set_md_var(tc, "require.user", "root");
27987c7063cSKristof Provost }
28087c7063cSKristof Provost 
2811ff545d6SKristof Provost ATF_TC_BODY(settflags, tc)
2821ff545d6SKristof Provost {
2831ff545d6SKristof Provost 	struct pfioc_table io;
2841ff545d6SKristof Provost 	struct pfr_table tbl;
2851ff545d6SKristof Provost 	int flags;
2861ff545d6SKristof Provost 
2871ff545d6SKristof Provost 	COMMON_HEAD();
2881ff545d6SKristof Provost 
2891ff545d6SKristof Provost 	flags = 0;
2901ff545d6SKristof Provost 
2911ff545d6SKristof Provost 	common_init_tbl(&tbl);
2921ff545d6SKristof Provost 
2931ff545d6SKristof Provost 	bzero(&io, sizeof(io));
2941ff545d6SKristof Provost 	io.pfrio_flags = flags;
2951ff545d6SKristof Provost 	io.pfrio_buffer = &tbl;
2961ff545d6SKristof Provost 	io.pfrio_esize = sizeof(tbl);
2971ff545d6SKristof Provost 
2981ff545d6SKristof Provost 	/* Negative size. This will succeed, because the kernel will not copy
2991ff545d6SKristof Provost 	 * tables than it has. */
3001ff545d6SKristof Provost 	io.pfrio_size = -1;
3011ff545d6SKristof Provost 	if (ioctl(dev, DIOCRSETTFLAGS, &io) != 0)
3021ff545d6SKristof Provost 		atf_tc_fail("Request with size -1 failed");
3031ff545d6SKristof Provost 
3041ff545d6SKristof Provost 	/* Overly large size. See above. */
3051ff545d6SKristof Provost 	io.pfrio_size = 1 << 28;
3061ff545d6SKristof Provost 	if (ioctl(dev, DIOCRSETTFLAGS, &io) != 0)
3071ff545d6SKristof Provost 		atf_tc_fail("Request with size 1 << 24 failed");
308*d3cc4030SKristof Provost }
3091ff545d6SKristof Provost 
310*d3cc4030SKristof Provost ATF_TC_CLEANUP(settflags, tc)
311*d3cc4030SKristof Provost {
3121ff545d6SKristof Provost 	COMMON_CLEANUP();
3131ff545d6SKristof Provost }
3141ff545d6SKristof Provost 
315*d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(addaddrs);
31687c7063cSKristof Provost ATF_TC_HEAD(addaddrs, tc)
31787c7063cSKristof Provost {
31887c7063cSKristof Provost 	atf_tc_set_md_var(tc, "require.user", "root");
31987c7063cSKristof Provost }
32087c7063cSKristof Provost 
32162d28676SKristof Provost ATF_TC_BODY(addaddrs, tc)
32262d28676SKristof Provost {
32362d28676SKristof Provost 	struct pfioc_table io;
32462d28676SKristof Provost 	struct pfr_addr addr;
32562d28676SKristof Provost 
32662d28676SKristof Provost 	COMMON_HEAD();
32762d28676SKristof Provost 
32862d28676SKristof Provost 	bzero(&addr, sizeof(addr));
32962d28676SKristof Provost 	bzero(&io, sizeof(io));
33062d28676SKristof Provost 	io.pfrio_flags = 0;
33162d28676SKristof Provost 	io.pfrio_buffer = &addr;
33262d28676SKristof Provost 	io.pfrio_esize = sizeof(addr);
33362d28676SKristof Provost 
33462d28676SKristof Provost 	/* Negative size. */
33562d28676SKristof Provost 	io.pfrio_size = -1;
33662d28676SKristof Provost 	if (ioctl(dev, DIOCRADDADDRS, &io) == 0)
33762d28676SKristof Provost 		atf_tc_fail("Request with size -1 succeeded");
33862d28676SKristof Provost 
33962d28676SKristof Provost 	/* Overly large size. */
34062d28676SKristof Provost 	io.pfrio_size = 1 << 28;
34162d28676SKristof Provost 	if (ioctl(dev, DIOCRADDADDRS, &io) == 0)
34262d28676SKristof Provost 		atf_tc_fail("Reuqest with size 1 << 28 failed");
343*d3cc4030SKristof Provost }
34462d28676SKristof Provost 
345*d3cc4030SKristof Provost ATF_TC_CLEANUP(addaddrs, tc)
346*d3cc4030SKristof Provost {
34762d28676SKristof Provost 	COMMON_CLEANUP();
34862d28676SKristof Provost }
34962d28676SKristof Provost 
350*d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(deladdrs);
35187c7063cSKristof Provost ATF_TC_HEAD(deladdrs, tc)
35287c7063cSKristof Provost {
35387c7063cSKristof Provost 	atf_tc_set_md_var(tc, "require.user", "root");
35487c7063cSKristof Provost }
35587c7063cSKristof Provost 
35662d28676SKristof Provost ATF_TC_BODY(deladdrs, tc)
35762d28676SKristof Provost {
35862d28676SKristof Provost 	struct pfioc_table io;
35962d28676SKristof Provost 	struct pfr_addr addr;
36062d28676SKristof Provost 
36162d28676SKristof Provost 	COMMON_HEAD();
36262d28676SKristof Provost 
36362d28676SKristof Provost 	bzero(&addr, sizeof(addr));
36462d28676SKristof Provost 	bzero(&io, sizeof(io));
36562d28676SKristof Provost 	io.pfrio_flags = 0;
36662d28676SKristof Provost 	io.pfrio_buffer = &addr;
36762d28676SKristof Provost 	io.pfrio_esize = sizeof(addr);
36862d28676SKristof Provost 
36962d28676SKristof Provost 	/* Negative size. */
37062d28676SKristof Provost 	io.pfrio_size = -1;
37162d28676SKristof Provost 	if (ioctl(dev, DIOCRDELADDRS, &io) == 0)
37262d28676SKristof Provost 		atf_tc_fail("Request with size -1 succeeded");
37362d28676SKristof Provost 
37462d28676SKristof Provost 	/* Overly large size. */
37562d28676SKristof Provost 	io.pfrio_size = 1 << 28;
37662d28676SKristof Provost 	if (ioctl(dev, DIOCRDELADDRS, &io) == 0)
37762d28676SKristof Provost 		atf_tc_fail("Reuqest with size 1 << 28 failed");
378*d3cc4030SKristof Provost }
37962d28676SKristof Provost 
380*d3cc4030SKristof Provost ATF_TC_CLEANUP(deladdrs, tc)
381*d3cc4030SKristof Provost {
38262d28676SKristof Provost 	COMMON_CLEANUP();
38362d28676SKristof Provost }
38462d28676SKristof Provost 
385*d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(setaddrs);
38687c7063cSKristof Provost ATF_TC_HEAD(setaddrs, tc)
38787c7063cSKristof Provost {
38887c7063cSKristof Provost 	atf_tc_set_md_var(tc, "require.user", "root");
38987c7063cSKristof Provost }
39087c7063cSKristof Provost 
39162d28676SKristof Provost ATF_TC_BODY(setaddrs, tc)
39262d28676SKristof Provost {
39362d28676SKristof Provost 	struct pfioc_table io;
39462d28676SKristof Provost 	struct pfr_addr addr;
39562d28676SKristof Provost 
39662d28676SKristof Provost 	COMMON_HEAD();
39762d28676SKristof Provost 
39862d28676SKristof Provost 	bzero(&addr, sizeof(addr));
39962d28676SKristof Provost 	bzero(&io, sizeof(io));
40062d28676SKristof Provost 	io.pfrio_flags = 0;
40162d28676SKristof Provost 	io.pfrio_buffer = &addr;
40262d28676SKristof Provost 	io.pfrio_esize = sizeof(addr);
40362d28676SKristof Provost 
40462d28676SKristof Provost 	/* Negative size. */
40562d28676SKristof Provost 	io.pfrio_size = -1;
40662d28676SKristof Provost 	if (ioctl(dev, DIOCRSETADDRS, &io) == 0)
40762d28676SKristof Provost 		atf_tc_fail("Request with size -1 succeeded");
40862d28676SKristof Provost 
40962d28676SKristof Provost 	/* Overly large size. */
41062d28676SKristof Provost 	io.pfrio_size = 1 << 28;
41162d28676SKristof Provost 	if (ioctl(dev, DIOCRSETADDRS, &io) == 0)
41262d28676SKristof Provost 		atf_tc_fail("Reuqest with size 1 << 28 failed");
413*d3cc4030SKristof Provost }
41462d28676SKristof Provost 
415*d3cc4030SKristof Provost ATF_TC_CLEANUP(setaddrs, tc)
416*d3cc4030SKristof Provost {
41762d28676SKristof Provost 	COMMON_CLEANUP();
41862d28676SKristof Provost }
41962d28676SKristof Provost 
420*d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(getaddrs);
42187c7063cSKristof Provost ATF_TC_HEAD(getaddrs, tc)
42287c7063cSKristof Provost {
42387c7063cSKristof Provost 	atf_tc_set_md_var(tc, "require.user", "root");
42487c7063cSKristof Provost }
42587c7063cSKristof Provost 
42662d28676SKristof Provost ATF_TC_BODY(getaddrs, tc)
42762d28676SKristof Provost {
42862d28676SKristof Provost 	struct pfioc_table io;
42962d28676SKristof Provost 	struct pfr_addr addr;
43062d28676SKristof Provost 
43162d28676SKristof Provost 	COMMON_HEAD();
43262d28676SKristof Provost 
43362d28676SKristof Provost 	bzero(&addr, sizeof(addr));
43462d28676SKristof Provost 	bzero(&io, sizeof(io));
43562d28676SKristof Provost 	io.pfrio_flags = 0;
43662d28676SKristof Provost 	io.pfrio_buffer = &addr;
43762d28676SKristof Provost 	io.pfrio_esize = sizeof(addr);
43862d28676SKristof Provost 
43962d28676SKristof Provost 	common_init_tbl(&io.pfrio_table);
44062d28676SKristof Provost 
44162d28676SKristof Provost 	/* Negative size. */
44262d28676SKristof Provost 	io.pfrio_size = -1;
44362d28676SKristof Provost 	if (ioctl(dev, DIOCRGETADDRS, &io) == 0)
44462d28676SKristof Provost 		atf_tc_fail("Request with size -1 succeeded");
44562d28676SKristof Provost 
44662d28676SKristof Provost 	/* Overly large size. */
44762d28676SKristof Provost 	io.pfrio_size = 1 << 24;
44862d28676SKristof Provost 	if (ioctl(dev, DIOCRGETADDRS, &io) == 0)
44962d28676SKristof Provost 		atf_tc_fail("Request with size 1 << 24 failed");
450*d3cc4030SKristof Provost }
45162d28676SKristof Provost 
452*d3cc4030SKristof Provost ATF_TC_CLEANUP(getaddrs, tc)
453*d3cc4030SKristof Provost {
45462d28676SKristof Provost 	COMMON_CLEANUP();
45562d28676SKristof Provost }
45662d28676SKristof Provost 
457*d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(getastats);
45887c7063cSKristof Provost ATF_TC_HEAD(getastats, tc)
45987c7063cSKristof Provost {
46087c7063cSKristof Provost 	atf_tc_set_md_var(tc, "require.user", "root");
46187c7063cSKristof Provost }
46287c7063cSKristof Provost 
46362d28676SKristof Provost ATF_TC_BODY(getastats, tc)
46462d28676SKristof Provost {
46562d28676SKristof Provost 	struct pfioc_table io;
46662d28676SKristof Provost 	struct pfr_astats astats;
46762d28676SKristof Provost 
46862d28676SKristof Provost 	COMMON_HEAD();
46962d28676SKristof Provost 
47062d28676SKristof Provost 	bzero(&astats, sizeof(astats));
47162d28676SKristof Provost 	bzero(&io, sizeof(io));
47262d28676SKristof Provost 	io.pfrio_flags = 0;
47362d28676SKristof Provost 	io.pfrio_buffer = &astats;
47462d28676SKristof Provost 	io.pfrio_esize = sizeof(astats);
47562d28676SKristof Provost 
47662d28676SKristof Provost 	common_init_tbl(&io.pfrio_table);
47762d28676SKristof Provost 
47862d28676SKristof Provost 	/* Negative size. */
47962d28676SKristof Provost 	io.pfrio_size = -1;
48062d28676SKristof Provost 	if (ioctl(dev, DIOCRGETASTATS, &io) == 0)
48162d28676SKristof Provost 		atf_tc_fail("Request with size -1 succeeded");
48262d28676SKristof Provost 
48362d28676SKristof Provost 	/* Overly large size. */
48462d28676SKristof Provost 	io.pfrio_size = 1 << 24;
48562d28676SKristof Provost 	if (ioctl(dev, DIOCRGETASTATS, &io) == 0)
48662d28676SKristof Provost 		atf_tc_fail("Request with size 1 << 24 failed");
487*d3cc4030SKristof Provost }
48862d28676SKristof Provost 
489*d3cc4030SKristof Provost ATF_TC_CLEANUP(getastats, tc)
490*d3cc4030SKristof Provost {
49162d28676SKristof Provost 	COMMON_CLEANUP();
49262d28676SKristof Provost }
49362d28676SKristof Provost 
494*d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(clrastats);
49587c7063cSKristof Provost ATF_TC_HEAD(clrastats, tc)
49687c7063cSKristof Provost {
49787c7063cSKristof Provost 	atf_tc_set_md_var(tc, "require.user", "root");
49887c7063cSKristof Provost }
49987c7063cSKristof Provost 
50062d28676SKristof Provost ATF_TC_BODY(clrastats, tc)
50162d28676SKristof Provost {
50262d28676SKristof Provost 	struct pfioc_table io;
50362d28676SKristof Provost 	struct pfr_addr addr;
50462d28676SKristof Provost 
50562d28676SKristof Provost 	COMMON_HEAD();
50662d28676SKristof Provost 
50762d28676SKristof Provost 	bzero(&addr, sizeof(addr));
50862d28676SKristof Provost 	bzero(&io, sizeof(io));
50962d28676SKristof Provost 	io.pfrio_flags = 0;
51062d28676SKristof Provost 	io.pfrio_buffer = &addr;
51162d28676SKristof Provost 	io.pfrio_esize = sizeof(addr);
51262d28676SKristof Provost 
51362d28676SKristof Provost 	common_init_tbl(&io.pfrio_table);
51462d28676SKristof Provost 
51562d28676SKristof Provost 	/* Negative size. */
51662d28676SKristof Provost 	io.pfrio_size = -1;
51762d28676SKristof Provost 	if (ioctl(dev, DIOCRCLRASTATS, &io) == 0)
51862d28676SKristof Provost 		atf_tc_fail("Request with size -1 succeeded");
51962d28676SKristof Provost 
52062d28676SKristof Provost 	/* Overly large size. */
52162d28676SKristof Provost 	io.pfrio_size = 1 << 24;
52262d28676SKristof Provost 	if (ioctl(dev, DIOCRCLRASTATS, &io) == 0)
52362d28676SKristof Provost 		atf_tc_fail("Request with size 1 << 24 failed");
524*d3cc4030SKristof Provost }
52562d28676SKristof Provost 
526*d3cc4030SKristof Provost ATF_TC_CLEANUP(clrastats, tc)
527*d3cc4030SKristof Provost {
52862d28676SKristof Provost 	COMMON_CLEANUP();
52962d28676SKristof Provost }
53062d28676SKristof Provost 
531*d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(tstaddrs);
53287c7063cSKristof Provost ATF_TC_HEAD(tstaddrs, tc)
53387c7063cSKristof Provost {
53487c7063cSKristof Provost 	atf_tc_set_md_var(tc, "require.user", "root");
53587c7063cSKristof Provost }
53687c7063cSKristof Provost 
53762d28676SKristof Provost ATF_TC_BODY(tstaddrs, tc)
53862d28676SKristof Provost {
53962d28676SKristof Provost 	struct pfioc_table io;
54062d28676SKristof Provost 	struct pfr_addr addr;
54162d28676SKristof Provost 
54262d28676SKristof Provost 	COMMON_HEAD();
54362d28676SKristof Provost 
54462d28676SKristof Provost 	bzero(&addr, sizeof(addr));
54562d28676SKristof Provost 	bzero(&io, sizeof(io));
54662d28676SKristof Provost 	io.pfrio_flags = 0;
54762d28676SKristof Provost 	io.pfrio_buffer = &addr;
54862d28676SKristof Provost 	io.pfrio_esize = sizeof(addr);
54962d28676SKristof Provost 
55062d28676SKristof Provost 	common_init_tbl(&io.pfrio_table);
55162d28676SKristof Provost 
55262d28676SKristof Provost 	/* Negative size. */
55362d28676SKristof Provost 	io.pfrio_size = -1;
55462d28676SKristof Provost 	if (ioctl(dev, DIOCRTSTADDRS, &io) == 0)
55562d28676SKristof Provost 		atf_tc_fail("Request with size -1 succeeded");
55662d28676SKristof Provost 
55762d28676SKristof Provost 	/* Overly large size. */
55862d28676SKristof Provost 	io.pfrio_size = 1 << 24;
55962d28676SKristof Provost 	if (ioctl(dev, DIOCRTSTADDRS, &io) == 0)
56062d28676SKristof Provost 		atf_tc_fail("Request with size 1 << 24 failed");
561*d3cc4030SKristof Provost }
56262d28676SKristof Provost 
563*d3cc4030SKristof Provost ATF_TC_CLEANUP(tstaddrs, tc)
564*d3cc4030SKristof Provost {
56562d28676SKristof Provost 	COMMON_CLEANUP();
56662d28676SKristof Provost }
56762d28676SKristof Provost 
568*d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(inadefine);
56987c7063cSKristof Provost ATF_TC_HEAD(inadefine, tc)
57087c7063cSKristof Provost {
57187c7063cSKristof Provost 	atf_tc_set_md_var(tc, "require.user", "root");
57287c7063cSKristof Provost }
57387c7063cSKristof Provost 
57462d28676SKristof Provost ATF_TC_BODY(inadefine, tc)
57562d28676SKristof Provost {
57662d28676SKristof Provost 	struct pfioc_table io;
57762d28676SKristof Provost 	struct pfr_addr addr;
57862d28676SKristof Provost 
57962d28676SKristof Provost 	COMMON_HEAD();
58062d28676SKristof Provost 
58162d28676SKristof Provost 	bzero(&addr, sizeof(addr));
58262d28676SKristof Provost 	bzero(&io, sizeof(io));
58362d28676SKristof Provost 	io.pfrio_flags = 0;
58462d28676SKristof Provost 	io.pfrio_buffer = &addr;
58562d28676SKristof Provost 	io.pfrio_esize = sizeof(addr);
58662d28676SKristof Provost 
58762d28676SKristof Provost 	common_init_tbl(&io.pfrio_table);
58862d28676SKristof Provost 
58962d28676SKristof Provost 	/* Negative size. */
59062d28676SKristof Provost 	io.pfrio_size = -1;
59162d28676SKristof Provost 	if (ioctl(dev, DIOCRINADEFINE, &io) == 0)
59262d28676SKristof Provost 		atf_tc_fail("Request with size -1 succeeded");
59362d28676SKristof Provost 
59462d28676SKristof Provost 	/* Overly large size. */
59562d28676SKristof Provost 	io.pfrio_size = 1 << 24;
59662d28676SKristof Provost 	if (ioctl(dev, DIOCRINADEFINE, &io) == 0)
59762d28676SKristof Provost 		atf_tc_fail("Request with size 1 << 24 failed");
598*d3cc4030SKristof Provost }
59962d28676SKristof Provost 
600*d3cc4030SKristof Provost ATF_TC_CLEANUP(inadefine, tc)
601*d3cc4030SKristof Provost {
60262d28676SKristof Provost 	COMMON_CLEANUP();
60362d28676SKristof Provost }
60462d28676SKristof Provost 
605*d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(igetifaces);
60687c7063cSKristof Provost ATF_TC_HEAD(igetifaces, tc)
60787c7063cSKristof Provost {
60887c7063cSKristof Provost 	atf_tc_set_md_var(tc, "require.user", "root");
60987c7063cSKristof Provost }
61087c7063cSKristof Provost 
6118e748b94SKristof Provost ATF_TC_BODY(igetifaces, tc)
6128e748b94SKristof Provost {
6138e748b94SKristof Provost 	struct pfioc_iface io;
6148e748b94SKristof Provost 	struct pfi_kif kif;
6158e748b94SKristof Provost 
6168e748b94SKristof Provost 	COMMON_HEAD();
6178e748b94SKristof Provost 
6188e748b94SKristof Provost 	bzero(&io, sizeof(io));
6198e748b94SKristof Provost 	io.pfiio_flags = 0;
6208e748b94SKristof Provost 	io.pfiio_buffer = &kif;
6218e748b94SKristof Provost 	io.pfiio_esize = sizeof(kif);
6228e748b94SKristof Provost 
6238e748b94SKristof Provost 	/* Negative size */
6248e748b94SKristof Provost 	io.pfiio_size = -1;
6258e748b94SKristof Provost 	if (ioctl(dev, DIOCIGETIFACES, &io) == 0)
6268e748b94SKristof Provost 		atf_tc_fail("request with size -1 succeeded");
6278e748b94SKristof Provost 
6288e748b94SKristof Provost 	/* Overflow size */
6298e748b94SKristof Provost 	io.pfiio_size = 1 << 31;
6308e748b94SKristof Provost 	if (ioctl(dev, DIOCIGETIFACES, &io) == 0)
6318e748b94SKristof Provost 		atf_tc_fail("request with size 1 << 31 succeeded");
632*d3cc4030SKristof Provost }
6338e748b94SKristof Provost 
634*d3cc4030SKristof Provost ATF_TC_CLEANUP(igetifaces, tc)
635*d3cc4030SKristof Provost {
6368e748b94SKristof Provost 	COMMON_CLEANUP();
6378e748b94SKristof Provost }
6388e748b94SKristof Provost 
639*d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(cxbegin);
64087c7063cSKristof Provost ATF_TC_HEAD(cxbegin, tc)
64187c7063cSKristof Provost {
64287c7063cSKristof Provost 	atf_tc_set_md_var(tc, "require.user", "root");
64387c7063cSKristof Provost }
64487c7063cSKristof Provost 
64562d28676SKristof Provost ATF_TC_BODY(cxbegin, tc)
64662d28676SKristof Provost {
64762d28676SKristof Provost 	struct pfioc_trans io;
64862d28676SKristof Provost 	struct pfioc_trans_e ioe;
64962d28676SKristof Provost 
65062d28676SKristof Provost 	COMMON_HEAD();
65162d28676SKristof Provost 
65262d28676SKristof Provost 	bzero(&io, sizeof(io));
65362d28676SKristof Provost 	io.esize = sizeof(ioe);
65462d28676SKristof Provost 	io.array = &ioe;
65562d28676SKristof Provost 
65662d28676SKristof Provost 	/* Negative size */
65762d28676SKristof Provost 	io.size = -1;
65862d28676SKristof Provost 	if (ioctl(dev, DIOCXBEGIN, &io) == 0)
65962d28676SKristof Provost 		atf_tc_fail("request with size -1 succeeded");
66062d28676SKristof Provost 
66162d28676SKristof Provost 	/* Overflow size */
66262d28676SKristof Provost 	io.size = 1 << 30;
66362d28676SKristof Provost 	if (ioctl(dev, DIOCXBEGIN, &io) == 0)
66462d28676SKristof Provost 		atf_tc_fail("request with size 1 << 30 succeeded");
66562d28676SKristof Provost 
66662d28676SKristof Provost 	/* NULL buffer */
66762d28676SKristof Provost 	io.size = 1;
66862d28676SKristof Provost 	io.array = NULL;
66962d28676SKristof Provost 	if (ioctl(dev, DIOCXBEGIN, &io) == 0)
67062d28676SKristof Provost 		atf_tc_fail("request with size -1 succeeded");
671*d3cc4030SKristof Provost }
67262d28676SKristof Provost 
673*d3cc4030SKristof Provost ATF_TC_CLEANUP(cxbegin, tc)
674*d3cc4030SKristof Provost {
67562d28676SKristof Provost 	COMMON_CLEANUP();
67662d28676SKristof Provost }
67762d28676SKristof Provost 
678*d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(cxrollback);
67987c7063cSKristof Provost ATF_TC_HEAD(cxrollback, tc)
68087c7063cSKristof Provost {
68187c7063cSKristof Provost 	atf_tc_set_md_var(tc, "require.user", "root");
68287c7063cSKristof Provost }
68387c7063cSKristof Provost 
68462d28676SKristof Provost ATF_TC_BODY(cxrollback, tc)
68562d28676SKristof Provost {
68662d28676SKristof Provost 	struct pfioc_trans io;
68762d28676SKristof Provost 	struct pfioc_trans_e ioe;
68862d28676SKristof Provost 
68962d28676SKristof Provost 	COMMON_HEAD();
69062d28676SKristof Provost 
69162d28676SKristof Provost 	bzero(&io, sizeof(io));
69262d28676SKristof Provost 	io.esize = sizeof(ioe);
69362d28676SKristof Provost 	io.array = &ioe;
69462d28676SKristof Provost 
69562d28676SKristof Provost 	/* Negative size */
69662d28676SKristof Provost 	io.size = -1;
69762d28676SKristof Provost 	if (ioctl(dev, DIOCXROLLBACK, &io) == 0)
69862d28676SKristof Provost 		atf_tc_fail("request with size -1 succeeded");
69962d28676SKristof Provost 
70062d28676SKristof Provost 	/* Overflow size */
70162d28676SKristof Provost 	io.size = 1 << 30;
70262d28676SKristof Provost 	if (ioctl(dev, DIOCXROLLBACK, &io) == 0)
70362d28676SKristof Provost 		atf_tc_fail("request with size 1 << 30 succeeded");
70462d28676SKristof Provost 
70562d28676SKristof Provost 	/* NULL buffer */
70662d28676SKristof Provost 	io.size = 1;
70762d28676SKristof Provost 	io.array = NULL;
70862d28676SKristof Provost 	if (ioctl(dev, DIOCXROLLBACK, &io) == 0)
70962d28676SKristof Provost 		atf_tc_fail("request with size -1 succeeded");
710*d3cc4030SKristof Provost }
71162d28676SKristof Provost 
712*d3cc4030SKristof Provost ATF_TC_CLEANUP(cxrollback, tc)
713*d3cc4030SKristof Provost {
71462d28676SKristof Provost 	COMMON_CLEANUP();
71562d28676SKristof Provost }
71662d28676SKristof Provost 
717*d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(commit);
71887c7063cSKristof Provost ATF_TC_HEAD(commit, tc)
71987c7063cSKristof Provost {
72087c7063cSKristof Provost 	atf_tc_set_md_var(tc, "require.user", "root");
72187c7063cSKristof Provost }
72287c7063cSKristof Provost 
7238e748b94SKristof Provost ATF_TC_BODY(commit, tc)
7248e748b94SKristof Provost {
7258e748b94SKristof Provost 	struct pfioc_trans io;
7268e748b94SKristof Provost 	struct pfioc_trans_e ioe;
7278e748b94SKristof Provost 
7288e748b94SKristof Provost 	COMMON_HEAD();
7298e748b94SKristof Provost 
7308e748b94SKristof Provost 	bzero(&io, sizeof(io));
7318e748b94SKristof Provost 	io.esize = sizeof(ioe);
7328e748b94SKristof Provost 	io.array = &ioe;
7338e748b94SKristof Provost 
7348e748b94SKristof Provost 	/* Negative size */
7358e748b94SKristof Provost 	io.size = -1;
7368e748b94SKristof Provost 	if (ioctl(dev, DIOCXCOMMIT, &io) == 0)
7378e748b94SKristof Provost 		atf_tc_fail("request with size -1 succeeded");
7388e748b94SKristof Provost 
7398e748b94SKristof Provost 	/* Overflow size */
7408e748b94SKristof Provost 	io.size = 1 << 30;
7418e748b94SKristof Provost 	if (ioctl(dev, DIOCXCOMMIT, &io) == 0)
7428e748b94SKristof Provost 		atf_tc_fail("request with size 1 << 30 succeeded");
7438e748b94SKristof Provost 
7448e748b94SKristof Provost 	/* NULL buffer */
7458e748b94SKristof Provost 	io.size = 1;
7468e748b94SKristof Provost 	io.array = NULL;
7478e748b94SKristof Provost 	if (ioctl(dev, DIOCXCOMMIT, &io) == 0)
7488e748b94SKristof Provost 		atf_tc_fail("request with size -1 succeeded");
749*d3cc4030SKristof Provost }
7508e748b94SKristof Provost 
751*d3cc4030SKristof Provost ATF_TC_CLEANUP(commit, tc)
752*d3cc4030SKristof Provost {
7538e748b94SKristof Provost 	COMMON_CLEANUP();
7548e748b94SKristof Provost }
7558e748b94SKristof Provost 
75698c5f988SKristof Provost ATF_TP_ADD_TCS(tp)
75798c5f988SKristof Provost {
75898c5f988SKristof Provost 	ATF_TP_ADD_TC(tp, addtables);
75998c5f988SKristof Provost 	ATF_TP_ADD_TC(tp, deltables);
7601ff545d6SKristof Provost 	ATF_TP_ADD_TC(tp, gettables);
7611ff545d6SKristof Provost 	ATF_TP_ADD_TC(tp, gettstats);
7621ff545d6SKristof Provost 	ATF_TP_ADD_TC(tp, clrtstats);
7631ff545d6SKristof Provost 	ATF_TP_ADD_TC(tp, settflags);
76462d28676SKristof Provost 	ATF_TP_ADD_TC(tp, addaddrs);
76562d28676SKristof Provost 	ATF_TP_ADD_TC(tp, deladdrs);
76662d28676SKristof Provost 	ATF_TP_ADD_TC(tp, setaddrs);
76762d28676SKristof Provost 	ATF_TP_ADD_TC(tp, getaddrs);
76862d28676SKristof Provost 	ATF_TP_ADD_TC(tp, clrastats);
76962d28676SKristof Provost 	ATF_TP_ADD_TC(tp, tstaddrs);
77062d28676SKristof Provost 	ATF_TP_ADD_TC(tp, inadefine);
7718e748b94SKristof Provost 	ATF_TP_ADD_TC(tp, igetifaces);
77262d28676SKristof Provost 	ATF_TP_ADD_TC(tp, cxbegin);
77362d28676SKristof Provost 	ATF_TP_ADD_TC(tp, cxrollback);
7748e748b94SKristof Provost 	ATF_TP_ADD_TC(tp, commit);
77598c5f988SKristof Provost 
77698c5f988SKristof Provost 	return (atf_no_error());
77798c5f988SKristof Provost }
778