diff --git a/kernel/src/drivers/bus/pci.rs b/kernel/src/drivers/bus/pci.rs index 6a143c8..1f76b3e 100644 --- a/kernel/src/drivers/bus/pci.rs +++ b/kernel/src/drivers/bus/pci.rs @@ -118,7 +118,8 @@ pub fn init_driver(dev: &PCIDevice) { active_table().map_if_not_exists(KERNEL_OFFSET + current_addr, current_addr); current_addr = current_addr + PAGE_SIZE; } - e1000::e1000_init(name, irq, vaddr, len as usize); + let index = NET_DRIVERS.read().len(); + e1000::e1000_init(name, irq, vaddr, len as usize, index); } } (0x8086, 0x10fb) => { diff --git a/kernel/src/drivers/net/e1000.rs b/kernel/src/drivers/net/e1000.rs index fb32d8f..7461098 100644 --- a/kernel/src/drivers/net/e1000.rs +++ b/kernel/src/drivers/net/e1000.rs @@ -337,7 +337,7 @@ bitflags! { } // JudgeDuck-OS/kern/e1000.c -pub fn e1000_init(name: String, irq: Option, header: usize, size: usize) { +pub fn e1000_init(name: String, irq: Option, header: usize, size: usize, index: usize) { info!("Probing e1000 {}", name); assert_eq!(size_of::(), 16); assert_eq!(size_of::(), 16); @@ -357,7 +357,7 @@ pub fn e1000_init(name: String, irq: Option, header: usize, size: usize) { let mut recv_queue = unsafe { slice::from_raw_parts_mut(recv_page as *mut E1000RecvDesc, recv_queue_size) }; // randomly generated - let mac: [u8; 6] = [0x54, 0x51, 0x9F, 0x71, 0xC0, 0x3C]; + let mac: [u8; 6] = [0x54, 0x51, 0x9F, 0x71, 0xC0, index as u8]; let mut driver = E1000 { header, @@ -468,7 +468,7 @@ pub fn e1000_init(name: String, irq: Option, header: usize, size: usize) { let net_driver = E1000Driver(Arc::new(Mutex::new(driver))); let ethernet_addr = EthernetAddress::from_bytes(&mac); - let ip_addrs = [IpCidr::new(IpAddress::v4(10, 0, 0, 2), 24)]; + let ip_addrs = [IpCidr::new(IpAddress::v4(10, 0, index as u8, 2), 24)]; let neighbor_cache = NeighborCache::new(BTreeMap::new()); let iface = EthernetInterfaceBuilder::new(net_driver.clone()) .ethernet_addr(ethernet_addr) @@ -476,6 +476,7 @@ pub fn e1000_init(name: String, irq: Option, header: usize, size: usize) { .neighbor_cache(neighbor_cache) .finalize(); + info!("e1000 interface {} has addr 10.0.{}.2/24", name, index); let e1000_iface = E1000Interface { iface: Mutex::new(iface), driver: net_driver.clone(), diff --git a/kernel/src/net/structs.rs b/kernel/src/net/structs.rs index 719cc48..3238661 100644 --- a/kernel/src/net/structs.rs +++ b/kernel/src/net/structs.rs @@ -611,6 +611,6 @@ const UDP_METADATA_BUF: usize = 1024; const UDP_SENDBUF: usize = 64 * 1024; // 64K const UDP_RECVBUF: usize = 64 * 1024; // 64K -const RAW_METADATA_BUF: usize = 2; -const RAW_SENDBUF: usize = 2 * 1024; // 2K -const RAW_RECVBUF: usize = 2 * 1024; // 2K +const RAW_METADATA_BUF: usize = 1024; +const RAW_SENDBUF: usize = 64 * 1024; // 64K +const RAW_RECVBUF: usize = 64 * 1024; // 64K