/* Интерфейс, описывающий множество пакетов. */
class Set {
public:
/* Вернуть пакет по локальному номеру. */
virtual Packet at(SET_INDEX index) const = 0;
/* Получить размер множества. */
virtual SIZE size() const = 0;
virtual ~Set() {}
};
Правило.
// Интерфейс правила
class Rule {
public:
/* Тип итератора для доступа к подмножествам. SET_INDEX - это псевдоним типа uint32_t */
typedef std::vector<SET_INDEX>::iterator Iterator;
/* Клонирование правила */
virtual Rule* clone() const = 0;
/* Применение правила к переданному множеству. Все остальные методы, которые имеют дело с "текущим делением", не должны вызываться раньше этого. */
virtual SIZE compute(const std::auto_ptr<Set> subset) = 0;
/* Возвращает разницу в весе частей текущего деления. */
virtual SIZE getDiff() const = 0;
/* Возвращают левое и правое дочернее правило для текущего деления. */
virtual Rule* getLeftRule() const = 0;
virtual Rule* getRightRule() const = 0;
/* Возвращает "истину", если правило прошло (см. описание архитектуры генератора). */
virtual bool isPassed() const = 0;
/* Вовзращает "истину", если текущее деление невырожденное. */
virtual bool isDivided() const = 0;
/* Работа с флагом активности правила. */
virtual bool isActive() const = 0;
virtual void setActive(bool active) = 0;
/* Возвращает текущее деление в текстовом виде, пригодном для использования в командах iptables. */
virtual std::string printRule() const = 0;
/* Возвращают итераторы на начало и конец левого и правого подмножества текущего деления. */
virtual Iterator leftBegin() const = 0;
virtual Iterator leftEnd() const = 0;
virtual Iterator rightBegin() const = 0;
virtual Iterator rightEnd() const = 0;
virtual ~Rule() {}
};
(обязательное)
Файл описания диапазонов адресов.
Файл описания диапазонов адресов состоит из записей, разделенные пробельными символами. Записи могут быть двух видов:
Пример.
source
10.3.0.0 255.255.0.0
193.124.208.0 255.255.255.0
dest
10.4.16.0 255.255.255.0
193.124.208.0 255.255.255.0
source
10.168.131.0 255.255.255.0
[1] Класс, не хранящий данных, все методы которого — чисто виртуальные.
[2] Имя файла с нужным журналом зависит от настроек демона syslogd. Обычно это /var/log/kern.log.