| 1814 | } |
| 1815 | |
| 1816 | static void |
| 1817 | pfr_setflags_ktable(struct pfr_ktable *kt, int newf) |
| 1818 | { |
| 1819 | struct pfr_kentryworkq addrq; |
| 1820 | |
| 1821 | PF_RULES_WASSERT(); |
| 1822 | |
| 1823 | if (!(newf & PFR_TFLAG_REFERENCED) && |
| 1824 | !(newf & PFR_TFLAG_REFDANCHOR) && |
| 1825 | !(newf & PFR_TFLAG_PERSIST)) |
| 1826 | newf &= ~PFR_TFLAG_ACTIVE; |
| 1827 | if (!(newf & PFR_TFLAG_ACTIVE)) |
| 1828 | newf &= ~PFR_TFLAG_USRMASK; |
| 1829 | if (!(newf & PFR_TFLAG_SETMASK)) { |
| 1830 | RB_REMOVE(pfr_ktablehead, &V_pfr_ktables, kt); |
| 1831 | if (kt->pfrkt_root != NULL) |
| 1832 | if (!--kt->pfrkt_root->pfrkt_refcnt[PFR_REFCNT_ANCHOR]) |
| 1833 | pfr_setflags_ktable(kt->pfrkt_root, |
| 1834 | kt->pfrkt_root->pfrkt_flags & |
| 1835 | ~PFR_TFLAG_REFDANCHOR); |
| 1836 | pfr_destroy_ktable(kt, 1); |
| 1837 | V_pfr_ktable_cnt--; |
| 1838 | return; |
| 1839 | } |
| 1840 | if (!(newf & PFR_TFLAG_ACTIVE) && kt->pfrkt_cnt) { |
| 1841 | pfr_enqueue_addrs(kt, &addrq, NULL, 0); |
| 1842 | pfr_remove_kentries(kt, &addrq); |
| 1843 | } |
| 1844 | if (!(newf & PFR_TFLAG_INACTIVE) && kt->pfrkt_shadow != NULL) { |
| 1845 | pfr_destroy_ktable(kt->pfrkt_shadow, 1); |
| 1846 | kt->pfrkt_shadow = NULL; |
| 1847 | } |
| 1848 | kt->pfrkt_flags = newf; |
| 1849 | } |
| 1850 | |
| 1851 | static void |
| 1852 | pfr_clstats_ktables(struct pfr_ktableworkq *workq, long tzero, int recurse) |
no test coverage detected