2015年9月21日 星期一

NuStreams API 如何設定一次多條Streams

先解釋一下我們版卡多條stream的概念。
首先,我們版卡每條stream稱作一個entry槽,每一個entry槽代表可以設定一種封包,裡頭可以設定長度,Gap,內容Payload等等,而其中還有另外兩個欄位,是這樣的架構的:
兩者都是數字,Entry代表目前的槽編號,Next Entry代表下一個Entry槽編號,因此透過這樣架構,可以連結組成,很像鍊結串列,只是最後一個槽的next entry必須返回最初的,形成一個迴路:
觀念上是如圖說明,而實際上,我們也按照這樣設定,在每次設定封包時,填上這兩個值,板卡收到之後會自行串連,就可以達到目的。以下是範例,假設我要讓一個port同時打出4種不同size的封包,那這樣設定:

RMModule_FILLTXPKT_ADDENTRY_T tmpEntry;
memset(&tmpEntry, 0xFF, sizeof(RMModule_FILLTXPKT_ADDENTRY_T));
//......
tmpEntry.packet_len = 64;
tmpEntry.entry_index = 0;
tmpEntry.next_index = 1;
tmpEntry.stream_id = 123;
Nu_RMModule_FillTxPkt_AddEntry(chassis, board, port, tmpEntry);
tmpEntry.packet_len = 256;
tmpEntry.entry_index = 1;
tmpEntry.next_index = 2;
tmpEntry.stream_id = 124;
Nu_RMModule_FillTxPkt_AddEntry(chassis, board, port, tmpEntry);
tmpEntry.packet_len = 512;
tmpEntry.entry_index = 2;
tmpEntry.next_index = 3;
tmpEntry.stream_id = 125;
Nu_RMModule_FillTxPkt_AddEntry(chassis, board, port, tmpEntry);
tmpEntry.packet_len = 1500;
tmpEntry.entry_index = 3;
tmpEntry.next_index = 0;
tmpEntry.stream_id = 126;
Nu_RMModule_FillTxPkt_AddEntry(chassis, board, port, tmpEntry);

最後要返回第0個entry。透過這種設定方式,再送出傳送命令之後,就可以叫Port打出FrameSize=64,256,512,1500的封包了。

沒有留言:

張貼留言