MoonGen - 灵活又高性能的收发包工具

MoonGen结合DPDK的高性能和Lua的灵活性,提供了一个无需编译即可修改收发包逻辑的工具。使用LuaJit进行即时编译,实现复杂网络测试逻辑。编译和运行包括安装cmake,下载MoonGen源码,配置DPDK选项,加载DPDK模块等步骤。运行时通过Lua脚本来控制收发包行为,如pktgen.lua示例。MoonGen附带不同协议的demo脚本和详细的API文档,适合创建自定义的网络流量场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MoonGen是一个高性能的基于CPU的收发包工具
DPDK保证其性能强大,用单核x86 CPU可以收发64B 10G
Lua是比较流行的小巧灵活的脚本语言,收发包逻辑修改后不用编译,直接运行,因为是脚本。
LuaJit是Lua的x86即时编译工具。
这三兄弟组合就是灵活的MoonGen引擎,运行Lua脚本用来执行收发包逻辑,很容易写出比专业测试仪还复杂的逻辑。

编译步骤:
[list]
[*]安装cmake
[*]git clone https://github.com/emmericp/MoonGen.git
[*]./build.sh
[*]如果DPDK KNI模块编译出错, 打开libmoon/deps/dpdk/x86_64-native-linuxapp-gcc/.config文件,修改:CONFIG_RTE_KNI_KMOD=n
[/list]

运行基本上就是DPDK常规启动步骤:
[list]
[*]sudo modprobe uio;
[*]sudo insmod libmoon/deps/dpdk/x86_64-native-linuxapp-gcc/kmod/igb_uio.ko
[*]sudo ./bind-interfaces.sh
[*]sudo ./setup-hugetlbfs.sh
[*]sudo ./build/MoonGen libmoon/examples/pktgen.lua 0
[/list]

examples目录下有更多demo脚本, 不同协议包的操作api参见:[url]https://github.com/libmoon/libmoon/tree/master/lua/proto[/url]


一个最简单的vlan报文收发Lua脚本:
local lm     = require "libmoon"
local device = require "device"
local stats = require "stats"
local log = require "log"
local memory = require "memory"

function master(args,...)
log:info("VLAN packet generator")
local dev = device.config{port = 0,txQueues = 1,rxQueues = 1}
device.waitForLinks()
stats.startStatsTask{devices = {dev}}
lm.startTask("txVlanSlave", dev:getTxQueue(0))
lm.waitForTasks()
end

function txVlanSlave(queue)
local mempool = memory.createMemPool(function(buf)
buf:getEthVlanPacket():fill{
ethSrc = queue, -- MAC of the tx device
ethDst = "01:23:45:67:89:ab",
ethVlan = 1111,
}
end)
local bufs = mempool:bufArray()
while lm.running() do
bufs:alloc(60) -- Packet size
-- for i, buf in ipairs(bufs) do
-- local pkt = buf:getEthVlanPacket();
-- pkt.eth:setVlanTag(i)
-- end
queue:send(bufs)
end
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值