我一直在寻找一个好的状态机编译器来测试一些自定义的网络协议。我已经看过一些工具,例如Yakindu,Ragel(编译器),SCXML(语言),但不确定是否可以将它们用于网络协议。
SCXML(语言)看起来不错,但是我找不到任何专门用于C的编译器(scxmlcc用于C ++)。有谁知道基于SCXML的C编译器?
Yakindu工具看起来很有希望,但是我不确定是否可以测试BGP / OSPF之类的网络协议。任何人都可以对此提出任何建议吗?
Ragel看起来也不错,但是我不确定使用此编译器是否可以生成复杂的网络协议客户端。
我之所以特别提到网络协议,是因为我还希望能够在"事件"发生后作为"动作"的一部分执行自定义例程,例如packet_create / packet_send(具有自定义数据包大小)等。
我是否需要始终从状态图生成代码,或者是否可以直接与状态交互?
我对FSM非常陌生,任何帮助/建议/建议/链接都将不胜感激。
默认的Yakindu SCT C代码生成器生成与具体执行环境无关的普通C代码。这意味着您将获得一段标准的C代码,可以将它们手动集成到自己的应用程序中。这种手动集成意味着在应用程序和状态机之间映射事件,操作和变量。另外,您必须正确触发状态机执行。
您可以在用户指南中找到有关此信息的一些信息。您还可以自定义代码生成器以满足您的需求,但这仅在集成到应用程序中的外观始终相同并且您想要集成多个一或两个状态机时才有意义。
因此,如果您提供有关应用程序侧API的更多信息,那么我可以提供一些如何与状态机集成的提示。
我们刚刚完成了SCXML-> ANSI C转换。当前,它执行除调用之外的所有操作。这是生成的ANSI C代码的示例,带有用户提供的回调和此处的通用支架。此处是2015年末MacBook Pro@3.1GHz上单个微步的性能测量结果。
注意,脚手架是在C ++ 98中,因为我们必须连接到数据模型实现以通过SCXML IRP测试。生成的源虽然是ANSIC。如果要转换SCXML状态图,可以将uscxml-transform用作:
$ uscxml-transform -tc -i FILE_OR_URL -o GENERATED_HERE
例如,要在STDOUT上从SCXML IRP套件打印为test144生成的C代码:
$ uscxml-transform -tc -i https://raw.githubusercontent.com/tklab-tud/uscxml/master/test/w3c/ecma/test144.scxml
生成的ANSI-C代码通过了所有SCXML IRP测试,但通过了调用和自定义I / O处理器的测试。
对于嵌入的API,我们仍然不确定,即是否要挂接到您的实际应用程序代码中。 如果您有任何建议,请随时在github上发布问题。
LOKI是一个新应用程序,旨在为程序员和系统管理员提供一种与BGP网络交互的简便方法。也用它来测试OSPF / BGP连接