2.6.32内核编译流量计数器nfacct(2)

/* 万分注意!从3.x移植过来的checkentry的返回值是int,0为成功,非0为失败,
 * 然则2.6.32的对应返回值是bool,0为失败,非0为成功。
 * 完全相反的API规范,弄反了就panic吧 :(
 **/
static int
nfacct_mt_checkentry(const struct xt_mtchk_param *par)
{
    struct xt_nfacct_match_info *info = par->matchinfo;
    struct nf_acct *nfacct;

nfacct = nfnl_acct_find_get(info->name);
    if (nfacct == NULL) {
        pr_info("xt_nfacct: accounting object with name `%s' "
            "does not exists\n", info->name);
        return 0;
    }
    info->nfacct = nfacct;
    return 1;
}


xt_nfacct.h:cp $3.3/include/linux/netfilter/xt_nfacct.h net/netfilter/xt_nfacct.h

至此,移植空间完成,Makefile的内容为:

obj-m  += nfnetlink_acct.o
obj-m  += nfnetlink.o
obj-m  += xt_nfacct.o

进入net/netfilter目录,通过下面的命令编译:

make -C /lib/modules/`uname -r`/build SUBDIRS=`pwd` modules

然后依次加载nfnetlink.ko,nfnetlink_acct.ko,xt_acct.ko
如此,再次执行nfacct命令试一下吧:

nfacct add test
iptables -A INPUT -s 192.168.0.0/24 -m nfacct --nfacct-name test -j ACCEPT

停顿片刻,保持网络传输,查看流量计数器:

nfacct get test{ pkts = 00000000000000188016, bytes = 00000000000250825515 } = aa;

OK了!
当然,你也可以将结果保存为xml文件的格式,在必要时也可以reset计数器的数值为0。

Ubuntu 13.10 (Saucy Salamander) 内核已升级至 Linux Kernel 3.10 RC5

Linux Kernel 3.4.62 LTS 现已经提供下载

如何在Ubuntu 13.10上安装Linux内核 3.12

Linux Kernel 的详细介绍请点这里
Linux Kernel 的下载地址请点这里

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/58c9b0643ebc37590233408f8759fc3a.html