用于C的有限状态机编译器模拟网络协议



我一直在寻找一个好的状态机编译器,以便测试一些自定义的网络协议。我已经看了一些工具,如Yakindu、Ragel(编译器)、SCXML(语言),但我不确定它们中是否有任何一个可以用于网络协议。

SCXML(语言)看起来不错,但我找不到任何专门针对C的编译器(scxmlcc是针对C++的)。有人知道基于SCXML的C编译器吗?Yakindu工具看起来很有前景,但我不确定像BGP/OSF这样的网络协议是否可以测试。有人能对此提出建议吗?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测试。生成的源代码是ANSI C。如果您想转换SCXML状态图,可以使用uscxml转换作为:

$ 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代码通过了除调用和自定义I/O处理器测试之外的所有SCXML IRP测试。

LOKI是一个新的应用程序,旨在为程序员和系统管理员提供一种与BGP网络交互的简单方式。使用它来测试您的OSPF/BGP连接以及

最新更新