使用Lua脚本运行Pktgen
2020-8-4 12:19:59
收藏:0
阅读:198
评论:1
我目前正在使用 pktgen 实现项目的高速数据包生成。 我使用的是 2.9.5 版本的 pktgen,还有 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 是一个脚本示例)。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
我已经进行了小的修改,使得数据包生成中能够启用
vlan,请参考以下更改:local seq_table = { -- 可以按任意顺序输入条目 ["eth_dst_addr"] = "0011:4455:6677", ["eth_src_addr"] = "0011:1234:5678", ["ip_dst_addr"] = "10.12.0.1", ["ip_src_addr"] = "10.12.0.1/16", -- 16表示掩码大小 ["sport"] = 9, -- 标准端口号 ["dport"] = 10, -- 标准端口号 ["ethType"] = "ipv4", -- ipv4|ipv6|vlan ["ipProto"] = "udp", -- udp|tcp|icmp ["vlanid"] = 1100, -- 1 - 4095 ["pktSize"] = 128 -- 64 - 1518 }; -- seqTable( seq#, portlist, table ); pktgen.seqTable(0, "all", seq_table ); pktgen.vlan("all", "enable"); pktgen.set("all", "seqCnt", 1);执行修改后的脚本不会产生
Pktgen将通常在我尝试在命令行中启动0(0是我用于传输数据包的端口)时给出未知的以太类型0x0000错误。注意:在pktgen文档第75页提到了解决范围和vlan id问题的修复版本
3.0.01。因此,建议使用最新的pktgen(我已经在PKTGEN 21.11.0上进行了测试)。