summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr.sbin/ifstated/Makefile4
-rw-r--r--usr.sbin/ifstated/ifstated.conf.5215
2 files changed, 217 insertions, 2 deletions
diff --git a/usr.sbin/ifstated/Makefile b/usr.sbin/ifstated/Makefile
index 3db1d6b592b..4bf7e988997 100644
--- a/usr.sbin/ifstated/Makefile
+++ b/usr.sbin/ifstated/Makefile
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.5 2005/07/28 17:05:35 mpf Exp $
+# $OpenBSD: Makefile,v 1.6 2005/08/06 08:27:16 sturm Exp $
PROG= ifstated
SRCS= ifstated.c parse.y
@@ -7,7 +7,7 @@ CFLAGS+= -Wstrict-prototypes -Wmissing-prototypes
CLFAGS+= -Wmissing-declarations -Wredundant-decls
CFLAGS+= -Wshadow -Wpointer-arith -Wcast-qual
YFLAGS=
-MAN= ifstated.8
+MAN= ifstated.8 ifstated.conf.5
LDADD+=-levent
.include <bsd.prog.mk>
diff --git a/usr.sbin/ifstated/ifstated.conf.5 b/usr.sbin/ifstated/ifstated.conf.5
new file mode 100644
index 00000000000..efc12f3ff1e
--- /dev/null
+++ b/usr.sbin/ifstated/ifstated.conf.5
@@ -0,0 +1,215 @@
+.\" $OpenBSD: ifstated.conf.5,v 1.1 2005/08/06 08:27:16 sturm Exp $
+.\"
+.\" Copyright (c) 2005 Nikolay Sturm <sturm@openbsd.org>
+.\" Copyright (c) 2005 Marco Pfatschbacher <mpf@openbsd.org>
+.\"
+.\" Permission to use, copy, modify, and distribute this software for any
+.\" purpose with or without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+.\"
+.Dd May 31, 2005
+.Dt IFSTATED.CONF 5
+.Os
+.Sh NAME
+.Nm ifstated.conf
+.Nd Interface State daemon configuration file
+.Sh DESCRIPTION
+The
+.Xr ifstated 8
+daemon runs commands in response to network state changes, which it
+determines by monitoring interface link state or running external tests.
+.Nm
+is the configuration file for this daemon.
+.Sh SECTIONS
+The
+.Nm
+config file is divided into three main sections.
+.Bl -tag -width xxxx
+.It Sy Global Configuration
+Global settings for
+.Xr ifstated 8 .
+.It Sy Macros
+User-defined variables may be defined and used later, simplifying
+configuration.
+Macros must be defined before they are referenced in
+.Nm ifstated.conf .
+.It Sy State Definitions
+Definitions of states and transitions.
+.El
+.Sh GLOBAL CONFIGURATION
+.Bl -tag -width Ds
+.It Ic init-state Ar state
+Set the initial state to
+.Ar state
+instead of using the first state defined.
+.It Xo
+.Ic loglevel
+.Sm off
+.Po Ic none \*(Ba
+.Ic quiet \*(Ba
+.Ic normal \*(Ba
+.Ic verbose \*(Ba
+.Ic debug Pc
+.Sm on
+.Xc
+Set the log level, with
+.Em normal
+being the default value.
+.El
+.Sh MACROS
+Much like
+.Xr cpp 1
+or
+.Xr m4 1 ,
+macros can be defined that will later be expanded in context.
+Macro names may not be reserved words like, for example
+.Ar state
+or
+.Ar run .
+Macros are referenced with a shell-like notation as
+.Em $macro .
+Macros are usually used to define tests for state transitions like interface
+link state or external tests.
+.Pp
+Currently an interface can have three different link states:
+.Pp
+.Bl -tag -width xxxxxxxx -compact
+.It Ar up
+The physical link of the interface is up.
+For
+.Xr carp 4
+interfaces this equals the master state.
+.It Ar down
+The physical link of the interface is down.
+For
+.Xr carp 4
+interfaces this equals the backup state.
+.It Ar 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
+.Xr carp 4
+interfaces this equals the init state.
+.El
+.Pp
+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
+.Ar every
+keyword.
+.Pp
+For example:
+.Bd -literal -offset indent
+carp_up = "carp0.link.up && carp1.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 )'
+.Ed
+.Sh TESTS AND EVENTS
+.Xr ifstated 8
+delegates the process of testing to libevent which associates a value with
+every test, in this case
+.Em true
+or
+.Em false .
+Whenever the value of a test, associated with the current state, changes,
+an event is triggered and the state's body is processed.
+.Sh STATE DEFINITIONS
+.Xr ifstated 8
+operates on a finite state machine with states and transitions.
+.Pp
+Each state consists of an
+.Em init
+block and a body.
+The
+.Em 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.
+.Pp
+The action taken within a certain state is typically made dependent on the
+evaluation of one or more
+.Em if
+statements.
+Possible actions include executing commands using the
+.Em run
+statement, or triggering a state transition with the
+.Ar set-state
+keyword.
+It is also possible to write multiple nested
+.Em if
+blocks.
+.Pp
+For example:
+.Bd -literal -offset indent
+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
+ }
+}
+.Ed
+.Sh GRAMMAR
+Syntax for
+.Nm
+in BNF:
+.Bd -literal
+grammar = entry grammar | entry
+
+entry = global_config | varset | action | state
+
+global_config = initstate | loglevel
+initstate = "init-state" string
+loglevel = "loglevel" level
+level = "none" | "quiet" | "normal" | "verbose" | "debug"
+
+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
+
+.Ed
+.Sh FILES
+.Bl -tag -width "/etc/ifstated.conf" -compact
+.It Pa /etc/ifstated.conf
+.Xr ifstated 8
+configuration file
+.El
+.Sh SEE ALSO
+.Xr carp 4 ,
+.Xr pf 4 ,
+.Xr ifstated 8
+.Sh HISTORY
+The
+.Nm
+file format first appeared in
+.Ox 3.5 .