IPA_SDB(5) IPA_SDB(5)
НАИМЕНОВАНИЕ
ipa_sdb -- формат базы данных для ipa_db_sdb(8) и ipa_st_sdb(8)
СИНТАКСИС
#include "ipa_sdb_config.h"
#include <ipa_sdb.h>
ОПИСАНИЕ
ipa_sdb это база данных для IPA модуля базы данных со следующими свой-
ствами:
- Все файлы и директории базы данных хранятся в собственных форма-
тах базы данных;
- Каждое правило, лимит и порог имеет собственную директорию;
- Форматы файлов базы данных не зависят от архитектуры компьютера;
- Размеры записей в файлах базы данных относительно малы: размер
записи для правила равен 15 байт, размер записи для лимита равен
73 байт, размер записи для порога равен 30 байт.
ФОРМАТ БАЗЫ ДАННЫХ
Все структуры, необходимые для прямого обращение к данным базы данных,
доступны в файле ipa_sdb.h.
Файл ipa_sdb_config.h содержит макроопределения для упаковывания струк-
тур, которые определяются скриптом configure (см. содержимое этого
файла). Если вы будете использовать другой компилятор, чем компилятор,
который использовал скрипт configure, то измените этот файл и переопре-
делите эти макроопределения.
По умолчанию главная директория базы данных это IPA_SDB_DB_DIR, но так
как она может быть изменена, то будем её называть <DB>.
Модули ipa_db_sdb(8) и ipa_st_sdb(8) не ожидают, что файл или директо-
рия, которую они используют в текущий момент времени, может быть
удалён, переименован или модифицирован другим процессом.
Номер версии формата базы данных хранится в файле <DB>/IPA_SDB_VER-
SION_FILE. Существует макропеременная IPA_SDB_FORMAT_VERSION, значение
которой равно номеру версии формата базы данных.
Статистика для произвольного правила хранится в директории <DB>/<rule>.
В этой директории находятся файлы с yyyymm-подобными именами, которые
хранят статистику за год/месяц.
Каждый файл <rule>/yyyymm содержит записи в следующем формате:
struct ipa_sdb_rule_record {
uint8_t mday;
uint8_t h1;
uint8_t m1;
uint8_t s1;
uint8_t h2;
uint8_t m2;
uint8_t s2;
uint32_t c_high;
uint32_t c_low;
};
mday это номер дня месяца, h1, m1 и s1 это время, когда запись была
добавлена в базу данных, h2, m2 и s2 это время, когда запись была
обновлена последний раз. c_high и c_low это старшая 32-битная часть и
младшая 32-битная часть счётчика, каждая из этих частей представлена в
сетевом порядке байт. Так как новая запись всегда добавляется для
нового дня, то в этой структуре достаточно только поля mday.
Файл <rule>/IPA_SDB_INFO_FILE содержит описание правила.
Данные лимитов находятся в директории <rule>/IPA_SDB_LIMITS_DIR, данные
для каждого лимита хранится в директории <limit>. В этой директории
находятся файлы с yyyymm-подобными именами, которые хранят статистику
за год/месяц. Здесь год/месяц обозначает год и месяц, когда лимит был
начат.
Каждый файл <limit>/yyyymm содержит записи в следующем формате:
struct ipa_sdb_date_struct {
uint16_t year;
uint8_t mon;
uint8_t mday;
uint8_t hour;
uint8_t min;
uint8_t sec;
};
typedef struct ipa_sdb_date_struct ipa_sdb_date;
#define IPA_SDB_DATE_START_SET 0x01
#define IPA_SDB_DATE_RESTART_SET 0x02
#define IPA_SDB_DATE_RESTART_EXEC_SET 0x04
#define IPA_SDB_DATE_REACH_SET 0x08
#define IPA_SDB_DATE_REACH_EXEC_SET 0x10
#define IPA_SDB_DATE_EXPIRE_SET 0x20
#define IPA_SDB_DATE_EXPIRE_EXEC_SET 0x40
#define IPA_SDB_DATE_UPDATED_SET 0x80
struct ipa_sdb_limit_record {
uint8_t set;
ipa_sdb_date start;
ipa_sdb_date restart;
ipa_sdb_date restart_exec;
ipa_sdb_date reach;
ipa_sdb_date reach_exec;
ipa_sdb_date expire;
ipa_sdb_date expire_exec;
uint32_t l_high;
uint32_t l_low;
ipa_sdb_date updated;
uint32_t c_high;
uint32_t c_low;
};
Биты IPA_SDB_DATE_xxx_SET в поле set определяют какое из полей типа
ipa_sdb_data имеют действительные данные. start это дата запуска
лимита, restart это дата, когда лимит будет перезапущен, restart_exec
это дата, когда были запущены команды для перезапущенного лимита, reach
это дата когда лимит был достигнут, reach_exec это дата, когда были
запущены команды для достигнутого лимита, expire это дата, когда
достигнутый лимит будет перезапущен, expire_exec это дата, когда были
запущены команды для перезапущенного достигнутого лимита и updated это
дата, когда лимит обновлялся последний раз.
Поле year в структуре ipa_sdb_date представлено в сетевом порядке байт.
l_high и l_low представляют значение лимита, c_high и c_low представ-
ляют значение счётчика лимита. Эти поля имеют тот же формат, что и
поля c_high и c_low в структуре ipa_sdb_rule_record.
Файл <limit>/IPA_SDB_INFO_FILE содержит описание лимита.
Данные порогов находятся в директории <rule>/IPA_SDB_THRESHOLDS_DIR,
данные для каждого порога хранится в директории <threshold>. Файл
<threshold>/IPA_SDB_THRESHOLD_STATE содержит текущее состояние порога:
struct ipa_sdb_threshold_record {
uint32_t t_high;
uint32_t t_low;
uint32_t c_high;
uint32_t c_low;
ipa_sdb_date tm_started;
ipa_sdb_date tm_updated;
};
l_high и l_low представляют значение порога, c_high и c_low представ-
ляют значение счётчика порога. Эти поля имеют тот же формат, что и
поля c_high и c_low в структуре ipa_sdb_rule_record.
tm_started и tm_updated это две временные отметки порога.
Файл <threshold>/IPA_SDB_INFO_FILE содержит описание порога.
ДРУГИЕ ИСТОЧНИКИ
ipa_db_sdb(8), ipa_st_sdb(8), ipa_sdb_dump(8)
АВТОР
Andrey Simonenko <simon@comsys.ntu-kpi.kiev.ua>
НЕДОРАБОТКИ
Если вы обнаружите какие-либо ошибки, то, пожалуйста, сообщите мне по
email.
24 июля 2007 г. IPA_SDB(5)