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)