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);
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) => {

@ -337,7 +337,7 @@ bitflags! {
}
// 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);
assert_eq!(size_of::<E1000SendDesc>(), 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 =
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<u32>, 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<u32>, 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(),

@ -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

Loading…
Cancel
Save