Кхе. А ты думаешь это реально? Я что-то не встречал алгоритмов перевода из псевдокода инструкций в дерево. Рассматривавшийся пример hipac - он по фиксированному набору чисел делает, никакого произвольного набора полей, а тем более строк или даже регэксопв для SIP, там и близко нет. Такая тема тянет на докторскую, пожалуй =) Сочинить такое своё я пожалуй точно ниасилю.
ах да. я совсем забыл сказать-уточнить. дерево (radix tree роутинга, условно говоря) используется для выбора правил, с которым собственно и идет сравнение. т.е. в дереве в узлах указывается какой бит следует анализировать, приходим к узлу в котором реальное правило (типа смещение в пакете, длинна, маска, образец). если правило под пакет не подошло -- дерево используется для выбора альтернативного, более общего правила.
т.е. деревом анализируются отдельные биты, что бы выбрать конкретное правило для полного сопоставления с пакетом. поэтому на этапе работы с пакетом код файрвола может не заморачиваться детальными знаниями о протокле -- его интересуют только смещения и цепочки битов. а весь анализ был проведен в userland когда формировалось дерево и по описанию протокола формировались смещения битовых цепочек для анализа. разумеется из этих цепочек самих по себе правила не востановить, то вместе с ними можно хранить исходное, текстовое представление этих правил.
no subject
ах да. я совсем забыл сказать-уточнить.
дерево (radix tree роутинга, условно говоря) используется для выбора правил, с которым собственно и идет сравнение. т.е. в дереве в узлах указывается какой бит следует анализировать, приходим к узлу в котором реальное правило (типа смещение в пакете, длинна, маска, образец). если правило под пакет не подошло -- дерево используется для выбора альтернативного, более общего правила.
т.е. деревом анализируются отдельные биты, что бы выбрать конкретное правило для полного сопоставления с пакетом. поэтому на этапе работы с пакетом код файрвола может не заморачиваться детальными знаниями о протокле -- его интересуют только смещения и цепочки битов. а весь анализ был проведен в userland когда формировалось дерево и по описанию протокола формировались смещения битовых цепочек для анализа. разумеется из этих цепочек самих по себе правила не востановить, то вместе с ними можно хранить исходное, текстовое представление этих правил.