iptables 交叉编译

本文讲述了作者在移植iptables过程中遇到的困难,主要问题是由于copy_to_user()函数导致的“target error”。在尝试不同版本和编译环境后,发现在特定环境下编译的iptables可以正常运行。文章提供了iptables的交叉编译configure命令和安装路径。
摘要由CSDN通过智能技术生成

最近在移植iptables,linux下强大的防火墙配置工具,被一个bug死死的卡了一周。。。

开始我是在虚拟机上编译的iptables(这里用的是mipsel-linux 交叉编译工具),拷到龙芯目标板上运行,一直报错: "target error" 。

后来我在代码里跟进去发现错误的原因是iptables查表的时候,使用的是copy_to_user(), 把内核空间的数据拷贝到用户空间,数据的定位都是通过offset,并使用了一堆算法。想通过代码解决这个问题感觉好难。

我在网上搜了下这个错误的原因,都说是下面这个结构体的对齐问题。1.4.0版本之前出现这个问题,都是通过改这个结构体解决的。

/* this is a dummy structure to find out the alignment requirement for a struct
 * containing all the fundamental data types that are used in ipt_entry,
 * ip6t_entry and arpt_entry.  This sucks, and it is a hack.  It will be my
 * personal pleasure to remove it -HW
 */
struct _xt_align {
        __u8 u8;
        __u16 u16;
        __u32 u32;
        __u64 u64;
};

#define XT_ALIGN(s) (((s) + (__alignof__(struct _xt_align)-1))  \
                        & ~(__alignof__(struct _xt_align)-1))
不同平台边界对齐的大小是不一样的&
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值