将smoltcp升级到0.11.0版本 (#740)

This commit is contained in:
yuyi2439
2024-04-21 11:39:00 +08:00
committed by GitHub
parent 370472f728
commit 881ff6f95e
5 changed files with 65 additions and 76 deletions

View File

@ -1,6 +1,7 @@
//这个文件的绝大部分内容是copy virtio_net.rs的考虑到所有的驱动都要用操作系统提供的协议栈我觉得可以把这些内容抽象出来
use crate::{
arch::rand::rand,
driver::{
base::{
device::{bus::Bus, driver::Driver, Device, IdTable},
@ -22,7 +23,10 @@ use core::{
fmt::Debug,
ops::{Deref, DerefMut},
};
use smoltcp::{phy, wire};
use smoltcp::{
phy,
wire::{self, HardwareAddress},
};
use system_error::SystemError;
use super::e1000e::{E1000EBuffer, E1000EDevice};
@ -102,16 +106,12 @@ impl phy::TxToken for E1000ETxToken {
impl E1000EDriver {
#[allow(clippy::arc_with_non_send_sync)]
pub fn new(device: E1000EDevice) -> Self {
let mut iface_config = smoltcp::iface::Config::new();
// todo: 随机设定这个值。
// 参见 https://docs.rs/smoltcp/latest/smoltcp/iface/struct.Config.html#structfield.random_seed
iface_config.random_seed = 12345;
iface_config.hardware_addr = Some(wire::HardwareAddress::Ethernet(
let mut iface_config = smoltcp::iface::Config::new(HardwareAddress::Ethernet(
smoltcp::wire::EthernetAddress(device.mac_address()),
));
iface_config.random_seed = rand() as u64;
let inner: Arc<SpinLock<E1000EDevice>> = Arc::new(SpinLock::new(device));
let result = E1000EDriver { inner };
return result;
@ -175,16 +175,13 @@ impl phy::Device for E1000EDriver {
impl E1000EInterface {
pub fn new(mut driver: E1000EDriver) -> Arc<Self> {
let iface_id = generate_iface_id();
let mut iface_config = smoltcp::iface::Config::new();
// todo: 随机设定这个值。
// 参见 https://docs.rs/smoltcp/latest/smoltcp/iface/struct.Config.html#structfield.random_seed
iface_config.random_seed = 12345;
iface_config.hardware_addr = Some(wire::HardwareAddress::Ethernet(
let mut iface_config = smoltcp::iface::Config::new(HardwareAddress::Ethernet(
smoltcp::wire::EthernetAddress(driver.inner.lock().mac_address()),
));
let iface = smoltcp::iface::Interface::new(iface_config, &mut driver);
iface_config.random_seed = rand() as u64;
let iface =
smoltcp::iface::Interface::new(iface_config, &mut driver, Instant::now().into());
let driver: E1000EDriverWrapper = E1000EDriverWrapper(UnsafeCell::new(driver));
let result = Arc::new(E1000EInterface {