2

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

SCXML(language) 看起来不错,但我找不到任何专门用于 C 的编译器(scxmlcc 用于 C++)。有谁知道基于 SCXML 的 C 编译器?Yakindu 工具看起来很有希望,但我不确定是否可以测试 BGP/OSPF 等网络协议。任何人都可以请给出任何指示吗?Ragel 看起来也不错,但我再次不确定是否可以使用此编译器生成复杂的网络协议客户端。

我特别提到网络协议的原因是,我还希望能够在“事件”发生后执行自定义例程,例如 packet_create/packet_send(具有自定义数据包大小)等,作为“操作”的一部分。

我是否需要始终从状态图中生成代码,或者有没有办法直接与状态交互?我对 FSM 很陌生,任何帮助/建议/建议/链接都将不胜感激。

4

3 回答 3

5

默认的Yakindu SCT C 代码生成器生成与具体执行环境无关的纯 C 代码。这意味着您可以获得一段标准 C 代码,您可以手动将其集成到您自己的应用程序中。这种手动集成意味着在应用程序和状态机之间映射事件、操作和变量。此外,您必须正确触发状态机执行。

您可以在用户指南中找到一些相关信息。您还可以自定义代码生成器以满足您的需求,但这只有在与应用程序的集成看起来始终相同并且您希望集成多于一两个状态机时才有意义。

因此,如果您提供有关应用程序端 API 的更多信息,我可以提供一些提示如何与状态机集成。

于 2015-04-29T07:16:51.587 回答
2

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

于 2015-05-28T06:45:06.947 回答
2

我们刚刚完成了 SCXML -> ANSI C 转换。目前,除了调用之外,它什么都做。是生成的 ANSI C 代码示例,其中包含用户提供的回调和此处的通用脚手架。此处为 2015 年末 MacBook Pro@3.1GHz 上的单个微步的性能测量。

请注意,脚手架在 C++98 中,因为我们必须连接到数据模型实现才能通过 SCXML IRP 测试。生成的源代码是 ANSI C。如果要转换 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 处理器的测试除外。

于 2016-01-28T16:42:25.917 回答