.\" Copyright (c) 2004 Andrey Simonenko .\" 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 AND CONTRIBUTORS ``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 CONTRIBUTORS 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 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. .\" .\" @(#)$Id: ipa_sdb.5,v 1.2 2006/03/21 20:24:44 simon Exp $ .\" .TH IPA_SDB 5 "12 апреля 2004 г." .SH НАИМЕНОВАНИЕ ipa_sdb\ \-\ формат базы данных для ipa_db_sdb(8) и ipa_st_sdb(8) .SH СИНТАКСИС #include .SH ФОРМАТ БАЗЫ ДАННЫХ Все структуры, необходимые для прямого чтения информации из базы данных, доступны в файле \fIipa_sdb.h\fP. .PP Файл \fIipa_sdb.h\fP содержит макроопределения для упаковывания структур, которые определяются скриптом configure во время компиляции, если вы решите использовать другой компилятор, чем компилятор, который использовал скрипт configure, то проверьте этот файл и переопределите эти макроопределения. .PP По умолчанию главная директория базы данных это \fI/var/ipa\fP, но так как она может быть изменена, то будем её называть . .PP Модули ipa_db_sdb(8) и ipa_st_sdb(8) не ожидают, что файл или директория, которую они используют в текущий момент времени, может быть удалён, переименован или модифицирован другим процессом. .PP Номер версии формата базы данных хранится в файле /\fIdb\ version\fP (значение макропеременной IPA_SDB_VERSION_FILE, имя файла содержит один символ пробела). Существует макропеременная IPA_SDB_FORMAT_VERSION, значение которой равно номеру версии формата базы данных. .PP Статистика для произвольного правила хранится в директории /. В этой директории находятся файлы с yyyymm-подобными именами, которые хранят статистику за год/месяц. .PP Каждый файл /yyyymm содержит записи в следующем формате (обычно упакованная структура): .PP .nf 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; }; .fi .PP \fImday\fP это номер дня месяца, \fIh1\fP, \fIm1\fP и \fIs1\fP это время, когда запись была добавлена в базу данных, \fIh2\fP, \fIm2\fP и \fIs2\fP это время, конда запись была обновлена последний раз. \fIc_high\fP и \fIc_low\fP это старшая 32-битная часть и младшая 32-битная часть счётчика, каждая из этих частей представлена в сетевом порядке байт. Т.к. новая запись всегда добавляется для нового дня, то в этой структуре достаточно только поля \fImday\fP. .PP Если присутствует файл //\fIinfo\fP (значение макропеременной IPA_SDB_INFO_FILE), то он содержит описание правила. .PP .PP Если правило содержит лимиты, то существует директория //\fIlimits\fP/ (значение макропеременной IPA_SDB_LIMITS_DIR), в которой хранится статистика для лимитов. Статистика для каждого лимита хранится в директории //\fIlimits\fP/. В этой директории находятся файлы с yyyymm-подобными именами, которые хранят статистику за год/месяц. Здесь год/месяц обозначает год и месяц, когда лимит был запущен (см. ниже поле \fIstart\fP). .PP Каждый файл /yyyymm содержит записи в следующем формате (обычно упакованные структуруры): .PP .nf 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; }; .fi .PP Биты IPA_SDB_DATE_xxx_SET в поле \fIset\fP определяют какое из полей типа \fIipa_sdb_data\fP имеют действительные данные. \fIstart\fP это дата, когда лимит был запущен, \fIrestart\fP это дата, когда лимит будет перезапущен, \fIrestart_exec\fP это дата, когда были запущены команды для перезапущенного лимита, \fIreach\fP это дата когда лимит был достигнут, \fIreach_exec\fP это дата, когда были запущены команды для достигнутого лимита, \fIexpire\fP это дата, когда достигнутый лимит будет перезапущен, \fIexpire_exec\fP это дата, когда были запущены команды для перезапущенного достигнутого лимита и \fIupdated\fP это дата, когда лимит обновлялся последний раз. .PP Поле \fIyear\fP в структуре \fIipa_sdb_date\fP представлено в сетевом порядке байт. .PP \fIl_high\fP и \fIl_low\fP представляют значение лимита, \fIc_high\fP и \fIc_low\fP представляют значение счётчика лимита. Эти поля имеют тот же формат, что и поля \fIc_high\fP и \fIc_low\fP в структуре \fIipa_sdb_rule_record\fP. .PP Если присутствует файл //\fIlimits\fP//\fIinfo\fP (значение макропеременной IPA_SDB_INFO_FILE), то он содержит описание лимита. .PP Если правило содержит пороги, то существует директория //\fIthresholds\fP/ (значение макропеременной IPA_SDB_THRESHOLDS_DIR), в которой хранится статистика для порогов. Статистика для каждого порога хранится в директории //\fIthresholds\fP/. Каждая директория порога содержит файл с именем \fIstate\fP (значение макропеременной IPA_SDB_THRESHOLD_STATE). Этот файл содержит текущее состояние порога (обычно упакованная структура): .PP .nf 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_from; ipa_sdb_date tm_updated; }; .fi .PP \fIl_high\fP и \fIl_low\fP представляют значение порога, \fIc_high\fP и \fIc_low\fP представляют значение счётчика порога. Эти поля имеют тот же формат, что и поля \fIc_high\fP и \fIc_low\fP в структуре \fIipa_sdb_rule_record\fP. .PP \fItm_from\fP и \fItm_updated\fP это две временные отметки порога. .PP Если присутствует файл //\fIthresholds\fP//\fIinfo\fP (значение макропеременной IPA_SDB_INFO_FILE), то он содержит описание порога. .SH ДРУГИЕ ИСТОЧНИКИ ipa_db_sdb(8), ipa_st_sdb(8), ipa_sdb_dump(8) .SH АВТОР Andrey\ Simonenko\ .SH НЕДОРАБОТКИ Если вы обнаружите какие-либо ошибки, то, пожалуйста, сообщите мне по email.