更多请访问 http://www.webpersonaldeveloper.cn

摘要:

在redhat 上部署dummynet 需要将ipfw 编译为内核模块,而ipfw需要调用linux kernel的一些函数。

linux kernel版本在不断提升,相关的数据结构也在变化。所以可能需要根据你要部署的系统内核版本,来调整参数

提醒

如果你要部署在Redhat6,CentOS6等内核版本比较低的平台,不必参考下面的部署流程。

这篇文章就可以满足的你要求

http://xmodulo.com/how-to-install-dummynet-on-centos.html

2016-08-18 update

不需要下载和系统同一版本的内核,因为并不是真正的编译内核。netfilter 默认就在内核中启动。

所以只用下面即可,可以跳过准备内核版本这步骤

yum install kernel-devel
yum group install "Development Tools

如果遇到问题,再返回这篇进一步学习

dummynet简介

dummynet 是linux下面(现在也可以部署在window下)一款开源的网络带宽控制工具,

在网站上线前,可能需要测试带宽对站点的影响。而dummynet就是为此而生。

部署流程

准备内核版本

  • 参看系统内核版本

    uname -r

我们需要将IPFW编译成内核模块,请确保

IPFW用到的内核源码版本同你LINUX系统运行内核版本一致。

我的linux系统版本redhat7.2,内核版本3.10.0-327.13.1.el7.x86_64

  • 下载此版本的内核源码包

    kernel-3.10.0-327.13.1.el7.src.rpm

http://vault.centos.org/7.2.1511/updates/Source/SPackages/

使用wget或者直接下载放在/usr/src/kernels 目录

  • 解压源码包

    `

    rpm2cpio kernel-3.10.0-327.13.1.el7.src.rpm |cpio -div

    tar xvf linux-3.10.0-327.13.1.el7.tar.xz

    cd 3.10.0-327.13.1.el7.x86_64

    make oldconfig

    make prepare

    make scripts

    `

编译dummynet

git clone https://github.com/FS1360472174/dummynet.git
cd dummynet
make KERNELPATH=/usr/src/kernels/3.10.0-327.13.1.el7.x86_64

加载ipfw 模块

cd kipfw-mod
insmod ipfw_mod.ko
cd dummy/ipfw
cp ipfw /sbin
chmod 700 /sbin/ipfw

验证ipfw

ipfw add pipe 2 in proto tcp

optional,将ipfw 设置为boot启动

 cp ipfw_mod.ko /lib/modules/3.10.0-327.13.1.el7.x86_64/kernel/net/netfilter
 depmod
 sh -c 'echo modprobe ipfw_mod >> /etc/rc.modules'
 chmod +x /etc/rc.modules

问题分析

1.insmod: ERROR: could not insert module ipfw_mod.ko: Invalid module format

解决:

modinfo ipfw_mod.ko 看下vermagic版本是不是uname -r的版本。

然后重新编译ipfw 模块

make clean
make KERNELPATH=/usr/src/kernels/3.10.0-327.13.1.el7.x86_64

如果仍然不行在/usr/src/kernels/$source 执行make,然后reboot

2.ipfw: getsockopt(IP_FW_ADD): Protocol not available

解决:

ipfw 模块未加载到内核

可以lsmod |grep ipfw看下

需要重述上述步骤,将ipfw编译进内核模块

3.编译模块时报错

类似于ipfw2_mod.c line 848 nf_hook_ops.hk struct have erors.

解决:

Hook structure 在各个版本的linux中定义不一样,所以如果是从dummynet 站点中下载的

老的dummynet 包或者从这个download下来的包可能就有错误。

https://github.com/luigirizzo/dummynet

建议你查看下当前所用系统的hook 结构

/usr/src/kernels/linux-3.10.0-327.4.5.el7/include/linux/netfilter.h

定义了nf_hook_ops,nf_hookfn的结构

struct nf_hook_ops {

struct list_head list;

    /* User fills in from here down. */
    nf_hookfn       *hook;
    struct module   *owner;
    void            *priv;
    u_int8_t        pf;
    unsigned int    hooknum;
    /* Hooks are ordered in ascending priority. */
    int             priority;

    /* Reserved for use in the future RHEL versions. Set to zero. */
    unsigned long   __rht_reserved1;
    unsigned long   __rht_reserved2;
    unsigned long   __rht_reserved3;
    unsigned long   __rht_reserved4;
    unsigned long   __rht_reserved5;
};

typedef unsigned int nf_hookfn(const struct nf_hook_ops *ops,
   struct sk_buff *skb,
   const struct net_device *in,
   const struct net_device *out,
#ifndef __GENKSYMS__
   const struct nf_hook_state *state
#else
   int (*okfn)(struct sk_buff *)
#endif
   );

参考:

http://vault.centos.org/7.2.1511/updates/Source/SPackages/kernel-3.10.0-327.4.5.el7.src.rpm

