0
A
答えて
2
ユニキャストフィルタリングをサポートしていないデバイスが複数のユニキャストアドレスをリスンする必要がある場合、プロキシミスモードになります(dev->uc_count
およびdev->uc_promisc
)。 __dev_set_rx_mode()
機能を確認してください。
多くのデバイスはndo_set_rx_mode()
を実装し、ユニキャスト(およびマルチキャスト)フィルタをndo_set_rx_mode()
で設定します。これを実装していないデバイスでは、Linuxはデバイスをプロミスキャスモードに設定し、その事実をdev->uc_promisc
で追跡します。
だから無差別モードにはいくつかのフラグがあります
dev->flags & IFF_PROMISC
は、デバイスが無差別モードであることを意味します。dev->gflags & IFF_PROMISC
は、ユーザがプロミスキャスモードを要求したことを意味します。dev->uc_promisc
は、ndo_set_rx_mode()
を実装していないデバイスで追加のユニキャストアドレスをリッスンする必要があるため、プロミスキャスモードが有効になっていることを示します(実際には参照カウントが増加しています)。
0
デバイス上でpromiscuous modeの有効化/無効化のステータスを有効にする(または有効化/無効化のステータスを追跡する)方法があるようです。
+0
IFF_PROMISCには特定のフラグがあります。あなたはコマンドがSIOCGIFFLAGSのioctl呼び出しによってプロミスモードであるかどうかを調べることができます...そのフィールドの存在の理由を理解することはできません... – MirkoBanchi
関連する問題
- 1. stypeフィールドの目的は何ですか?
- 2. ValidationResult.Successフィールドの目的は何ですか?
- 3. LinkedHashMapの 'accessOrder'フィールドの目的は何ですか?
- 4. sockaddrのsa_dataフィールドの目的は何ですか?
- 5. 静的な目的は何ですか?
- 6. Mongoclientとは何ですか?その目的は何ですか?
- 7. Ember.Containerの目的は何ですか
- 8. マーカーインターフェイスの目的は何ですか?
- 9. jquery.mobile.structureの目的は何ですか?
- 10. オペレータ "^"の目的は何ですか?
- 11. AccountManager(アンドロイド)の目的は何ですか?
- 12. SetDefaultFieldSortScoringの目的は何ですか?
- 13. Dockerビルドコンテキストの目的は何ですか?
- 14. Newtonsoft.Json.JsonToken.StartConstructorトークンの目的は何ですか?
- 15. SDL_opengl_glext.hの目的は何ですか?
- 16. Expressionクラスの目的は何ですか?
- 17. Control.GetPreferredSizeメソッドの目的は何ですか?
- 18. durandalの目的は何ですか?
- 19. Ember.js - Ember.lookupの目的は何ですか
- 20. IEnumeratorの目的は何ですか
- 21. `__metaclass__ = type`の目的は何ですか?
- 22. デルファイ:icontentの目的は何ですか?
- 23. ApplicationBuilder.Propertiesの目的は何ですか?
- 24. EasyMock.andVoid()の目的は何ですか?
- 25. PHPロギングフレームワークの目的は何ですか?
- 26. ボイドキャストの目的は何ですか?
- 27. グント:cwdの目的は何ですか?
- 28. データセットの目的は何ですか?
- 29. React-Router:IndexRouteの目的は何ですか?
- 30. Objects.compare()メソッドの目的は何ですか?
返信のためにninjaljに感謝します。したがって、 'uc_promisc'フィールドが0でない場合、インターフェースも' dev-> uc'リスト内のすべてのアドレスをリッスンすることを意味しますか?そうであれば 'IFF_PROMISC'フラグを設定する必要がありますか?私は、スレーブデバイスが関連付けられたマスターデバイスを持っていて、スレーブデバイスの 'open'メソッドにはマスターデバイスのための' dev_uc_add'呼び出しがあります。これはマスターをプロミスキャストモードにするが、 'ndo_change_rx_flags'が' NULL'であるためフラグ 'IFF_PROMISC'が設定されていない。これが正しいと思いますか? – MirkoBanchi
@MirkoBanchi:デバイスが 'ndo_set_rx_mode()'をサポートしている場合、デバイスはそれを使用し、 'dev-> uc_promisc'には触れません。 'uc_promisc!= 0'の場合、デバイスはプロミスキャスモードになり、' dev-> uc'のすべてのアドレスを聞くことができます。デバイスがプロミスキャスモードになっているとき、 'dev-> flags&IFF_PROMISC'は真ですが、userspaceは' dev-> gflags&IFF_PROMISC'しか見ることができません。フラグは 'ndo_change_rx_flags()'がそれを見るか否かにかかわらず設定され、 'ndo_change_rx_flags()'はフラグを変更せず、フラグをデバイスに通知します。 – ninjalj
ドライバは 'ndo_change_rx_flags()'を実装せず、 'ndo_set_rx_mode()'(eg:e1000)を介して 'IFF_PROMISC'と' IFF_ALLMULTI'への変更を見ることができます 'ndo_change_rx_flags()'は、 ://git.kernel.org/?p = linux/kernel/git/torvalds/linux-2.6.git; a =コミット; h = 24023451c8df726692e2f52288a20870d13b501f) – ninjalj