問題タブ [netlink]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 3.X Linux カーネルを使用した C 言語の Netlink ソケット
こんにちは、私はNetlinkソケットを3.2 Linux カーネルで動作させることに取り組んでいますが、その方法がわかりません。Netlinkソケットの基本の例を探してみましたが、見つかった例はすべて2.6 カーネル用のようです。
私が見つけようとしているのは、Netlink ソケットを使用して、カーネル モジュールからユーザー モード アプリケーションに、またはその逆に情報を送信する方法です。
どんな助けでも大歓迎です。ありがとう!
linux-kernel - デーモンモードで netlink_unicast return errno -111 (接続が拒否されました)
ユーザー空間で実行されているデーモン プロセスと通信するために、Netlink を使用する Linux カーネル モジュールがあります。
開発段階では、デーモン実行可能ファイルを通常のプロセスのように (を呼び出さずにfork()
) 常に実行しており、すべて正常に動作していました。
現在、主な動作の開発は終了しているので--daemon
、メソッドを呼び出す引数を実装していますfork()
(またsetsid()
、リンクhttp://www.thegeekstuff.com/2012/02/c-daemon-process/で説明されているように) ) 通常のプロセスを続行する直前に。
次のステップは、Netlink ソケットを初期化した後のデーモンが Linux カーネル モジュールを呼び出し、これがメッセージをプッシュするためにデーモンの PID を保存することです。Linux カーネル デーモンは、デーモン プロセスからメッセージを正しく受信しますが、netlink_unicast()
エラー番号 -111 (接続が拒否されました) を返すメッセージを使用してメッセージを送信できません。
Linux カーネル モジュールが受け取った PID を確認しましたが、フォークされた後のデーモンと同じで、正しいように見えます。
recvmsg()
デーモン プロセスが fork されると、Linux Kernel Module から(メソッドを使用して) メッセージを受信できなくなる理由を知っていますか?
c - netlink_kernel_create が最新の Linux カーネルで動作しない
kernel
netlink 関数を使用している古いモジュールのコンパイル中にコンパイラ エラーが発生します。
以前は正常に動作していましたが、現在このエラーが発生しています。
OS情報
linux - Net Link Linux ユーザー コード バインド ソケット呼び出しは、マルチキャスト グループ ID (ゼロ以外の値) に対して常に失敗します。
こんにちは、ユニキャスト (src_addr.nl_groups = 0;) ですべて正常に動作するネット リンク ユーザー コードとカーネル コードを実装しようとしています。マルチキャストの場合、ゼロ以外の src_addr.nl_groups 値の場合、ユーザー コード バインド呼び出しは常に失敗します。マルチキャストにどのような価値を置き、さらにどのように進めるかは本当にわかりません。カーネル ソース ツリーで netlink_broadcast の使用状況を確認したので、同じグループ ID 値 (RTMGRP_LINK) をここに入れます。ユニキャストの場合、インターネットで多くのヘルプが見つかりましたが、マルチキャストの場合はそうではないと思います。だから私がさらに進むのを手伝ってください。
取得中のエラーは次のとおりです。
bind: そのようなファイルやディレクトリはありません
./a.out: ソケット (3) をバインドできません。エラー: -1: そのようなファイルまたはディレクトリはありません
linux - netlink ソケットを作成できません: プロトコルがサポートされていません
libipq ライブラリと一緒に netfilter を使用して IPv6 パケットをインターセプトする例を見つけました。
まず、ipq_handle 構造体を宣言して作成します。
対応する die() 関数は次のようになります
ただし、プログラムが正しく実行されず、次のメッセージが生成されます。
通行人: netlink ソケットを作成できません: プロトコルがサポートされていません
誰でも問題の考えられる原因を知っていますか?
linux - m フラグと o フラグが Linux に格納される場所
最近受信したRouter Advertisementのmフラグとoフラグの値を知りたいです。カーネルのソースコードからmフラグとoフラグが格納されていることがわかりました。
次に、ioctl や proc ファイルシステム、またはその他の方法を使用して、これらの値を取得できるはずです。どなたかその方向を教えてください。
c - たとえば、netlink のソース コードはどこにありますか?
netlink の API の定義を読みたいのですが、sys/socket.h、linux/netlink.h などのヘッダー ファイルしか見つかりません。.c ファイルはどこにありますか?
c - netlink ライブラリを使用してコマンドをネットワーク インターフェイスに送信する方法
私はwifi関連のプロジェクトを開始しており、Linux ioctl呼び出しで完了しました。ioctl が非推奨になったため、libnl を使用して同じことを行う必要があります。コア ドキュメントはすべて読みましたが、特定のインターフェイスでコマンドを送信する方法をまだ理解していません。コマンドをネットワーク インターフェイスに送信するにはどうすればよいですか? NL80211_CMD_TRIGGER_SCAN を送信したいのですが、どうすればよいですか? それが私の旅の始まりになるので、サンプルコードは大歓迎です。今のところ理解しているように、次のような libnl ソケットを作成する必要があります。
次に、コマンドで nl_msg メッセージを作成して送信しますが、どのようにですか?
PSはnl_send()を想定していますが、このライブラリがどのように機能するかという考えを理解していない点で立ち往生していることを理解していただければ幸いです
network-programming - スキャンがいつ終了したかを知る方法
次のコードでスキャンをトリガーします
では、スキャンがいつ終了したかを知るにはどうすればよいですか?また、どうすれば取得できますか? これまで検索してきたすべての場所に、「"スキャン" マルチキャスト グループで NL80211_CMD_NEW_SCANS 通知を受け取ります」とありますが、どのように購読すればよいですか? コールバックを登録してみました
その後、 while でメッセージをリッスンします
しかし、何も起こらなかったので、ここまで読むのに十分な忍耐力があれば、2 つの質問に答えてください。
1) スキャンがいつ終了したかを知るにはどうすればよいですか (この通知を購読する方法、またはそれらを読む方法など)
2)通知を受け取った後にメッセージを読むにはどうすればよいですか(以下で理解している方法)
スキャンされたデータを読み取るには、スキャンをトリガーするメッセージと同様のメッセージを送信する必要がありますが、メッセージ NL80211_CMD_GET_SCAN を送信すると、その後、データは nl_socket のペイロードに格納されます。よろしいですか?
c - NetLink 経由で送信されるデータのサイズ
NetLink (Linux カーネル) 経由で送信されたデータのチャンクのサイズを取得しようとしています。で試しましsize = nlh->nlmsg_len - NLMSG_HDRLEN
たが、正しいサイズが返されません。メッセージのデータ サイズを取得する正しい方法は何ですか?