mod.rs 890 B

123456789101112131415161718192021222324252627
  1. //! # 网络模块
  2. //! 注意,net模块下,为了方便导入,模块细分,且共用部分模块直接使用
  3. //! `pub use`导出,导入时也常见`use crate::net::socket::*`的写法,
  4. //! 敬请注意。
  5. use core::sync::atomic::AtomicUsize;
  6. use alloc::{collections::BTreeMap, sync::Arc};
  7. use crate::{driver::net::Iface, libs::rwlock::RwLock};
  8. pub mod event_poll;
  9. pub mod net_core;
  10. pub mod posix;
  11. pub mod socket;
  12. pub mod syscall;
  13. lazy_static! {
  14. /// # 所有网络接口的列表
  15. /// 这个列表在中断上下文会使用到,因此需要irqsave
  16. pub static ref NET_DEVICES: RwLock<BTreeMap<usize, Arc<dyn Iface>>> = RwLock::new(BTreeMap::new());
  17. }
  18. /// 生成网络接口的id (全局自增)
  19. pub fn generate_iface_id() -> usize {
  20. static IFACE_ID: AtomicUsize = AtomicUsize::new(0);
  21. return IFACE_ID.fetch_add(1, core::sync::atomic::Ordering::SeqCst);
  22. }