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 541d2e31afSKyle Evans static 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 64d3cc4030SKristof 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); 109d3cc4030SKristof Provost } 1101bb72c29SKristof Provost 111d3cc4030SKristof Provost ATF_TC_CLEANUP(addtables, tc) 112d3cc4030SKristof Provost { 11398c5f988SKristof Provost COMMON_CLEANUP(); 11498c5f988SKristof Provost } 11598c5f988SKristof Provost 116d3cc4030SKristof 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"); 152d3cc4030SKristof Provost } 15398c5f988SKristof Provost 154d3cc4030SKristof Provost ATF_TC_CLEANUP(deltables, tc) 155d3cc4030SKristof Provost { 15698c5f988SKristof Provost COMMON_CLEANUP(); 15798c5f988SKristof Provost } 15898c5f988SKristof Provost 159d3cc4030SKristof 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"); 190d3cc4030SKristof Provost } 1911ff545d6SKristof Provost 192d3cc4030SKristof Provost ATF_TC_CLEANUP(gettables, tc) 193d3cc4030SKristof Provost { 1941ff545d6SKristof Provost COMMON_CLEANUP(); 1951ff545d6SKristof Provost } 1961ff545d6SKristof Provost 197d3cc4030SKristof 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"); 228d3cc4030SKristof Provost } 2291ff545d6SKristof Provost 230d3cc4030SKristof Provost ATF_TC_CLEANUP(gettstats, tc) 231d3cc4030SKristof Provost { 2321ff545d6SKristof Provost COMMON_CLEANUP(); 2331ff545d6SKristof Provost } 2341ff545d6SKristof Provost 235d3cc4030SKristof 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"); 268d3cc4030SKristof Provost } 2691ff545d6SKristof Provost 270d3cc4030SKristof Provost ATF_TC_CLEANUP(clrtstats, tc) 271d3cc4030SKristof Provost { 2721ff545d6SKristof Provost COMMON_CLEANUP(); 2731ff545d6SKristof Provost } 2741ff545d6SKristof Provost 275d3cc4030SKristof 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"); 308246e18b2SKristof Provost 309246e18b2SKristof Provost /* NULL buffer */ 310246e18b2SKristof Provost io.pfrio_buffer = NULL; 311246e18b2SKristof Provost if (ioctl(dev, DIOCRSETTFLAGS, &io) != -1) 312246e18b2SKristof Provost atf_tc_fail("Request with NULL buffer succeeded"); 313d3cc4030SKristof Provost } 3141ff545d6SKristof Provost 315d3cc4030SKristof Provost ATF_TC_CLEANUP(settflags, tc) 316d3cc4030SKristof Provost { 3171ff545d6SKristof Provost COMMON_CLEANUP(); 3181ff545d6SKristof Provost } 3191ff545d6SKristof Provost 320d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(addaddrs); 32187c7063cSKristof Provost ATF_TC_HEAD(addaddrs, tc) 32287c7063cSKristof Provost { 32387c7063cSKristof Provost atf_tc_set_md_var(tc, "require.user", "root"); 32487c7063cSKristof Provost } 32587c7063cSKristof Provost 32662d28676SKristof Provost ATF_TC_BODY(addaddrs, tc) 32762d28676SKristof Provost { 32862d28676SKristof Provost struct pfioc_table io; 32962d28676SKristof Provost struct pfr_addr addr; 33062d28676SKristof Provost 33162d28676SKristof Provost COMMON_HEAD(); 33262d28676SKristof Provost 33362d28676SKristof Provost bzero(&addr, sizeof(addr)); 33462d28676SKristof Provost bzero(&io, sizeof(io)); 33562d28676SKristof Provost io.pfrio_flags = 0; 33662d28676SKristof Provost io.pfrio_buffer = &addr; 33762d28676SKristof Provost io.pfrio_esize = sizeof(addr); 33862d28676SKristof Provost 33962d28676SKristof Provost /* Negative size. */ 34062d28676SKristof Provost io.pfrio_size = -1; 34162d28676SKristof Provost if (ioctl(dev, DIOCRADDADDRS, &io) == 0) 34262d28676SKristof Provost atf_tc_fail("Request with size -1 succeeded"); 34362d28676SKristof Provost 34462d28676SKristof Provost /* Overly large size. */ 34562d28676SKristof Provost io.pfrio_size = 1 << 28; 34662d28676SKristof Provost if (ioctl(dev, DIOCRADDADDRS, &io) == 0) 34762d28676SKristof Provost atf_tc_fail("Reuqest with size 1 << 28 failed"); 348d3cc4030SKristof Provost } 34962d28676SKristof Provost 350d3cc4030SKristof Provost ATF_TC_CLEANUP(addaddrs, tc) 351d3cc4030SKristof Provost { 35262d28676SKristof Provost COMMON_CLEANUP(); 35362d28676SKristof Provost } 35462d28676SKristof Provost 355d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(deladdrs); 35687c7063cSKristof Provost ATF_TC_HEAD(deladdrs, tc) 35787c7063cSKristof Provost { 35887c7063cSKristof Provost atf_tc_set_md_var(tc, "require.user", "root"); 35987c7063cSKristof Provost } 36087c7063cSKristof Provost 36162d28676SKristof Provost ATF_TC_BODY(deladdrs, tc) 36262d28676SKristof Provost { 36362d28676SKristof Provost struct pfioc_table io; 36462d28676SKristof Provost struct pfr_addr addr; 36562d28676SKristof Provost 36662d28676SKristof Provost COMMON_HEAD(); 36762d28676SKristof Provost 36862d28676SKristof Provost bzero(&addr, sizeof(addr)); 36962d28676SKristof Provost bzero(&io, sizeof(io)); 37062d28676SKristof Provost io.pfrio_flags = 0; 37162d28676SKristof Provost io.pfrio_buffer = &addr; 37262d28676SKristof Provost io.pfrio_esize = sizeof(addr); 37362d28676SKristof Provost 37462d28676SKristof Provost /* Negative size. */ 37562d28676SKristof Provost io.pfrio_size = -1; 37662d28676SKristof Provost if (ioctl(dev, DIOCRDELADDRS, &io) == 0) 37762d28676SKristof Provost atf_tc_fail("Request with size -1 succeeded"); 37862d28676SKristof Provost 37962d28676SKristof Provost /* Overly large size. */ 38062d28676SKristof Provost io.pfrio_size = 1 << 28; 38162d28676SKristof Provost if (ioctl(dev, DIOCRDELADDRS, &io) == 0) 38262d28676SKristof Provost atf_tc_fail("Reuqest with size 1 << 28 failed"); 383d3cc4030SKristof Provost } 38462d28676SKristof Provost 385d3cc4030SKristof Provost ATF_TC_CLEANUP(deladdrs, tc) 386d3cc4030SKristof Provost { 38762d28676SKristof Provost COMMON_CLEANUP(); 38862d28676SKristof Provost } 38962d28676SKristof Provost 390d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(setaddrs); 39187c7063cSKristof Provost ATF_TC_HEAD(setaddrs, tc) 39287c7063cSKristof Provost { 39387c7063cSKristof Provost atf_tc_set_md_var(tc, "require.user", "root"); 39487c7063cSKristof Provost } 39587c7063cSKristof Provost 39662d28676SKristof Provost ATF_TC_BODY(setaddrs, tc) 39762d28676SKristof Provost { 39862d28676SKristof Provost struct pfioc_table io; 39962d28676SKristof Provost struct pfr_addr addr; 40062d28676SKristof Provost 40162d28676SKristof Provost COMMON_HEAD(); 40262d28676SKristof Provost 40362d28676SKristof Provost bzero(&addr, sizeof(addr)); 40462d28676SKristof Provost bzero(&io, sizeof(io)); 40562d28676SKristof Provost io.pfrio_flags = 0; 40662d28676SKristof Provost io.pfrio_buffer = &addr; 40762d28676SKristof Provost io.pfrio_esize = sizeof(addr); 40862d28676SKristof Provost 40962d28676SKristof Provost /* Negative size. */ 41062d28676SKristof Provost io.pfrio_size = -1; 41162d28676SKristof Provost if (ioctl(dev, DIOCRSETADDRS, &io) == 0) 41262d28676SKristof Provost atf_tc_fail("Request with size -1 succeeded"); 41362d28676SKristof Provost 41462d28676SKristof Provost /* Overly large size. */ 41562d28676SKristof Provost io.pfrio_size = 1 << 28; 41662d28676SKristof Provost if (ioctl(dev, DIOCRSETADDRS, &io) == 0) 41762d28676SKristof Provost atf_tc_fail("Reuqest with size 1 << 28 failed"); 418d3cc4030SKristof Provost } 41962d28676SKristof Provost 420d3cc4030SKristof Provost ATF_TC_CLEANUP(setaddrs, tc) 421d3cc4030SKristof Provost { 42262d28676SKristof Provost COMMON_CLEANUP(); 42362d28676SKristof Provost } 42462d28676SKristof Provost 425d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(getaddrs); 42687c7063cSKristof Provost ATF_TC_HEAD(getaddrs, tc) 42787c7063cSKristof Provost { 42887c7063cSKristof Provost atf_tc_set_md_var(tc, "require.user", "root"); 42987c7063cSKristof Provost } 43087c7063cSKristof Provost 43162d28676SKristof Provost ATF_TC_BODY(getaddrs, tc) 43262d28676SKristof Provost { 43362d28676SKristof Provost struct pfioc_table io; 43462d28676SKristof Provost struct pfr_addr addr; 43562d28676SKristof Provost 43662d28676SKristof Provost COMMON_HEAD(); 43762d28676SKristof Provost 43862d28676SKristof Provost bzero(&addr, sizeof(addr)); 43962d28676SKristof Provost bzero(&io, sizeof(io)); 44062d28676SKristof Provost io.pfrio_flags = 0; 44162d28676SKristof Provost io.pfrio_buffer = &addr; 44262d28676SKristof Provost io.pfrio_esize = sizeof(addr); 44362d28676SKristof Provost 44462d28676SKristof Provost common_init_tbl(&io.pfrio_table); 44562d28676SKristof Provost 44662d28676SKristof Provost /* Negative size. */ 44762d28676SKristof Provost io.pfrio_size = -1; 44862d28676SKristof Provost if (ioctl(dev, DIOCRGETADDRS, &io) == 0) 44962d28676SKristof Provost atf_tc_fail("Request with size -1 succeeded"); 45062d28676SKristof Provost 45162d28676SKristof Provost /* Overly large size. */ 45262d28676SKristof Provost io.pfrio_size = 1 << 24; 45362d28676SKristof Provost if (ioctl(dev, DIOCRGETADDRS, &io) == 0) 45462d28676SKristof Provost atf_tc_fail("Request with size 1 << 24 failed"); 455d3cc4030SKristof Provost } 45662d28676SKristof Provost 457d3cc4030SKristof Provost ATF_TC_CLEANUP(getaddrs, tc) 458d3cc4030SKristof Provost { 45962d28676SKristof Provost COMMON_CLEANUP(); 46062d28676SKristof Provost } 46162d28676SKristof Provost 462d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(getastats); 46387c7063cSKristof Provost ATF_TC_HEAD(getastats, tc) 46487c7063cSKristof Provost { 46587c7063cSKristof Provost atf_tc_set_md_var(tc, "require.user", "root"); 46687c7063cSKristof Provost } 46787c7063cSKristof Provost 46862d28676SKristof Provost ATF_TC_BODY(getastats, tc) 46962d28676SKristof Provost { 47062d28676SKristof Provost struct pfioc_table io; 47162d28676SKristof Provost struct pfr_astats astats; 47262d28676SKristof Provost 47362d28676SKristof Provost COMMON_HEAD(); 47462d28676SKristof Provost 47562d28676SKristof Provost bzero(&astats, sizeof(astats)); 47662d28676SKristof Provost bzero(&io, sizeof(io)); 47762d28676SKristof Provost io.pfrio_flags = 0; 47862d28676SKristof Provost io.pfrio_buffer = &astats; 47962d28676SKristof Provost io.pfrio_esize = sizeof(astats); 48062d28676SKristof Provost 48162d28676SKristof Provost common_init_tbl(&io.pfrio_table); 48262d28676SKristof Provost 48362d28676SKristof Provost /* Negative size. */ 48462d28676SKristof Provost io.pfrio_size = -1; 48562d28676SKristof Provost if (ioctl(dev, DIOCRGETASTATS, &io) == 0) 48662d28676SKristof Provost atf_tc_fail("Request with size -1 succeeded"); 48762d28676SKristof Provost 48862d28676SKristof Provost /* Overly large size. */ 48962d28676SKristof Provost io.pfrio_size = 1 << 24; 49062d28676SKristof Provost if (ioctl(dev, DIOCRGETASTATS, &io) == 0) 49162d28676SKristof Provost atf_tc_fail("Request with size 1 << 24 failed"); 492d3cc4030SKristof Provost } 49362d28676SKristof Provost 494d3cc4030SKristof Provost ATF_TC_CLEANUP(getastats, tc) 495d3cc4030SKristof Provost { 49662d28676SKristof Provost COMMON_CLEANUP(); 49762d28676SKristof Provost } 49862d28676SKristof Provost 499d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(clrastats); 50087c7063cSKristof Provost ATF_TC_HEAD(clrastats, tc) 50187c7063cSKristof Provost { 50287c7063cSKristof Provost atf_tc_set_md_var(tc, "require.user", "root"); 50387c7063cSKristof Provost } 50487c7063cSKristof Provost 50562d28676SKristof Provost ATF_TC_BODY(clrastats, tc) 50662d28676SKristof Provost { 50762d28676SKristof Provost struct pfioc_table io; 50862d28676SKristof Provost struct pfr_addr addr; 50962d28676SKristof Provost 51062d28676SKristof Provost COMMON_HEAD(); 51162d28676SKristof Provost 51262d28676SKristof Provost bzero(&addr, sizeof(addr)); 51362d28676SKristof Provost bzero(&io, sizeof(io)); 51462d28676SKristof Provost io.pfrio_flags = 0; 51562d28676SKristof Provost io.pfrio_buffer = &addr; 51662d28676SKristof Provost io.pfrio_esize = sizeof(addr); 51762d28676SKristof Provost 51862d28676SKristof Provost common_init_tbl(&io.pfrio_table); 51962d28676SKristof Provost 52062d28676SKristof Provost /* Negative size. */ 52162d28676SKristof Provost io.pfrio_size = -1; 52262d28676SKristof Provost if (ioctl(dev, DIOCRCLRASTATS, &io) == 0) 52362d28676SKristof Provost atf_tc_fail("Request with size -1 succeeded"); 52462d28676SKristof Provost 52562d28676SKristof Provost /* Overly large size. */ 52662d28676SKristof Provost io.pfrio_size = 1 << 24; 52762d28676SKristof Provost if (ioctl(dev, DIOCRCLRASTATS, &io) == 0) 52862d28676SKristof Provost atf_tc_fail("Request with size 1 << 24 failed"); 529d3cc4030SKristof Provost } 53062d28676SKristof Provost 531d3cc4030SKristof Provost ATF_TC_CLEANUP(clrastats, tc) 532d3cc4030SKristof Provost { 53362d28676SKristof Provost COMMON_CLEANUP(); 53462d28676SKristof Provost } 53562d28676SKristof Provost 536d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(tstaddrs); 53787c7063cSKristof Provost ATF_TC_HEAD(tstaddrs, tc) 53887c7063cSKristof Provost { 53987c7063cSKristof Provost atf_tc_set_md_var(tc, "require.user", "root"); 54087c7063cSKristof Provost } 54187c7063cSKristof Provost 54262d28676SKristof Provost ATF_TC_BODY(tstaddrs, tc) 54362d28676SKristof Provost { 54462d28676SKristof Provost struct pfioc_table io; 54562d28676SKristof Provost struct pfr_addr addr; 54662d28676SKristof Provost 54762d28676SKristof Provost COMMON_HEAD(); 54862d28676SKristof Provost 54962d28676SKristof Provost bzero(&addr, sizeof(addr)); 55062d28676SKristof Provost bzero(&io, sizeof(io)); 55162d28676SKristof Provost io.pfrio_flags = 0; 55262d28676SKristof Provost io.pfrio_buffer = &addr; 55362d28676SKristof Provost io.pfrio_esize = sizeof(addr); 55462d28676SKristof Provost 55562d28676SKristof Provost common_init_tbl(&io.pfrio_table); 55662d28676SKristof Provost 55762d28676SKristof Provost /* Negative size. */ 55862d28676SKristof Provost io.pfrio_size = -1; 55962d28676SKristof Provost if (ioctl(dev, DIOCRTSTADDRS, &io) == 0) 56062d28676SKristof Provost atf_tc_fail("Request with size -1 succeeded"); 56162d28676SKristof Provost 56262d28676SKristof Provost /* Overly large size. */ 56362d28676SKristof Provost io.pfrio_size = 1 << 24; 56462d28676SKristof Provost if (ioctl(dev, DIOCRTSTADDRS, &io) == 0) 56562d28676SKristof Provost atf_tc_fail("Request with size 1 << 24 failed"); 566d3cc4030SKristof Provost } 56762d28676SKristof Provost 568d3cc4030SKristof Provost ATF_TC_CLEANUP(tstaddrs, tc) 569d3cc4030SKristof Provost { 57062d28676SKristof Provost COMMON_CLEANUP(); 57162d28676SKristof Provost } 57262d28676SKristof Provost 573d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(inadefine); 57487c7063cSKristof Provost ATF_TC_HEAD(inadefine, tc) 57587c7063cSKristof Provost { 57687c7063cSKristof Provost atf_tc_set_md_var(tc, "require.user", "root"); 57787c7063cSKristof Provost } 57887c7063cSKristof Provost 57962d28676SKristof Provost ATF_TC_BODY(inadefine, tc) 58062d28676SKristof Provost { 58162d28676SKristof Provost struct pfioc_table io; 58262d28676SKristof Provost struct pfr_addr addr; 58362d28676SKristof Provost 58462d28676SKristof Provost COMMON_HEAD(); 58562d28676SKristof Provost 58662d28676SKristof Provost bzero(&addr, sizeof(addr)); 58762d28676SKristof Provost bzero(&io, sizeof(io)); 58862d28676SKristof Provost io.pfrio_flags = 0; 58962d28676SKristof Provost io.pfrio_buffer = &addr; 59062d28676SKristof Provost io.pfrio_esize = sizeof(addr); 59162d28676SKristof Provost 59262d28676SKristof Provost common_init_tbl(&io.pfrio_table); 59362d28676SKristof Provost 59462d28676SKristof Provost /* Negative size. */ 59562d28676SKristof Provost io.pfrio_size = -1; 59662d28676SKristof Provost if (ioctl(dev, DIOCRINADEFINE, &io) == 0) 59762d28676SKristof Provost atf_tc_fail("Request with size -1 succeeded"); 59862d28676SKristof Provost 59962d28676SKristof Provost /* Overly large size. */ 60062d28676SKristof Provost io.pfrio_size = 1 << 24; 60162d28676SKristof Provost if (ioctl(dev, DIOCRINADEFINE, &io) == 0) 60262d28676SKristof Provost atf_tc_fail("Request with size 1 << 24 failed"); 603d3cc4030SKristof Provost } 60462d28676SKristof Provost 605d3cc4030SKristof Provost ATF_TC_CLEANUP(inadefine, tc) 606d3cc4030SKristof Provost { 60762d28676SKristof Provost COMMON_CLEANUP(); 60862d28676SKristof Provost } 60962d28676SKristof Provost 610d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(igetifaces); 61187c7063cSKristof Provost ATF_TC_HEAD(igetifaces, tc) 61287c7063cSKristof Provost { 61387c7063cSKristof Provost atf_tc_set_md_var(tc, "require.user", "root"); 61487c7063cSKristof Provost } 61587c7063cSKristof Provost 6168e748b94SKristof Provost ATF_TC_BODY(igetifaces, tc) 6178e748b94SKristof Provost { 6188e748b94SKristof Provost struct pfioc_iface io; 6198e748b94SKristof Provost struct pfi_kif kif; 6208e748b94SKristof Provost 6218e748b94SKristof Provost COMMON_HEAD(); 6228e748b94SKristof Provost 6238e748b94SKristof Provost bzero(&io, sizeof(io)); 6248e748b94SKristof Provost io.pfiio_flags = 0; 6258e748b94SKristof Provost io.pfiio_buffer = &kif; 6268e748b94SKristof Provost io.pfiio_esize = sizeof(kif); 6278e748b94SKristof Provost 6288e748b94SKristof Provost /* Negative size */ 6298e748b94SKristof Provost io.pfiio_size = -1; 6308e748b94SKristof Provost if (ioctl(dev, DIOCIGETIFACES, &io) == 0) 6318e748b94SKristof Provost atf_tc_fail("request with size -1 succeeded"); 6328e748b94SKristof Provost 6338e748b94SKristof Provost /* Overflow size */ 6348e748b94SKristof Provost io.pfiio_size = 1 << 31; 6358e748b94SKristof Provost if (ioctl(dev, DIOCIGETIFACES, &io) == 0) 6368e748b94SKristof Provost atf_tc_fail("request with size 1 << 31 succeeded"); 637d3cc4030SKristof Provost } 6388e748b94SKristof Provost 639d3cc4030SKristof Provost ATF_TC_CLEANUP(igetifaces, tc) 640d3cc4030SKristof Provost { 6418e748b94SKristof Provost COMMON_CLEANUP(); 6428e748b94SKristof Provost } 6438e748b94SKristof Provost 644d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(cxbegin); 64587c7063cSKristof Provost ATF_TC_HEAD(cxbegin, tc) 64687c7063cSKristof Provost { 64787c7063cSKristof Provost atf_tc_set_md_var(tc, "require.user", "root"); 64887c7063cSKristof Provost } 64987c7063cSKristof Provost 65062d28676SKristof Provost ATF_TC_BODY(cxbegin, tc) 65162d28676SKristof Provost { 65262d28676SKristof Provost struct pfioc_trans io; 65362d28676SKristof Provost struct pfioc_trans_e ioe; 65462d28676SKristof Provost 65562d28676SKristof Provost COMMON_HEAD(); 65662d28676SKristof Provost 65762d28676SKristof Provost bzero(&io, sizeof(io)); 65862d28676SKristof Provost io.esize = sizeof(ioe); 65962d28676SKristof Provost io.array = &ioe; 66062d28676SKristof Provost 66162d28676SKristof Provost /* Negative size */ 66262d28676SKristof Provost io.size = -1; 66362d28676SKristof Provost if (ioctl(dev, DIOCXBEGIN, &io) == 0) 66462d28676SKristof Provost atf_tc_fail("request with size -1 succeeded"); 66562d28676SKristof Provost 66662d28676SKristof Provost /* Overflow size */ 66762d28676SKristof Provost io.size = 1 << 30; 66862d28676SKristof Provost if (ioctl(dev, DIOCXBEGIN, &io) == 0) 66962d28676SKristof Provost atf_tc_fail("request with size 1 << 30 succeeded"); 67062d28676SKristof Provost 67162d28676SKristof Provost /* NULL buffer */ 67262d28676SKristof Provost io.size = 1; 67362d28676SKristof Provost io.array = NULL; 67462d28676SKristof Provost if (ioctl(dev, DIOCXBEGIN, &io) == 0) 67562d28676SKristof Provost atf_tc_fail("request with size -1 succeeded"); 676d3cc4030SKristof Provost } 67762d28676SKristof Provost 678d3cc4030SKristof Provost ATF_TC_CLEANUP(cxbegin, tc) 679d3cc4030SKristof Provost { 68062d28676SKristof Provost COMMON_CLEANUP(); 68162d28676SKristof Provost } 68262d28676SKristof Provost 683d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(cxrollback); 68487c7063cSKristof Provost ATF_TC_HEAD(cxrollback, tc) 68587c7063cSKristof Provost { 68687c7063cSKristof Provost atf_tc_set_md_var(tc, "require.user", "root"); 68787c7063cSKristof Provost } 68887c7063cSKristof Provost 68962d28676SKristof Provost ATF_TC_BODY(cxrollback, tc) 69062d28676SKristof Provost { 69162d28676SKristof Provost struct pfioc_trans io; 69262d28676SKristof Provost struct pfioc_trans_e ioe; 69362d28676SKristof Provost 69462d28676SKristof Provost COMMON_HEAD(); 69562d28676SKristof Provost 69662d28676SKristof Provost bzero(&io, sizeof(io)); 69762d28676SKristof Provost io.esize = sizeof(ioe); 69862d28676SKristof Provost io.array = &ioe; 69962d28676SKristof Provost 70062d28676SKristof Provost /* Negative size */ 70162d28676SKristof Provost io.size = -1; 70262d28676SKristof Provost if (ioctl(dev, DIOCXROLLBACK, &io) == 0) 70362d28676SKristof Provost atf_tc_fail("request with size -1 succeeded"); 70462d28676SKristof Provost 70562d28676SKristof Provost /* Overflow size */ 70662d28676SKristof Provost io.size = 1 << 30; 70762d28676SKristof Provost if (ioctl(dev, DIOCXROLLBACK, &io) == 0) 70862d28676SKristof Provost atf_tc_fail("request with size 1 << 30 succeeded"); 70962d28676SKristof Provost 71062d28676SKristof Provost /* NULL buffer */ 71162d28676SKristof Provost io.size = 1; 71262d28676SKristof Provost io.array = NULL; 71362d28676SKristof Provost if (ioctl(dev, DIOCXROLLBACK, &io) == 0) 71462d28676SKristof Provost atf_tc_fail("request with size -1 succeeded"); 715d3cc4030SKristof Provost } 71662d28676SKristof Provost 717d3cc4030SKristof Provost ATF_TC_CLEANUP(cxrollback, tc) 718d3cc4030SKristof Provost { 71962d28676SKristof Provost COMMON_CLEANUP(); 72062d28676SKristof Provost } 72162d28676SKristof Provost 722d3cc4030SKristof Provost ATF_TC_WITH_CLEANUP(commit); 72387c7063cSKristof Provost ATF_TC_HEAD(commit, tc) 72487c7063cSKristof Provost { 72587c7063cSKristof Provost atf_tc_set_md_var(tc, "require.user", "root"); 72687c7063cSKristof Provost } 72787c7063cSKristof Provost 7288e748b94SKristof Provost ATF_TC_BODY(commit, tc) 7298e748b94SKristof Provost { 7308e748b94SKristof Provost struct pfioc_trans io; 7318e748b94SKristof Provost struct pfioc_trans_e ioe; 7328e748b94SKristof Provost 7338e748b94SKristof Provost COMMON_HEAD(); 7348e748b94SKristof Provost 7358e748b94SKristof Provost bzero(&io, sizeof(io)); 7368e748b94SKristof Provost io.esize = sizeof(ioe); 7378e748b94SKristof Provost io.array = &ioe; 7388e748b94SKristof Provost 7398e748b94SKristof Provost /* Negative size */ 7408e748b94SKristof Provost io.size = -1; 7418e748b94SKristof Provost if (ioctl(dev, DIOCXCOMMIT, &io) == 0) 7428e748b94SKristof Provost atf_tc_fail("request with size -1 succeeded"); 7438e748b94SKristof Provost 7448e748b94SKristof Provost /* Overflow size */ 7458e748b94SKristof Provost io.size = 1 << 30; 7468e748b94SKristof Provost if (ioctl(dev, DIOCXCOMMIT, &io) == 0) 7478e748b94SKristof Provost atf_tc_fail("request with size 1 << 30 succeeded"); 7488e748b94SKristof Provost 7498e748b94SKristof Provost /* NULL buffer */ 7508e748b94SKristof Provost io.size = 1; 7518e748b94SKristof Provost io.array = NULL; 7528e748b94SKristof Provost if (ioctl(dev, DIOCXCOMMIT, &io) == 0) 7538e748b94SKristof Provost atf_tc_fail("request with size -1 succeeded"); 754d3cc4030SKristof Provost } 7558e748b94SKristof Provost 756d3cc4030SKristof Provost ATF_TC_CLEANUP(commit, tc) 757d3cc4030SKristof Provost { 7588e748b94SKristof Provost COMMON_CLEANUP(); 7598e748b94SKristof Provost } 7608e748b94SKristof Provost 761fe5a065dSKristof Provost ATF_TC_WITH_CLEANUP(getsrcnodes); 762fe5a065dSKristof Provost ATF_TC_HEAD(getsrcnodes, tc) 763fe5a065dSKristof Provost { 764fe5a065dSKristof Provost atf_tc_set_md_var(tc, "require.user", "root"); 765fe5a065dSKristof Provost } 766fe5a065dSKristof Provost 767fe5a065dSKristof Provost ATF_TC_BODY(getsrcnodes, tc) 768fe5a065dSKristof Provost { 769fe5a065dSKristof Provost struct pfioc_src_nodes psn; 770fe5a065dSKristof Provost 771fe5a065dSKristof Provost COMMON_HEAD(); 772fe5a065dSKristof Provost 773fe5a065dSKristof Provost bzero(&psn, sizeof(psn)); 774fe5a065dSKristof Provost 775fe5a065dSKristof Provost psn.psn_len = -1; 776fe5a065dSKristof Provost if (ioctl(dev, DIOCGETSRCNODES, &psn) != 0) 777fe5a065dSKristof Provost atf_tc_fail("request with size -1 failed"); 778fe5a065dSKristof Provost 779fe5a065dSKristof Provost psn.psn_len = 1 << 30; 780fe5a065dSKristof Provost if (ioctl(dev, DIOCGETSRCNODES, &psn) != 0) 781fe5a065dSKristof Provost atf_tc_fail("request with size << 30 failed"); 782fe5a065dSKristof Provost 783fe5a065dSKristof Provost psn.psn_len = 1 << 31; 784fe5a065dSKristof Provost if (ioctl(dev, DIOCGETSRCNODES, &psn) != 0) 785fe5a065dSKristof Provost atf_tc_fail("request with size << 30 failed"); 786fe5a065dSKristof Provost } 787fe5a065dSKristof Provost 788fe5a065dSKristof Provost ATF_TC_CLEANUP(getsrcnodes, tc) 789fe5a065dSKristof Provost { 790fe5a065dSKristof Provost COMMON_CLEANUP(); 791fe5a065dSKristof Provost } 792fe5a065dSKristof Provost 793*d5325f2fSKristof Provost ATF_TC_WITH_CLEANUP(tag); 794*d5325f2fSKristof Provost ATF_TC_HEAD(tag, tc) 795*d5325f2fSKristof Provost { 796*d5325f2fSKristof Provost atf_tc_set_md_var(tc, "require.user", "root"); 797*d5325f2fSKristof Provost } 798*d5325f2fSKristof Provost 799*d5325f2fSKristof Provost ATF_TC_BODY(tag, tc) 800*d5325f2fSKristof Provost { 801*d5325f2fSKristof Provost struct pfioc_rule rule; 802*d5325f2fSKristof Provost 803*d5325f2fSKristof Provost COMMON_HEAD(); 804*d5325f2fSKristof Provost 805*d5325f2fSKristof Provost memset(&rule, 0x42, sizeof(rule)); 806*d5325f2fSKristof Provost 807*d5325f2fSKristof Provost rule.ticket = 0; 808*d5325f2fSKristof Provost rule.pool_ticket = 0; 809*d5325f2fSKristof Provost rule.anchor[0] = 0; 810*d5325f2fSKristof Provost 811*d5325f2fSKristof Provost rule.rule.return_icmp = 0; 812*d5325f2fSKristof Provost bzero(&rule.rule.src, sizeof(rule.rule.src)); 813*d5325f2fSKristof Provost bzero(&rule.rule.dst, sizeof(rule.rule.dst)); 814*d5325f2fSKristof Provost 815*d5325f2fSKristof Provost rule.rule.ifname[0] = 0; 816*d5325f2fSKristof Provost rule.rule.action = 0; 817*d5325f2fSKristof Provost rule.rule.rtableid = 0; 818*d5325f2fSKristof Provost 819*d5325f2fSKristof Provost rule.rule.tagname[0] = 0; 820*d5325f2fSKristof Provost 821*d5325f2fSKristof Provost for (int i = 0; i < 10; i++) 822*d5325f2fSKristof Provost ioctl(dev, DIOCADDRULE, &rule); 823*d5325f2fSKristof Provost } 824*d5325f2fSKristof Provost 825*d5325f2fSKristof Provost ATF_TC_CLEANUP(tag, tc) 826*d5325f2fSKristof Provost { 827*d5325f2fSKristof Provost COMMON_CLEANUP(); 828*d5325f2fSKristof Provost } 829*d5325f2fSKristof Provost 83098c5f988SKristof Provost ATF_TP_ADD_TCS(tp) 83198c5f988SKristof Provost { 83298c5f988SKristof Provost ATF_TP_ADD_TC(tp, addtables); 83398c5f988SKristof Provost ATF_TP_ADD_TC(tp, deltables); 8341ff545d6SKristof Provost ATF_TP_ADD_TC(tp, gettables); 8351d2e31afSKyle Evans ATF_TP_ADD_TC(tp, getastats); 8361ff545d6SKristof Provost ATF_TP_ADD_TC(tp, gettstats); 8371ff545d6SKristof Provost ATF_TP_ADD_TC(tp, clrtstats); 8381ff545d6SKristof Provost ATF_TP_ADD_TC(tp, settflags); 83962d28676SKristof Provost ATF_TP_ADD_TC(tp, addaddrs); 84062d28676SKristof Provost ATF_TP_ADD_TC(tp, deladdrs); 84162d28676SKristof Provost ATF_TP_ADD_TC(tp, setaddrs); 84262d28676SKristof Provost ATF_TP_ADD_TC(tp, getaddrs); 84362d28676SKristof Provost ATF_TP_ADD_TC(tp, clrastats); 84462d28676SKristof Provost ATF_TP_ADD_TC(tp, tstaddrs); 84562d28676SKristof Provost ATF_TP_ADD_TC(tp, inadefine); 8468e748b94SKristof Provost ATF_TP_ADD_TC(tp, igetifaces); 84762d28676SKristof Provost ATF_TP_ADD_TC(tp, cxbegin); 84862d28676SKristof Provost ATF_TP_ADD_TC(tp, cxrollback); 8498e748b94SKristof Provost ATF_TP_ADD_TC(tp, commit); 850fe5a065dSKristof Provost ATF_TP_ADD_TC(tp, getsrcnodes); 851*d5325f2fSKristof Provost ATF_TP_ADD_TC(tp, tag); 85298c5f988SKristof Provost 85398c5f988SKristof Provost return (atf_no_error()); 85498c5f988SKristof Provost } 855