私が L2TP について話していることに混乱しないでください。私の問題は L2TP に関連していますが、それ自体は L2TP の問題ではありません。それはネットワークの問題です。
バックグラウンド
L2TP で動作するアプリケーションを作成しています。L2TP と Linux の L2TP サブシステムを扱うのはこれが初めてなので、これでうまくいくといいのですが。L2TP イーサネット セッションを作成すると、サブシステムは自動的に仮想ネットワーク インターフェイスを作成します。
インターフェイスを起動した後、Wireshark で確認すると、実際に必要なデータがインターフェイスに送信されます。これはパッケージなしです。イーサネット フレームなどの内部ではなく、L2TP パケットに含まれていたデータ バイトだけです。
デバイスを実際に作成することは制御できませんが、その名前とそのインデックスなどを照会することはできます。これまでのところ、問題ありません。
実際の問題
私の質問は実際には非常に単純です。仮想インターフェイスに送信されたデータをユーザー空間アプリケーションに取得するにはどうすればよいですか?
Unix でのネットワーキングの経験はあまりありませんが、これはかなり単純な問題であり、使用できるファイル記述子を取得するか、またはソケットをそのネットワーク インターフェイスにバインドすることで解決できると思いread
ますrecv
。
これを行うための (gen-)netlink / ioctl API (またはその他のもの) が見つかりませんでした。
私のアプリケーションは C ではなく GO で書かれていますが、C でのソリューションで十分です。この時点で、この問題をプログラムで解決するためのアプローチについて喜んでいます。:)
事前にどうもありがとう