Смекни!
smekni.com

Диссертации утверждена распоряжением по нгу № от 200 г (стр. 9 из 9)

/* Интерфейс, описывающий множество пакетов. */

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() {}

};

Приложение Б.

(обязательное)

Файл описания диапазонов адресов.

Файл описания диапазонов адресов состоит из записей, разделенные пробельными символами. Записи могут быть двух видов:

  1. строка «source» или «dest». Обозначает, что все последующие за этой строкой записи (пока не встретится противоположная строка, либо конец файла) относятся к адресам отправителя или получателя соответственно. Для этих двух параметров можно задать разные наборы диапазонов.
  2. Все, что не является «source» или «dest», трактуется как пары «диапазон адресов» и «маска диапазона». Оба этих поля также могут быть разделены любыми пробельными символами. Они имеют стандартный формат записи адресов в виде четырех чисел от 0 до 255, разделенных точками (маска тоже записывается таким образом, нотация CIDR не поддерживается). Важна очередность задания параметров, поскольку именно с помощью нее система отличает диапазон от маски. Диапазон может идти вслед за флагом «source/dest», либо вслед за маской. Маска должна идти вслед за диапазоном. Флаг «source/dest» не может идти вслед за диапазоном (так как ожидается маска) — этот случай система отлавливает и сообщает об ошибке.

Пример.

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.