libipq というライブラリが、ユーザ空間でのパケット操作のために提供 されています。これに関するドキュメントは、現在 man ページの形式で存在します。iptables の開発コンポーネントをビルドし、 インストールする必要があります:
make install-devel
インストールしたら libipq(3) を参照ください。
libipq 用の Perl バインディングである、Perlipq http://www.intercode.com.au/jmorris/perlipq/ にも興味があるかもしれません。そのバインディング自身が、 ライブラリの利用の一例になります。
その他のコード例として:
これは、カーネル側の Netlink ソケットバッファが領域不足に陥っています。 そうなると、ユーザスペースのアプリケーションは、 カーネルから届いたデータを全部は処理できません。
この問題を回避するためにカーネルバッファを今より大きく することは可能ですか?
はい、標準的な Netlink ソケットですので、/proc/sys/net/core に書きこんだり、 sysctl を実行したり、もしくはファイルディスクリプタにおいて SO_RCVBUF ソケットオプションを利用することで受信バッファサイズを調整できます。
アプリケーションができるだけ高速に受信データを読むようにすることも可能です。 パケット全体が必要でないなら、ユーザスペースにコピーするデータサイズ を小さくしてみましょう(ipq_set_mode(3) 参照)。
netfilter コアチームは、望まれる変更や新機能の全てを一覧にした、 TODO リストを管理しています。このリストは anonymous CVS 経由で入手可能で、説明書は netfilter ホームページにあります。 あるいは、CVSweb を使って、 http://cvs.samba.org/cgi-bin/cvsweb/netfilter/TODO/ から取得可能です。
それを公開したい場合は、netfilter-devel メーリングリストまで送ってください。 購読に関する説明書は、 http://lists.samba.org/mailman/listinfo/netfilter-devel/ にあります。
パッチを送る正しいやり方は、以下のようなものです:
もしあなたが新しい拡張を書いたか、もしくは以前からある拡張 に新しいオプションを追加したなら、その新規の拡張/機能に関する 記述を入れて、netfilter-extension-HOWTO を更新するのも良い考えです。 そうすれば、より多くのユーザにあなたが書いた拡張を知らしめますし、 一般ユーザからのフィードバックをより得られるようになります。