[Armadillo:07208] Re: Armadillo-440でnetfilterのnat機能等を組込みたいのですがエラーがでます。

Masakazu Itoh email@hidden
2011年 5月 12日 (木) 10:22:33 JST


竹之下様。

お世話になっております。伊藤です。
パッチの作成ありがとうございました。

作成いただきましたパッチをあてた後
以下の手順でコンパイルエラーはとれました。

●次のようにmake menuconfigを設定
  Customize Kernel Setting
  Networking
  Networking options
  Network packet filering framework(Netfilter)
  ---------------------
  Core Netfilter Configuration
  <*>Netfilter connection tracking support
  <*>"MARK" target support
  <*>"connmark" connection mark match support
  <*>"conntrack" connection tracking match support
  <*>"dscp" and "tos" match support
  <*>"iprange" address range match support
  <*>"limit" match support
  <*>"mark match support
  <*>"owner" match support
  <*>"state" match support
  ---------------------
  IP: Netfilter Configuration
  <*>IPv4 connection tracking support( required for NAT)
  <*>IP tables support(required for filtering/masq/NAT)
  <*>"recent" match support
  <*> Packet filtering
  <*>   REJECT target support

  <*>Full NAT
  <*>  MASQUERADE target support
  <*>  REDIRECT target support
  <*>  NETMAP target support
  <*>packet mangling
  <*>  ECN target support
  <*>  TTL target support
  <*>  CLSTERIP target support
  <*>raw table support

●makeを行うと
  「extensions/libipt_conntrack.c:13:53: error: linux/netfilter_ipv4/     
  ip_conntrack_tuple.h: そのようなファイルやディレクトリはありません
  In file included from extensions/libipt_conntrack.c:15:
  extensions/../include/linux/netfilter_ipv4/ipt_conntrack.h:8:47:
  error: linux/netfilter_ipv4/ip_conntrack.h: そのようなファイルやディレ
  クトリはありません」
  とエラーが出ますので
  http://armadillo.atmark-techno.com/armadillo-300/downloadsから
  linux-2.6.12.5-at8.tar.gzを取得、解凍して
  ip_conntrack_tuple.hとip_conntrack.hを追加。

●makeを行うと
  nf_conntrack_common.hと
  ip_conntrack.hでのredeclarationのエラーが出るので
  ip_conntrack.hの
  enum ip_conntrack_infoとenum ip_conntrack_statusを
  コメントアウト。

●これで、コンパイルエラーはとれましたが
  フラッシュメモリを書き換えてiptablesコマンドSNAT,DNAT関連を
  入力してみるとSNAT、DNATの機能が追加されていなく
  入力エラーではじかれてしまいました。

●それで、SNATとDNATを追加するために
  ディレクトリlinux-2.6.xの.configに記述されている
  CONFIG_NF_NATにあわせて
  atmark-dist/user/iptables/extensions/Makefileの71行目
  ifneq ($(CONFIG_IP_NF_NAT)$(CONFIG_IP_NF_NAT_MODULE),)を
  ifneq ($(CONFIG_NF_NAT)$(CONFIG_IP_NF_NAT_MODULE),)に変更して
  makeしてフラッシュメモリを書き換えてiptablesコマンドSNAT,DNAT関連を
  入力したところエラーがでることなくコマンドは入力されました。


とりあえず、以上、ビルドに関してのご報告です。
これから、iptablesコマンドを使用して分からない点などありましたら
また質問させていただきますのでご教示よろしくお願いいたします。

以上、よろしくお願いいたします。



