0
A
回答
2
當不支持單播過濾的設備必須偵聽幾個單播地址時,根據dev->uc_count
和dev->uc_promisc
,它將處於promiscous模式。檢查__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調用來檢查接口是否處於promisc模式...我找不到該字段存在的原因... – MirkoBanchi
相關問題
- 1. ValidationResult.Success字段的用途是什麼?
- 2. stype字段的用途是什麼?
- 3. 將字段聲明爲可序列化的用途或用途是什麼?
- 4. JSON模式中「description」字段的用途是什麼?
- 5. HTTP頭字段「Content-Location」的用途是什麼?
- 6. LinkedHashMap中'accessOrder'字段的用途是什麼?
- 7. PriceDiscTable中協議字段的用途是什麼?
- 8. layout.xml的用途是什麼?
- 9. PhoneGap的用途是什麼?
- 10. AtomicReferenceArray的用途是什麼?
- 11. felix.xml的用途是什麼?
- 12. WSDL的用途是什麼?
- 13. RegisterFmxClasses的用途是什麼?
- 14. FXCollections.observableArrayList的用途是什麼?
- 15. config.assets.precompile的用途是什麼?
- 16. Rake的用途是什麼?
- 17. _dl_sysinfo_int80的用途是什麼?
- 18. javax.security.auth.callback。*的用途是什麼?
- 19. System.Data.SqlClient.SqlParameter.IsNullable的用途是什麼?
- 20. _GLOBAL__I_的用途是什麼?
- 21. $ _POST的用途是什麼?
- 22. RhoMobile的用途是什麼?
- 23. StandardOpenOption.SPARSE的用途是什麼?
- 24. CreateSilverlight.js的用途是什麼?
- 25. ServicePointManager.ServerCertificateValidationCallback的用途是什麼?
- 26. RegisterGlobalFilters的用途是什麼?
- 27. SDL_opengl_glext.h的用途是什麼?
- 28. NSExpression的用途是什麼?
- 29. AutoDiscoverURL的用途是什麼?
- 30. jquery.mobile.structure的用途是什麼?
感謝ninjalj的回覆。因此,如果'uc_promisc'字段不爲0,是否意味着該接口還會偵聽'dev-> uc'列表中的所有地址?如果是,應設置標誌'IFF_PROMISC'?我有一個主設備與一個從設備關聯,並且在'開放'方法的從設備中,我爲主設備調用了'dev_uc_add'。這使得master處於promisc模式,但是由於'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'爲真,但用戶空間只能看到'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()'是一個較新的加法,以避免競爭條件(請參閱http ://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git; a = commit; h = 24023451c8df726692e2f52288a20870d13b501f) – ninjalj