我目前正在与pktgen合作,以实现项目的高速数据包生成。我使用的是pktgen版本2.9.5,以及DPDK版本2.1.0。它确实工作得很好(我能够以10 Gb / s的速率生成和发送数据包),直到我尝试使用lua脚本来格式化数据包。
事实上,您可以在源代码中找到的脚本示例似乎并不总是具有预期的行为。最简单的脚本工作得很好(例如,HelloWorld.lua,我也可以使用脚本命令设置数据包大小,速率或突发)
package.path = package.path ..";?.lua;test/?.lua;app/?.lua;"
2
3 pktgen.set("all", "count", 0);
4 pktgen.set("all", "rate", 50);
5 pktgen.set("all", "size", 256);
6 pktgen.set("all", "burst", 128);
7 pktgen.start(0)
(上面的代码确实有效)
但是,我尝试使用表直接定义数据包格式时遇到了问题,如下例所示:
-- Lua uses '--' as comment to end of line read the
2 -- manual for more comment options.
3 local seq_table = { -- entries can be in any order
4 ["eth_dst_addr"] = "0011:4455:6677",
5 ["eth_src_addr"] = "0011:1234:5678",
6 ["ip_dst_addr"] = "10.12.0.1",
7 ["ip_src_addr"] = "10.12.0.1/16", -- the 16 is the size of the mask va lue
8 ["sport"] = 9, -- Standard port numbers
9 ["dport"] = 10, -- Standard port numbers
10 ["ethType"] = "ipv4", -- ipv4|ipv6|vlan
11 ["ipProto"] = "udp", -- udp|tcp|icmp
12 ["vlanid"] = 1, -- 1 - 4095
13 ["pktSize"] = 128 -- 64 - 1518
14 };
15 -- seqTable( seq#, portlist, table );
16 pktgen.seqTable(0, "all", seq_table );
17 pktgen.set("all", "seqCnt", 1);
当我尝试这个脚本时,Pktgen通常会给我一个 未知的Ethertype 0x0000 我在命令行中尝试启动0时出错(0是我用来传输数据包的端口)。 当我尝试main.lua脚本时会出现同样的问题。
长话短说,我很难理解pktgen.seqtable函数是如何工作的,以及为什么它在我的情况下不能正常工作。我没有在这个主题的网上找到任何真正有用的文档。
我用来启动脚本的命令是:
sudo -E $PKTGEN_CMD/pktgen -c 0x7 -n 4 -- -m "1.0,2.1" -f test/set_seq.lua
(test / set_seq.lua是一个脚本示例)。