2015-04-06 3 views
2

Я искал хороший компилятор конечных автоматов, чтобы протестировать некоторые пользовательские сетевые протоколы. Я посмотрел на несколько инструментов, таких как Yakindu, Ragel (компилятор), SCXML (язык), но я не был уверен, можно ли их использовать для сетевых протоколов.компилятор конечного автомата для C для моделирования сетевых протоколов

SCXML (язык) выглядит хорошо, но я не смог найти компиляторы специально для C (scxmlcc для C++). Кто-нибудь знает компилятор для C на основе SCXML? Инструмент Yakindu выглядит многообещающим, но я не уверен, что можно протестировать сетевые протоколы, такие как BGP/OSPF. Может ли кто-нибудь прокомментировать это? Ragel также выглядит хорошо, но опять же я не уверен, что с помощью этого компилятора можно сгенерировать сложные клиенты сетевого протокола.

Причина, по которой я упоминал сетевые протоколы, заключается в том, что я также хочу иметь возможность выполнять пользовательские подпрограммы, такие как packet_create/packet_send (с пользовательскими размерами пакетов) и т. Д. Как часть «действий» после возникновения «события».

Нужно ли всегда генерировать код из графика состояний или есть способ прямого взаимодействия с состояниями? Я очень новичок в FSM, любая помощь/совет/предложение/ссылки будут очень благодарны.

ответ

5

По умолчанию генератор кода C генерирует простой код C, который является агностиком конкретной среды выполнения. Это означает, что вы получаете кусок стандартного кода C, который вы можете интегрировать в свое приложение вручную. Эта ручная интеграция означает отображение событий, операций и переменных между вашим приложением и конечным автоматом. Кроме того, вам необходимо правильно запустить выполнение конечного автомата.

Вы можете найти информацию об этом в user guide. Вы также можете настроить генераторы кода для соответствия вашим потребностям, но это имеет смысл, если интеграция в приложение всегда выглядит одинаково, и вы хотите интегрировать более одного или двух состояний.

Итак, если вы предоставите дополнительную информацию о API-интерфейсе приложения, я могу дать некоторые подсказки по интеграции с конечным автоматом.

2

LOKI - это новое приложение, предназначенное для простого общения программистов и системных администраторов с сетями BGP. Используйте его для проверки соединений OSPF/BGP, а также

2

Мы только что закончили преобразование SCXML -> ANSI C. В настоящее время он делает все, кроме вызовов. Here представляет собой образец сгенерированного кода ANSI C с пользовательскими обратными вызовами и общими лесами here. Измерения производительности для одного микрошага в конце 2015 года MacBook Pro @ 3,1 ГГц: here.

Обратите внимание, что строительные леса находятся на C++ 98, поскольку мы должны были подключиться к реализации модели данных для прохождения тестов IRP SCXML. Сгенерированный источник - ANSI C. Если вы хотите, чтобы преобразовать SCXML состояние-диаграммы можно использовать uscxml-преобразования, как:

$ uscxml-transform -tc -i FILE_OR_URL -o GENERATED_HERE 

Например, чтобы напечатать сгенерированный код C для test144 из SCXML IRP пакета на STDOUT:

$ uscxml-transform -tc -i https://raw.githubusercontent.com/tklab-tud/uscxml/master/test/w3c/ecma/test144.scxml 

Сгенерированный код ANSI-C передает все тесты IRP SCXML, но те, которые предназначены для вызовов и пользовательских процессоров ввода-вывода.

+0

Мы по-прежнему не уверены в отношении API для внедрения, т. Е. Подключаем ваш фактический код приложения.Если у вас есть какие-либо предложения, не стесняйтесь [отправить сообщение] (https://github.com/tklab-tud/uscxml/issues) в github. – sradomski

Смежные вопросы