https://www.rpmfind.net/linux/RPM/centos/updates/7.2.1511/x86_64/Packages/kernel-3.10.0-327.13.1.el7.x86_64.html

http://xmodulo.com/how-to-install-dummynet-on-centos.html

https://access.redhat.com/articles/3078

redhat7 上安装dummynet的更多相关文章

  1. RedHat7上安装MySQL5.7.16

    1.查看系统中是否已将安装MySQL,如果安装了,需要卸载. [root@chenguo etc]# rpm -qa|grep -i mysql 2.创建用户和组 [root@chenguo ~]# ...

  2. RedHat7上安装MariaDB

    编译安装MariaDB 下载MariaDB# wget http://mirrors.opencas.cn/mariadb//mariadb-10.1.8/source/mariadb-10.1.8. ...

  3. RedHat7上安装PHP

    编译安装PHP 下载PHP# wget http://cn2.php.net/distributions/php-7.0.0.tar.gz 解压缩PHP# tar -zxvf php-7.0.0.ta ...

  4. 在虚拟机VMware上安装Linux系统教程

    目录: 一.       CentOS的安装 二.       RedHat的安装 三.       VMwaretools的安装 此处提供CentOS和RedHat两个版本的系统安装流程,至于选哪个 ...

  5. [转帖]redhat7.6Linux安装Oracle19C完整版教程

    redhat7.6Linux安装Oracle19C完整版教程 https://www.oracle.com/technetwork/database/enterprise-edition/downlo ...

  6. RedHat7.4安装在个人电脑(笔记本)中安装遇到的问题总结

    RedHat7.4安装在个人电脑(笔记本)中安装 以下纯属个人在安装过程中遇到问题的一些总结,如果有描述不恰当的地方,还请给予指出,欢迎大家评论和交流. 物理主机的配置: 硬件配置: 华硕A456U笔 ...

  7. 在centos7上安装Jenkins

    在centos7上安装Jenkins 安装 添加yum repos,然后安装 sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins ...

  8. 记录在Windows上安装和使用Oracle数据库过程中的坑

    1.安装Oracle Oracle软件是免费的,可以去官网下载相应的安装包.但是如果用于商业用途需要购买License.官网上针对各种平台,32位和64位都有,如果在Windows一般会下载到两个文件 ...

  9. raspberrypi(树莓派)上安装mono和jexus,运行asp.net程序

    参考网址: http://www.linuxdot.net/ http://www.cnblogs.com/mayswind/p/3279380.html http://www.raspberrypi ...

随机推荐

  1. StopAllSounds

    10月3日,在杭州市西湖景区,一只小松鼠不停地接受一道道食物,花生.玉米.饼干,可谓来者不拒,憨态可掬的模样吸引了众多围观者...Description   小松鼠开心地在树之间跳跃着,突然她停了下来 ...

  2. ●洛谷P2606 [ZJOI2010]排列计数

    题链: https://www.luogu.org/problemnew/show/P2606题解: 组合数(DP),Lucas定理 首先应该容易看出,这个排列其实是一个小顶堆. 然后我们可以考虑dp ...

  3. ●杜教筛入门(BZOJ 3944 Sum)

    入门杜教筛啦. http://blog.csdn.net/skywalkert/article/details/50500009(好文!) 可以在$O(N^{\frac{2}{3}})或O(N^{\f ...

  4. 51 nod 1406 与查询

    1406 与查询 题目来源: CodeForces 基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题   有n个整数.输出他之中和x相与之后结果为x的有多少个.x从0 ...

  5. 51 nod 1188 最大公约数之和 V2

    1188 最大公约数之和 V2 题目来源: UVA 基准时间限制:2 秒 空间限制:262144 KB 分值: 160 难度:6级算法题   给出一个数N,输出小于等于N的所有数,两两之间的最大公约数 ...

  6. hdu 5392

    Sample Input 2 3 1 3 2 6 2 3 4 5 6 1   Sample Output 2 6 题意:给一个转置求它的循环长度 题解:分解成循环求最小公倍数 #include< ...

  7. 测试修改gcs_server_processes参数

    RAC部署前提是要求各节点的主机硬件一致的,但实际如果碰上一些不规范的客户,经费有限或是扩容时已买不到同样的机器,那么采购的机器会有一些区别,比如RAC各节点的CPU核数有区别,那么默认的gcs_se ...

  8. 深入分析synchronized的实现原理

    基础概念 synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时可以保证共享变量对内存可见性. Java中每一个对象都可以作为锁,这是synchronize ...

  9. python中decode

    这 是因为遇到了非法字符--尤其是在某些用C/C++编写的程序中,全角空格往往有多种不同的实现方式,比如\xa3\xa0,或者\xa4\x57,这些 字符,看起来都是全角空格,但它们并不是" ...

  10. Java Native方法

    一. 什么是Native Method   简单地讲,一个Native Method就是一个java调用非java代码的接口.一个Native Method是这样一个java的方法:该方法的实现由非j ...