2015-04-06 71 views
2

我正在尋找一個好的狀態機編譯器來測試一些自定義網絡協議。我查看了一些已有的工具,如Yakindu,Ragel(編譯器),SCXML(語言),但我不確定它們中的任何一個是否可用於網絡協議。用於C的有限狀態機編譯器模擬網絡協議

SCXML(語言)看起來不錯,但我找不到任何專門用於C的編譯器(scxmlcc用於C++)。有誰知道基於SCXML的C編譯器? Yakindu工具看起來很有前途,但我不確定是否可以測試像BGP/OSPF這樣的網絡協議。任何人都可以請給這個指針嗎? Ragel看起來不錯,但我不確定是否可以使用此編譯器生成複雜的網絡協議客戶端。

我特別提到網絡協議的原因是,我也希望能夠在發生'事件'之後執行自定義例程,例如packet_create/packet_send(具有自定義數據包大小)等,作爲'actions'的一部分。

是否需要始終從狀態圖生成代碼或者是否有一種方法可以直接與狀態進行交互? 我對FSM非常新,任何幫助/建議/建議/鏈接將不勝感激。

回答

5

默認Yakindu SCT C代碼生成器生成明確的C代碼,該代碼與具體的執行環境無關。這意味着您可以獲得一段標準的C代碼,您可以手動將它集成到您​​自己的應用程序中。這種手動集成意味着在應用程序和狀態機之間映射事件,操作和變量。此外,您必須正確觸發狀態機的執行。

你可以在user guide找到一些相關信息。您也可以自定義代碼生成器以滿足您的需求,但是如果集成到應用程序中總是看起來相同並且您想要集成多於一個或兩個狀態機,那麼這隻有意義。

因此,如果您提供了一些關於應用程序端API的更多信息,我可以提供一些提示,說明如何與狀態機集成。

2

LOKI是一個新的應用程序,旨在爲程序員和系統管理員提供一種與BGP網絡交互的簡單方法。用它來測試你的OSPF/BGP連接

2

我們剛剛完成了我們的SCXML - > ANSI C轉換。目前,它只做調用。 Here是生成的ANSI C代碼的示例,具有用戶提供的回調和通用腳手架here。 2015年末MacBook [email protected]上單個微步的性能測量結果爲here

請注意,腳手架是在C++ 98中,因爲我們必須連接到數據模型實現才能通過SCXML IRP測試。生成的源代碼是ANSI C。如果要變換SCXML狀態圖表中可以使用盡可能uscxml變換:

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

例如,爲了從SCXML IRP套件打印所生成的C代碼test144上STDOUT:

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

生成的ANSI-C代碼通過所有SCXML IRP測試,但通過調用和自定義I/O處理器。

+0

我們仍然不確定嵌入的API,即掛鉤到您的實際應用程序代碼。如果您有任何建議,請隨時在github上發佈[發佈問題](https://github.com/tklab-tud/uscxml/issues)。 – sradomski 2016-01-29 10:01:08