/*****************************************************************************
 * FIAIF is an Intelligent firewall, version: $Revision: 1.140 $
 *
 * description: Automates a packet filtering firewall with iptables.
 *
 * Script Author:	Anders Fugmann <afu@fugmann.net>
 * 
 * FIAIF is an Intelligent firewall
 * Copyright (C) 2002-2004 Anders Peter Fugmann
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 ****************************************************************************/ 

/* This file contains the schema files for an sql database interface. */

/* The Zone table */
CREATE TABLE Zone (
	id INTEGER PRIMARY KEY,
	name TEXT
	dynamic INTEGER,
	global INTEGER,
	dhcp_server INTEGER
);

/* The Device table. Only one for each zone */
CREATE TABLE Device (
	id INTEGER PRIMARY KEY,
	zone_id INTEGER,
	ip TEXT,	
	net TEXT,
	mask TEXT,
	bcast TEXT,
	ip_extra TEXT,
	net_extra TEXT
);

/* A table for all available targets, used by INPUT, OUTPUT and FORWARD rules */
CREATE TABLE Targets (
	id INTEGER PRIMARY KEY,
	name TEXT
);

/* Helper table to specify a filter */
CREATE TABLE Filter (
	id INTEGER PRIMARY KEY,
	protocol TEXT,
	port TEXT,
	source_ip TEXT,
	dest_ip TEXT
);

/* The INPUT rules */
CREATE TABLE Input (
	id INTEGER PRIMARY KEY,
	zone_id INTEGER,
	order INTEGER,
	target_id INTEGER,
	filter_id INTEGER
);

/* The OUTPUT rules */
CREATE TABLE Output (
	id INTEGER PRIMARY KEY,
	zone_id INTEGER,
	order INTEGER,
	target_id INTEGER,
	filter_id INTEGER
);

/* The Forward rules */
CREATE TABLE Forward (
	id INTEGER PRIMARY KEY,
	zone_id INTEGER,
	order INTEGER,
	source_zone_id INTEGER,
	target_id INTEGER,
	filter_id INTEGER
);

/* The Mark rules */
CREATE TABLE Mark (
	id INTEGER PRIMARY KEY,
	zone_id INTEGER,
	order INTEGER,
	source_zone_id INTEGER,
	mark INTEGER,
	filter_id INTEGER
);

/* Table of all possible reply types */
CREATE TABLE ReplyType (
	id INTEGER PRIMARY KEY,
	type TEXT
);

/* Reply rule */
CREATE TABLE Reply (
	id INTEGER PRIMARY KEY,
	zone_id INTEGER,
	order INTEGER,
	source_zone_id INTEGER,
	reply_type_id INTEGER,
	fitler_id INTEGER
);

/* Redirect rule */
CREATE TABLE Redirect (
	id INTEGER PRIMARY KEY,
	zone_id INTEGER,
	order INTEGER,
	filter_id INTEGER,
	dest_ip TEXT,
	dest_port TEXT
);

/* IP_WATCH rule */
CREATE TABLE WatchIp (
	id INTEGER PRIMARY KEY,
	zone_id INTEGER,
	ip TEXT
);

/* ECN_REMOVE rule */
CREATE TABLE EcnRemove (
	id INTEGER PRIMARY KEY,
	zone_id INTEGER,
	ip TEXT
);

/* MAC_DROP rule */
CREATE TABLE MacDrop (
	id INTEGER PRIMARY KEY,
	zone_id INTEGER,
	MAC TEXT
);

/* IP_DROP rules */
CREATE TABLE IpDrop (
	id INTEGER PRIMARY KEY,
	zone_id INTEGER,
	ip TEXT
);

/* SNAT rules */
CREATE TABLE Snat (
	id INTEGER PRIMARY KEY,
	zone_id INTEGER,
	order INTEGER,
	dest_zone_id INTEGER,
	filter_id INTEGER
);

/* Limit time types */
CREATE TABLE LimitTime (
	id INTEGER PRIMARY KEY,
	time TEXT
);

/* LIMIT rules */
CREATE TABLE Limit (
	id INTEGER PRIMARY KEY,
	zone_id INTEGER,
	order INTEGER,
	source_zone_id INTEGER,
	limit_nr INTEGER,
	limit_id INTEGER,
	burst INTEGER,
	target_id INTEGER,
	filter_id INTEGER
);

/* All supported shaping types (eg. CFQ, HTB) */
CREATE TABLE ShapeTypes (
	id INTEGER PRIMARY KEY,
	type TEXT
);

/* Traffic shaping setup */
CREATE TABLE TrafficShaping (
	id INTEGER PRIMARY KEY,
	zone_id INTEGER,
	enabled INTEGER
	type_id INTEGER,
	downlink INTEGER,
	uplink INTEGER	
);
