Lines Matching defs:block
66 * A superblock is a block of adjacent rules of similar action. If there
85 BARRIER, /* the presence of the field puts the rule in its own block */
269 struct superblock *block;
326 TAILQ_FOREACH(block, &superblocks, sb_entry) {
327 if (optimize_superblock(pf, block))
332 while ((block = TAILQ_FIRST(&superblocks))) {
333 TAILQ_REMOVE(&superblocks, block, sb_entry);
335 while ((por = TAILQ_FIRST(&block->sb_rules))) {
336 TAILQ_REMOVE(&block->sb_rules, por, por_entry);
350 free(block);
370 while ((block = TAILQ_FIRST(&superblocks))) {
371 TAILQ_REMOVE(&superblocks, block, sb_entry);
372 superblock_free(pf, block);
382 optimize_superblock(struct pfctl *pf, struct superblock *block)
419 if (!TAILQ_NEXT(TAILQ_FIRST(&block->sb_rules), por_entry))
424 TAILQ_FOREACH(por, &block->sb_rules, por_entry) {
432 if (remove_identical_rules(pf, block))
434 if (combine_rules(pf, block))
437 TAILQ_FIRST(&block->sb_rules)->por_rule.quick &&
438 block->sb_profiled_block) {
439 if (block_feedback(pf, block))
441 } else if (reorder_rules(pf, block, 0)) {
463 remove_identical_rules(struct pfctl *pf, struct superblock *block)
468 for (por1 = TAILQ_FIRST(&block->sb_rules); por1; por1 = por_next) {
482 TAILQ_REMOVE(&block->sb_rules, por2, por_entry);
489 TAILQ_REMOVE(&block->sb_rules, por1, por_entry);
505 combine_rules(struct pfctl *pf, struct superblock *block)
516 TAILQ_FOREACH(p1, &block->sb_rules, por_entry) {
543 TAILQ_REMOVE(&block->sb_rules, p2,
565 TAILQ_REMOVE(&block->sb_rules, p2,
578 for (p1 = TAILQ_FIRST(&block->sb_rules); p1; p1 = por_next) {
586 TAILQ_REMOVE(&block->sb_rules, p1, por_entry);
618 TAILQ_REMOVE(&block->sb_rules, p1, por_entry);
655 reorder_rules(struct pfctl *pf, struct superblock *block, int depth)
668 TAILQ_FOREACH(por, &block->sb_rules, por_entry) {
669 TAILQ_FOREACH(skiplist, &block->sb_skipsteps[i],
679 TAILQ_INSERT_TAIL(&block->sb_skipsteps[i],
682 skip_append(block, i, skiplist, por);
686 TAILQ_FOREACH(por, &block->sb_rules, por_entry)
696 skiplist = TAILQ_FIRST(&block->sb_skipsteps[i]);
723 while ((por = TAILQ_FIRST(&block->sb_rules))) {
724 TAILQ_REMOVE(&block->sb_rules, por, por_entry);
736 skiplist = TAILQ_FIRST(&block->sb_skipsteps[i]);
750 TAILQ_INSERT_TAIL(&block->sb_rules, por,
759 skiplist = TAILQ_FIRST(&block->sb_skipsteps[
763 largest, TAILQ_FIRST(&TAILQ_FIRST(&block->
766 TAILQ_REMOVE(&block->sb_skipsteps[largest_list],
784 TAILQ_INSERT_BEFORE(block, newblock, sb_entry);
790 newblock = block;
801 remove_from_skipsteps(&block->sb_skipsteps[
802 largest_list], block, por, skiplist);
805 if (newblock != block)
813 while ((skiplist = TAILQ_FIRST(&block->sb_skipsteps[i]))) {
814 TAILQ_REMOVE(&block->sb_skipsteps[i], skiplist,
829 block_feedback(struct pfctl *pf, struct superblock *block)
840 TAILQ_FOREACH(por1, &block->sb_profiled_block->sb_rules, por_entry) {
842 TAILQ_FOREACH(por2, &block->sb_rules, por_entry) {
854 superblock_free(pf, block->sb_profiled_block);
855 block->sb_profiled_block = NULL;
863 while ((por1 = TAILQ_FIRST(&block->sb_rules)) != NULL) {
864 TAILQ_REMOVE(&block->sb_rules, por1, por_entry);
871 TAILQ_FOREACH(por2, &block->sb_rules, por_entry) {
880 if (por2 == TAILQ_END(&block->sb_rules))
882 TAILQ_INSERT_TAIL(&block->sb_rules, por1, por_entry);
897 struct superblock *block, *blockcur;
952 block = TAILQ_FIRST(superblocks);
954 while (block && blockcur) {
955 comparable_rule(&a, &TAILQ_FIRST(&block->sb_rules)->por_rule,
961 block->sb_profiled_block = blockcur;
964 TAILQ_FIRST(&block->sb_rules)->por_rule.nr,
968 block = TAILQ_NEXT(block, sb_entry);
976 block = TAILQ_NEXT(blockcur, sb_entry);
978 blockcur = block;
1027 remove_from_skipsteps(struct skiplist *head, struct superblock *block,
1035 sk = TAILQ_FIRST(&block->sb_skipsteps[i]);
1355 struct superblock *block = NULL;
1362 if (block == NULL || !superblock_inclusive(block, por)) {
1363 if ((block = calloc(1, sizeof(*block))) == NULL) {
1367 TAILQ_INIT(&block->sb_rules);
1369 TAILQ_INIT(&block->sb_skipsteps[i]);
1370 TAILQ_INSERT_TAIL(superblocks, block, sb_entry);
1372 TAILQ_INSERT_TAIL(&block->sb_rules, por, por_entry);
1425 superblock_inclusive(struct superblock *block, struct pf_opt_rule *por)
1447 * block on EXTIFS to any port 22
1451 * block rule. But what if EXTIFS includes em0??? Such a reordering
1459 interface_group(TAILQ_FIRST(&block->sb_rules)->por_rule.ifname)) {
1461 TAILQ_FIRST(&block->sb_rules)->por_rule.ifname) != 0)
1465 comparable_rule(&a, &TAILQ_FIRST(&block->sb_rules)->por_rule, NOMERGE);
1655 superblock_free(struct pfctl *pf, struct superblock *block)
1658 while ((por = TAILQ_FIRST(&block->sb_rules))) {
1659 TAILQ_REMOVE(&block->sb_rules, por, por_entry);
1676 if (block->sb_profiled_block)
1677 superblock_free(pf, block->sb_profiled_block);
1678 free(block);