File: [local] / src / usr.sbin / ifstated / ifstated.h (download)
Revision 1.5, Thu Oct 25 06:03:31 2007 UTC (16 years, 7 months ago) by pyr
Branch: MAIN
CVS Tags: OPENBSD_4_6_BASE, OPENBSD_4_6, OPENBSD_4_5_BASE, OPENBSD_4_5, OPENBSD_4_4_BASE, OPENBSD_4_4, OPENBSD_4_3_BASE, OPENBSD_4_3 Changes since 1.4: +10 -7 lines
sync logging with most other daemons.
ok mcbride@, mpf@
|
/* $OpenBSD: ifstated.h,v 1.5 2007/10/25 06:03:31 pyr Exp $ */
/*
* Copyright (c) 2004 Ryan McBride
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/types.h>
#include <sys/queue.h>
struct ifsd_expression;
TAILQ_HEAD(ifsd_expression_list, ifsd_expression);
struct ifsd_ifstate {
TAILQ_ENTRY(ifsd_ifstate) entries;
struct ifsd_expression_list expressions;
int ifstate;
#define IFSD_LINKUNKNOWN 0 /* LINK_STATE_UNKNOWN */
#define IFSD_LINKDOWN 1 /* LINK_STATE_DOWN */
#define IFSD_LINKUP 2 /* LINK_STATE_UP */
int prevstate;
u_int32_t refcount;
u_short ifindex;
};
struct ifsd_external {
TAILQ_ENTRY(ifsd_external) entries;
struct event ev;
struct ifsd_expression_list expressions;
char *command;
int prevstatus;
u_int32_t frequency;
u_int32_t refcount;
u_int32_t lastexec;
pid_t pid;
};
struct ifsd_action;
TAILQ_HEAD(ifsd_action_list, ifsd_action);
struct ifsd_action {
TAILQ_ENTRY(ifsd_action) entries;
struct ifsd_action *parent;
union {
char *logmessage;
char *command;
struct ifsd_state *nextstate;
char *statename;
struct {
struct ifsd_action_list actions;
struct ifsd_expression *expression;
u_int8_t ignore_init;
} c;
} act;
u_int32_t type;
#define IFSD_ACTION_LOG 0
#define IFSD_ACTION_COMMAND 1
#define IFSD_ACTION_CHANGESTATE 2
#define IFSD_ACTION_CONDITION 3
};
struct ifsd_expression {
TAILQ_ENTRY(ifsd_expression) entries;
TAILQ_ENTRY(ifsd_expression) eval;
struct ifsd_expression *parent;
struct ifsd_action *action;
struct ifsd_expression *left;
struct ifsd_expression *right;
union {
struct ifsd_ifstate *ifstate;
struct ifsd_external *external;
} u;
int depth;
u_int32_t type;
#define IFSD_OPER_AND 1
#define IFSD_OPER_OR 2
#define IFSD_OPER_NOT 3
#define IFSD_OPER_EXTERNAL 4
#define IFSD_OPER_IFSTATE 5
u_int8_t truth;
};
TAILQ_HEAD(ifsd_ifstate_list, ifsd_ifstate);
TAILQ_HEAD(ifsd_external_list, ifsd_external);
struct ifsd_state {
struct event ev;
struct ifsd_ifstate_list interface_states;
struct ifsd_external_list external_tests;
TAILQ_ENTRY(ifsd_state) entries;
struct ifsd_action *init;
struct ifsd_action *always;
u_int32_t entered;
char *name;
};
TAILQ_HEAD(ifsd_state_list, ifsd_state);
struct ifsd_config {
struct ifsd_state always;
struct ifsd_state_list states;
struct ifsd_state *curstate;
struct ifsd_state *nextstate;
u_int32_t opts;
#define IFSD_OPT_VERBOSE 0x00000001
#define IFSD_OPT_VERBOSE2 0x00000002
#define IFSD_OPT_NOACTION 0x00000004
int maxdepth;
};
enum { IFSD_EVTIMER_ADD, IFSD_EVTIMER_DEL };
struct ifsd_config *parse_config(char *, int);
int cmdline_symset(char *);
void clear_config(struct ifsd_config *);
/* log.c */
void log_init(int);
void log_warn(const char *, ...);
void log_warnx(const char *, ...);
void log_info(const char *, ...);
void log_debug(const char *, ...);
__dead void fatal(const char *);
__dead void fatalx(const char *);