Assign different IP addresses for different nics

toolchain_update
Jiajie Chen 6 years ago
parent d3a462e8a0
commit f028823e5a

@ -118,7 +118,8 @@ pub fn init_driver(dev: &PCIDevice) {
active_table().map_if_not_exists(KERNEL_OFFSET + current_addr, current_addr); active_table().map_if_not_exists(KERNEL_OFFSET + current_addr, current_addr);
current_addr = current_addr + PAGE_SIZE; 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) => { (0x8086, 0x10fb) => {

@ -337,7 +337,7 @@ bitflags! {
} }
// JudgeDuck-OS/kern/e1000.c // JudgeDuck-OS/kern/e1000.c
pub fn e1000_init(name: String, irq: Option<u32>, header: usize, size: usize) { pub fn e1000_init(name: String, irq: Option<u32>, header: usize, size: usize, index: usize) {
info!("Probing e1000 {}", name); info!("Probing e1000 {}", name);
assert_eq!(size_of::<E1000SendDesc>(), 16); assert_eq!(size_of::<E1000SendDesc>(), 16);
assert_eq!(size_of::<E1000RecvDesc>(), 16); assert_eq!(size_of::<E1000RecvDesc>(), 16);
@ -357,7 +357,7 @@ pub fn e1000_init(name: String, irq: Option<u32>, header: usize, size: usize) {
let mut recv_queue = let mut recv_queue =
unsafe { slice::from_raw_parts_mut(recv_page as *mut E1000RecvDesc, recv_queue_size) }; unsafe { slice::from_raw_parts_mut(recv_page as *mut E1000RecvDesc, recv_queue_size) };
// randomly generated // 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 { let mut driver = E1000 {
header, header,
@ -468,7 +468,7 @@ pub fn e1000_init(name: String, irq: Option<u32>, header: usize, size: usize) {
let net_driver = E1000Driver(Arc::new(Mutex::new(driver))); let net_driver = E1000Driver(Arc::new(Mutex::new(driver)));
let ethernet_addr = EthernetAddress::from_bytes(&mac); 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 neighbor_cache = NeighborCache::new(BTreeMap::new());
let iface = EthernetInterfaceBuilder::new(net_driver.clone()) let iface = EthernetInterfaceBuilder::new(net_driver.clone())
.ethernet_addr(ethernet_addr) .ethernet_addr(ethernet_addr)
@ -476,6 +476,7 @@ pub fn e1000_init(name: String, irq: Option<u32>, header: usize, size: usize) {
.neighbor_cache(neighbor_cache) .neighbor_cache(neighbor_cache)
.finalize(); .finalize();
info!("e1000 interface {} has addr 10.0.{}.2/24", name, index);
let e1000_iface = E1000Interface { let e1000_iface = E1000Interface {
iface: Mutex::new(iface), iface: Mutex::new(iface),
driver: net_driver.clone(), driver: net_driver.clone(),

@ -611,6 +611,6 @@ const UDP_METADATA_BUF: usize = 1024;
const UDP_SENDBUF: usize = 64 * 1024; // 64K const UDP_SENDBUF: usize = 64 * 1024; // 64K
const UDP_RECVBUF: usize = 64 * 1024; // 64K const UDP_RECVBUF: usize = 64 * 1024; // 64K
const RAW_METADATA_BUF: usize = 2; const RAW_METADATA_BUF: usize = 1024;
const RAW_SENDBUF: usize = 2 * 1024; // 2K const RAW_SENDBUF: usize = 64 * 1024; // 64K
const RAW_RECVBUF: usize = 2 * 1024; // 2K const RAW_RECVBUF: usize = 64 * 1024; // 64K

Loading…
Cancel
Save