この問題を解決するのに苦労しています。Linuxトンネルドライバとやりとりするプログラムを作成しようとしています。非常に基本的なレベルでは、ネットワークトンネルを介してデータを転送できるアプリケーションを作成したいだけです。しかし、これを達成するためにトンネルドライバを適切にセットアップする方法については、私は完全に犠牲になっています。Linux tunドライバとのインタフェース方法
私はUbuntu 9.04で開発しており、トンネルドライバカーネルモジュールをロードしています。
/dev/net/tun
のデバイスがありますが、/dev/tunX
のデバイスはありません。
tun0: ERROR while getting interface flags: No such device.
私は/dev/net/tun
デバイスを見しようとすると、次のエラーが提示されています:
/sbin/ifconfig tun0 up
を実行するたびに - 私は
ifconfig
を使用して、これらのデバイスを作成することができません基本的には、小さなプログラムを経由して
/dev/tunX
を開こう
cat: /dev/net/tun: File descriptor in bad state.
、シンプル
tun_fd = open("/dev/tun0", O_RDWR)
retu rns -1:アプリケーションはrootとして実行されており、このトンネルデバイスを開けません。 /dev/net/tun
を開くことは可能ですが、代わりに新しい/dev/tunX
デバイスを生成するようには見えません。
したがって、要約すると、Linuxトンネルドライバを使用したいアプリケーションを作成するにはどうすればよいですか?どんな洞察も大変高く評価されます。
ありがとうございます。 〜ロバート
@rmrobins;実際にこれを稼働させるためにあなたは何をしましたか?私はあなたの元の質問に非常によく似た問題があると信じています。私は/ dev/net/tunデバイスを見えるようにしていますが、これを開いてもネットワークインタフェースは生成されません。私はbr_select.cとbr_sigio.cの例を使用しようとしています。 – simon
上記のように、/ dev/net/tunを開きます。次に、ioctlを使用して実際のインタフェース自体を作成します。 ioctlはTUNSETIFFと呼ばれ、引数はstruct ifreq型です。 ifreq構造体のフラグはIFF_TUNに設定する必要があります。 ioctlが返されると、ifreq構造体のifr_nameフィールドは、開かれたインタフェースの名前で設定されます。お役に立てれば! – rmrobins