[OpenBSD]

Manual Page Search Parameters

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

NAME

ifstated.confInterface State daemon configuration file

DESCRIPTION

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

SECTIONS

The ifstated.conf config file is divided into three main sections.
 
 
Global Configuration
Global settings for ifstated(8).
 
 
Macros
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.

GLOBAL CONFIGURATION

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

MACROS

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) interfaces this equals the master state.
down
The physical link of the interface is down. For carp(4) interfaces 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 physical link state. For carp(4) interfaces this equals the init state.
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:
links_up = "em0.link.up && em1.link.up" 
net = '( "ping -q -c 1 -w 1 192.168.0.1 > /dev/null" every 10 && \ 
         "ping -q -c 1 -w 1 192.168.0.2 > /dev/null" every 10 )'

TESTS AND EVENTS

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 triggered and the state's body is processed.

STATE DEFINITIONS

ifstated(8) operates on a finite state machine with states and transitions.
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 transition with the set-state keyword. It is also possible to write multiple nested if blocks.
For example:
state one { 
	init { 
		run "logger -t ifstated entering state one" 
		run "ifconfig -g carp -carpdemote" 
	} 
 
	if ! $net || urndis0.link.up 
		set-state two 
 
	if ! $links_up { 
		run "ifconfig -g carp carpdemote" 
 
		if urndis0.link.down 
			set-state three 
	} 
}

GRAMMAR

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

FILES

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

SEE ALSO

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

HISTORY

The ifstated.conf file format first appeared in OpenBSD 3.8.
January 20, 2018 OpenBSD-current