>Masakazu Itoh さんは書きました:
>> 竹之下様。
>> 
>> お世話になっております。伊藤です。
>> ご回答ありがとうございます。
>> 
>> 現状、iptabelsを組み込めていません。
>> 
>> 状況や試したことを以下に記述しますので、
>> 引き続きご教示よろしくお願いいたします。
>> 
>> 
>> 教えていただきました、
>>> http://git.netfilter.org/cgi-bin/gitweb.cgi?p=iptables.git;a=commitdiff;h=
>>> 40d54756cd8a2705e22b36f7aef03bb2c472a10b
>> を参照させていただき、対象になるファイル
>> libip6t_state.c
>> libipt_DNAT.c
>> libipt_MASQUERADE.c
>> libipt_NETMAP.c
>> libipt_REDIRECT.c
>> libipt_SAME.c
>> libipt_SNAT.c
>> libipt_connbytes.c
>> libipt_connrate.c
>> libipt_conntrack.c
>> libipt_state.c
>> のインクルードファイルのパスを変更して
>> みましたが、nf_nat.hがないというコンパイルエラーがでました。
>こちらの修正も行わないといけないようですね。
>http://git.netfilter.org/cgi-bin/gitweb.cgi?p=iptables.git;a=commitdiff;h=
>978e27e8f8c2e49d0528c6c4ae3a56627fbe8492
>
>> 
>> Armadillo-440用のカーネル(linux-2.6.26-at14.tar.gz)を見ると
>> nf_nat.hは
>>> #include <linux/netfilter/nf_nat.h>
>> ではなく
>> #include <net/netfilter/nf_nat.h>
>> に配置されているようです。
>> とりあえず、#include <net/netfilter/nf_nat.h>
>> と記述してビルドをしてみましたが、
>> 例えば、一例ですが以下のようなエラーがatmark-distの/user/iptable以下を
>> 修整するたびに発生します。
>> from extensions/libipt_MASQUERADE.c:11:
>> /home/atmark/work/dist-work-latest/linux-2.6.26-at14/include/net/
>> netfilter/nf_conntrack_tuple.h:157: 
>> error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before 
>> ‘__nf_ct_tuple_src_equal’
>これは、netfilter/nf_conntrack_tuple.h内の
>
>static inline bool __nf_ct_tuple_src_equal(const struct nf_conntrack_tuple *
>t1,
>
>という行で発生しています。原因は、boolが定義されていないためです。
>
>諸々の問題を解決するためのパッチを作成しました。(添付ファイル)
>
>Atmark-Dist用とlinuxカーネル用に分かれています。以下のように適用してください。
>
>[ATDE ~/]$ cd atmark-dist
>[ATDE ~/atmark-dist]$ patch -p1 < ../atmark-dist-20110326-fix-iptables-build-
>error.patch
>[ATDE ~/atmark-dist]$ cd linux-2.6.x
>[ATDE ~/atmark-dist/linux-2.6.x]$ patch -p1 < ../../linux-2.6.26-at14-fix-
>iptables-build-error.patch
>
>
>> 
>> 
>> それでnetfilterのサイト
>> http://www.netfilter.org/projects/iptables/downloads.html
>> からiptablesをダウンロードして確かめたところ、iptables1.4.3以降が
>> Armadillo-440用のカーネル(linux-2.6.26-at14.tar.gz)で記述されている
>> インクルードパスと一致しているようです。
>> 
>> atmark-dist/user/iptablesを、このiptables1.4.3以降におきかえることが
>> linuxカーネルとiptableのバージョンをあわせるには適正かと思い
>こちらの対応が本筋なのでしょうが、とりあえず上記の方法でご確認いただけます
>か?
>
>> 
>> iptable1.4.10を解凍して、atmark-dist/user/iptablesに置き換えて
>> ./configureを実行してみましたが、それだけでは、
>> やはり、atmark-dist環境にあったMakefileは作成されませんでした。
>> 
>> 上記のようなかたちでiptablesを置き換える際の適切な手段、方法をご教示いた
>> だければ
>> 幸いです。
>> 
>> 以上、よろしくお願いいたします。
>
>-- 
>Koyo Takenoshita
>
>-------------------------------text/plain-------------------------------
>_______________________________________________
>armadillo mailing list
>email@hidden
>http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo



armadillo メーリングリストの案内