On Tue, Aug 01, 2023 at 01:50:52AM +0200, Alexandr Nedvedicky wrote:
> OK to commit?

OK bluhm@

> --------8<---------------8<---------------8<------------------8<--------
> diff --git a/sys/net/pf_table.c b/sys/net/pf_table.c
> index 6f23a6f795d..c862c804f84 100644
> --- a/sys/net/pf_table.c
> +++ b/sys/net/pf_table.c
> @@ -1565,8 +1565,10 @@ pfr_add_tables(struct pfr_table *tbl, int size, int 
> *nadd, int flags)
>                       xadd++;
>               } else if (!(flags & PFR_FLAG_DUMMY) &&
>                   !(p->pfrkt_flags & PFR_TFLAG_ACTIVE)) {
> -                     p->pfrkt_nflags = (p->pfrkt_flags &
> -                         ~PFR_TFLAG_USRMASK) | PFR_TFLAG_ACTIVE;
> +                     p->pfrkt_nflags =
> +                         (p->pfrkt_flags & ~PFR_TFLAG_USRMASK) |
> +                         (n->pfrkt_flags & PFR_TFLAG_USRMASK) |
> +                         PFR_TFLAG_ACTIVE;
>                       SLIST_INSERT_HEAD(&changeq, p, pfrkt_workq);
>               }
>       }
> diff --git a/regress/sys/net/pf_table/Makefile 
> b/regress/sys/net/pf_table/Makefile
> index a71f0190c73..8911e8a1d35 100644
> --- a/regress/sys/net/pf_table/Makefile
> +++ b/regress/sys/net/pf_table/Makefile
> @@ -1,15 +1,26 @@
>  #    $OpenBSD: Makefile,v 1.3 2017/07/07 23:15:27 bluhm Exp $
>  
> -REGRESS_TARGETS=     hit miss cleanup
> -CLEANFILES=          stamp-*
> +REGRESS_TARGETS=     hit miss cleanup flags
> +CLEANFILES=          stamp-* \
> +                     pf-reftab.conf          \
> +                     pf-instance.conf        \
> +                     table-ref.conf          \
> +                     table-pgone.out         \
> +                     table-persist.out       \
> +                     table-ref.out           \
> +                     table-refgone.out
> +
>  
>  stamp-setup:
> +     ${SUDO} pfctl -a regress/ttest -Fa
>       ${SUDO} pfctl -qt __regress_tbl -T add -f ${.CURDIR}/table.in
>       date >$@
>  
>  cleanup:
>       rm -f stamp-setup
>       ${SUDO} pfctl -qt __regress_tbl -T kill
> +     ${SUDO} pfctl -q -a regress/ttest -Fr
> +     ${SUDO} pfctl -q -a regress/ttest -qt instance -T kill
>  
>  hit: stamp-setup
>       for i in `cat ${.CURDIR}/table.hit`; do \
> @@ -27,6 +38,77 @@ miss: stamp-setup
>       done; \
>       exit 0
>  
> -.PHONY: hit miss
> +#
> +# tables <instance> and <reference> are both referenced by rule only
> +#
> +pf-instab.conf:
> +     @echo 'table <instance> { 192.168.1.0/24 }' > $@
> +     @echo 'pass in from <instance> to <reference>' >> $@
> +
> +#
> +# table <instance> is active and referred by rule, table <reference>
> +# is referenced only.
> +pf-reftab.conf:
> +     @echo 'pass in from <instance> to <reference>' > $@
> +
> +#
> +# check persistent flag (p) is gone from table <instance> after
> +# we load pf-instab.conf. Deals with case when persistent table <instance>
> +# exists before pf-instab.conf gets loaded.
> +#
> +table-pgone.out:
> +     @echo '--a-r--  instance        regress/ttest' > $@
> +     @echo '----r--  reference       regress/ttest' >> $@
> +
> +#
> +# verify table <instance> got persistent flag after we
> +# run 'pfctl -t instance -T add ...'
> +#
> +table-persist.out:
> +     @echo '-pa-r--  instance        regress/ttest' > $@
> +     @echo '----r--  reference       regress/ttest' >> $@
> +
> +#
> +# verify tables <instance> and <reference> are created on behalf of
> +# reference by rule after pf-reftab.conf got loaded.
> +#
> +table-ref.out:
> +     @echo '----r--  instance        regress/ttest' > $@
> +     @echo '----r--  reference       regress/ttest' >> $@
> +
> +#
> +# verify reference to <instance> table (persistent) is gone
> +# after rules got flushed
> +#
> +table-refgone.out:
> +     @echo '-pa----  instance        regress/ttest' > $@
> +
> +flags: pf-instab.conf pf-reftab.conf table-pgone.out table-persist.out \
> +    table-ref.out table-refgone.out
> +     @echo 'loading pf-reftab,conf (tables referenced by rules only)'
> +     @cat pf-reftab.conf
> +     ${SUDO} pfctl -a regress/ttest -f pf-reftab.conf
> +     @echo 'tables <reference> and <instance> should both have ----r--'
> +     ${SUDO} pfctl -a regress/ttest -sT -vg | diff table-ref.out -
> +     @echo 'creating <instance> table on command line, flags should be:'
> +     @cat table-persist.out
> +     ${SUDO} pfctl -a regress/ttest -t instance -T add 192.168.1.0/24
> +     ${SUDO} pfctl -a regress/ttest -sT -vg | diff table-persist.out -
> +     @echo 'flushing rules'
> +     ${SUDO} pfctl -a regress/ttest -Fr
> +     @echo 'table <reference> should be gone, table <instance> should stay'
> +     ${SUDO} pfctl -a regress/ttest -sT -vg | diff table-refgone.out -
> +     @echo 'loading pf-instab.conf'
> +     @cat pf-instab.conf
> +     ${SUDO} pfctl -a regress/ttest -f pf-instab.conf
> +     @echo 'table <instance> loses -p- flag:'
> +     @cat table-pgone.out
> +     ${SUDO} pfctl -a regress/ttest -sT -vg | diff table-pgone.out -
> +     @echo 'flusing rules, both tables should be gone'
> +     ${SUDO} pfctl -a regress/ttest -Fr
> +     @echo 'anchor regress/ttest must be gone'
> +     ${SUDO} pfctl -a regress/ttest -sr 2>&1 | grep 'pfctl: Anchor does not 
> exist'
> +
> +.PHONY: hit miss flags
>  
>  .include <bsd.regress.mk>

Reply via email to