pktgen的安装与使用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
pktgen的安装与使用
0顶
0踩
简单的vim 配置| Linux如何在系统启动时自动加载核模块
2011-03-31
pktgen的安装与使用
脚本CC++
pktgen的安装与使用系统环境:fefora core 12 如果你和我一样,在pktgen面前是个新人。是不是也曾遇到下面的问题:
(1)以为pktgen和tcpdump一样是Linux下的工具软件;(2)后来,明白了pktgen不是工具,而是核模块,但是不知道如何加载;
(3)加载后,却不会使用,并且一度一位pktgen无法与网络接口eth0建立映射关系;那么,我写下的东西可能对你学习pktgen有所帮助。因为,我也在google上搜了一同,却没有很好的对于pktgen讲解的文档。 A 首先,pktgen
是Linux下的一个核模块,并不是工具软件。所以,不能通过在命令行输入pktgen的方式运行。
那么,我的系统默认pktgen不是自动加载进核,所以,如果你和我有一样的情况,就需要自己手动添加pktgen入核。查看pktgen是否在核命令:$ lsmod | grep pktgen 加载pktgen模块入核的命令:$ modprobe pktgen 此时,就会不禁想到,加载的模块文件到底在哪。我的系统位于
/lib/modules/核版本号/kernel/net/core/pktgen.ko B 加载成功后,看看pktgen模块的线程是不是已经运行了(更准确的说,是不是处于sleep状态)。$ ps aux | grep pktgen 看到如下容,说明pktgen的线程已经启动了。线程个数与cpu核数相关,本机cpu双核,所以两个线程。root 2061 0.0 0.0 0 0 ? S< Mar30 0:28 [kpktgend_0]
root 2062 0.0 0.0 0 0 ? S< Mar30 0:00 [kpktgend_1] C 然后,pktgen.txt上说可以检测下面三个文件的信息来了解pktgen
/proc/net/pktgen/pgctrl
/proc/net/pktgen/kpktgend_X
/proc/net/pktgen/ethX 但是,我发现自己主机中并没有/proc/net/pktgen/ethX(X代表编号,例如接口eth0或eth1)。此时,我以为是不是
pktgen没有和网络接口eth0建立关系呢?难道是模块有问题?其实,并不是这样,因为pktgen的运行需要脚本来驱
动。因为我运行了网上的实例脚本pktgen.conf-1-1,但是也没有获得预期的结果。
/proc/net/pktgen/ethX还是不存在。一度认为pktgen.c编码有问题,因为我看到了本机中,之有eth0网络接口。命令如下:$ dmesg | grep pktgen 输出结果:pktgen: no such netdevice: "eth1" pktgen.conf-1-1下载地址:
ftp://robur.slu.se/pub/Linux/net-development/pktgen-t esting/examples/ D 最后我终于发现,既不是源码pktgen.c 的问题,也不是pktgen模块的问题。原因在于,驱动脚本pktgen.conf-1-1中的网络接口配置与我的本机的不符所致。pktgen.conf-1-1源码如下:#! /bin/sh #modprobe pktgen function pgset() {
local result echo $1 > $PGDEV
result=`cat $PGDEV | fgrep "Result: OK:"`
if [ "$result" = "" ]; then
cat $PGDEV | fgrep Result:
fi
} function pg() {
echo inject > $PGDEV
cat $PGDEV
} # Config Start Here
----------------------------------------------------------- # thread
config
# Each CPU has own thread. T wo CPU exammple. We add eth1, eth2 respectivly.
PGDEV=/proc/net/pktgen/kpktgend_0
echo "Removing all devices"
pgset "rem_device_all"
echo "Adding eth1"
pgset "add_device eth1" # 就在这一句,默认的配置网络接口为eth1,但是我的本机并没有这个接口,而是eth0。所以,应该自己手动修改。
echo "Setting max_before_softirq 10000"
pgset "max_before_softirq 10000" # device config
# delay 0 means maximum speed. CLONE_SKB="clone_skb 1000000"
# NIC adds 4 bytes CRC
PKT_SIZE="pkt_size 60" # COUNT 0 means forever
#COUNT="count 0"
COUNT="count 10000000"
DELAY="delay 0" PGDEV=/proc/net/pktgen/eth0
echo "Configuring $PGDEV"
pgset "$COUNT"
pgset "$CLONE_SKB"