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)