Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (OpenBSD-5.7)
Apropos / Subsearch:
optional field

IFSTATED.CONF(5)            BSD File Formats Manual           IFSTATED.CONF(5)

     ifstated.conf -- Interface State daemon configuration file

     The ifstated(8) daemon runs commands in response to network state
     changes, which it determines by monitoring interface link state or run-
     ning external tests.  ifstated.conf is the configuration file for this

     The ifstated.conf config file is divided into three main sections.

     Global Configuration
           Global settings for ifstated(8).

           User-defined variables may be defined and used later, simplifying
           configuration.  Macros must be defined before they are referenced
           in ifstated.conf.

     State Definitions
           Definitions of states and transitions.

     init-state state
             Set the initial state to state instead of using the first state

     Macros can be defined that will later be expanded in context.  Macro
     names must start with a letter, digit, or underscore, and may contain any
     of those characters.  Macro names may not be reserved words like, for
     example state or run.  Macros are referenced with a shell-like notation
     as $macro.  Macros are usually used to define tests for state transitions
     like interface link state or external tests.

     Currently an interface can have three different link states:

     up        The physical link of the interface is up.  For carp(4) inter-
               faces this equals the master state.
     down      The physical link of the interface is down.  For carp(4) inter-
               faces this equals the backup state.
     unknown   The physical link of the interface is unknown.  This is because
               the interface driver does not provide information of the physi-
               cal link state.  For carp(4) interfaces this equals the init

     In contrast to link state tests, external tests must be run periodically
     to evaluate their status.  The frequency at which an external test is run
     has to be set with the every keyword.

     For example:

           carp_up = "carp0.link.up && carp1.link.up"
           net = '( "ping -q -c 1 -w 1 > /dev/null" every 10 && \
                    "ping -q -c 1 -w 1 > /dev/null" every 10 )'

     ifstated(8) delegates the process of testing to libevent which associates
     a value with every test, in this case true or false.  Whenever the value
     of a test associated with the current state changes, an event is trig-
     gered and the state's body is processed.

     ifstated(8) operates on a finite state machine with states and transi-

     Each state consists of an init block and a body.  The init block is used
     to initialise the state and is executed each time the state is entered.
     The body of a state is only executed when that state is the current state
     and an event occurs.

     The action taken within a certain state is typically made dependent on
     the evaluation of one or more if statements.  Possible actions include
     executing commands using the run statement, or triggering a state transi-
     tion with the set-state keyword.  It is also possible to write multiple
     nested if blocks.

     For example:

           state one {
                   init {
                           run "ifconfig carp0 advskew 10"
                           run "ifconfig carp1 advskew 10"

                   if ! $net
                           set-state two

                   if ! $carp_up {
                           run "ifconfig carp0 advskew 254"
                           run "ifconfig carp1 advskew 254"
                           set-state three

     Syntax for ifstated.conf in BNF:

     grammar         = entry grammar | entry

     entry           = global_config | varset | action | state

     global_config   = initstate
     initstate       = "init-state" string

     varset          = string "=" string

     action_list     = action [ action_list ]
     action          = "run" string | "set-state" string |
                       "if" expr action_block
     action_block    = "{" action_list "}" | action
     expr            = "!" expr | expr "&&" expr | expr "||" expr | term
     term            = if_test | ext_test | "(" expr ")"
     if_test         = string ".link." ( "up" | "down" | "unknown" )
     ext_test        = string "every" number

     state           = "state" string "{" stateopt_list "}"
     stateopt_list   = stateopt [ stateopt_list ]
     stateopt        = init | action
     init            = "init" action_block

     /etc/ifstated.conf  ifstated(8) configuration file

     carp(4), pf(4), ifstated(8)

     The ifstated.conf file format first appeared in OpenBSD 3.8.

BSD                             March 23, 2017                             BSD