Hello,

On Wed, Jul 05, 2023 at 11:36:26AM +0300, Kapetanakis Giannis wrote:
> Tried to replicate the issue today with running relayd in debug mode in order 
> to print more details.
> 
> /usr/sbin/relayd -d -v

    I did poke to sources. try to increase verbosity by using more 'v':

        /usr/sbin/relayd -d -vvv

    single '-v' does not seem to be enough to make log_debug() to print
    anything at least '-vv' is required.

    please retry with '-vv' at least.

> 
> when relayd exited it only printed:
> pfe: check_table: cannot get table stats for dir-sieve@relayd/dir-sieve: No 
> such file or directory
> 
> nothing from:
> kill_tables():
> log_debug("%s: deleted %d tables", __func__, cnt);
> 
> or
> flush_rulesets():
> log_debug("%s: flushed rules", __func__);
> 
> are you sure table delete/removal is coming from there?

    I did use 'grep DIOC' on relayd sources to see which pf ioctls
    are being used there. The only place where relayd calls
    DIOCRCLRTABLES is kill_tables() function. The only way to
    get there is via
        pfe_shutdown()
            flush_rulesets()
                kill_tables()
    this is the only call stack I can think of when looking at source code.

    also keep in mind the log message is displayed after all tables are
    removed. so in theory if pfe_statistics() timer fires while tables
    are being flushed it may find out table just got deleted and do exit
    via fatal(). On the other hand this sounds unlikely given the
    stats collection timer runs every minute only.
> 
> In any case it shouldn't try to get stats for empty tables.
> Maybe a check should be added in pfe_statistics() ?
> 
> G
> 

thanks and
regards
sashan

Reply via email to