Skip to content

Commit 8e52f9c

Browse files
feat(net): switch to crabnet
Signed-off-by: Anhad Singh <[email protected]>
1 parent 07821a2 commit 8e52f9c

File tree

14 files changed

+344
-617
lines changed

14 files changed

+344
-617
lines changed

.vscode/settings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@
1616
"termios.h": "c",
1717
"termios-c_iflag.h": "c"
1818
},
19-
"rust-analyzer.check.command": "clippy",
19+
// "rust-analyzer.check.command": "clippy",
2020
}

src/Cargo.lock

Lines changed: 63 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/aero_kernel/Cargo.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,15 @@ cpio_reader = { git = "https://github.com/Andy-Python-Programmer/cpio_reader" }
4242
static_assertions = "1.1.0"
4343
lru = "0.10.0"
4444
bytemuck = "1.13.1"
45-
byte_endian = { git = "https://github.com/aero-os/byte_endian" }
4645
limine = { git = "https://github.com/limine-bootloader/limine-rs" }
4746
cfg-if = "1.0"
4847
num-traits = { version = "0.2", default-features = false }
4948
vte = { git = "https://github.com/alacritty/vte", features = ["ansi"] }
5049

50+
byte_endian = { git = "https://github.com/aero-os/byte_endian" }
51+
netstack = { path = "../../../orgs/aero/netstack" }
52+
netstack_tcp = { path = "../../../orgs/aero/netstack/netstack_tcp", default-features = false }
53+
5154
# X86_64 specific dependencies:
5255
[target.'cfg(target_arch = "x86_64")'.dependencies]
5356
raw-cpuid = "11.0.1"

src/aero_kernel/src/drivers/e1000.rs

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
// You should have received a copy of the GNU General Public License
1616
// along with Aero. If not, see <https://www.gnu.org/licenses/>.
1717

18+
use alloc::boxed::Box;
1819
use alloc::sync::Arc;
1920
use spin::Once;
2021

@@ -23,9 +24,11 @@ use crate::arch::interrupts::{self, InterruptStack};
2324
use crate::drivers::pci::*;
2425
use crate::mem::paging::*;
2526
use crate::userland::scheduler;
27+
use crate::utils::dma::DmaAllocator;
2628
use crate::utils::sync::{Mutex, WaitQueue};
2729

28-
use crate::net::{self, ethernet, MacAddr, NetworkDevice, NetworkDriver, PacketBaseTrait};
30+
use crate::net::{self, ethernet, NetworkDevice, NetworkDriver};
31+
use netstack::data_link::MacAddr;
2932

3033
const TX_DESC_NUM: u32 = 32;
3134
const TX_DESC_SIZE: u32 = TX_DESC_NUM * core::mem::size_of::<TxDescriptor>() as u32;
@@ -374,35 +377,35 @@ impl E1000 {
374377
}
375378
}
376379

377-
fn send(&mut self, packet: net::Packet<net::Eth>) {
380+
fn send(&mut self, packet: Box<[u8], DmaAllocator>) {
378381
let cur = self.tx_cur;
379382
let ring = self.tx_ring();
380383

381-
ring[cur].addr = unsafe { packet.addr() - crate::PHYSICAL_MEMORY_OFFSET };
384+
ring[cur].addr =
385+
unsafe { VirtAddr::new(packet.as_ptr() as u64) - crate::PHYSICAL_MEMORY_OFFSET };
382386
ring[cur].length = packet.len() as _;
383387
ring[cur].cmd = 0b1011;
384388
ring[cur].status = TStatus::empty();
385389

386390
self.tx_cur = (self.tx_cur + 1) % TX_DESC_NUM as usize;
387391

388392
self.write(Register::TxDescTail, self.tx_cur as u32);
393+
core::mem::forget(packet); // FIXME: hack
389394
}
390395

391-
fn recv(&mut self) -> Option<net::RecvPacket> {
396+
fn recv<'a>(&mut self) -> Option<net::RecvPacket<'a>> {
392397
let id = self.rx_cur;
393398
let desc = &mut self.rx_ring()[id];
394399

395400
if desc.status & 0x1 != 0x1 {
396401
return None;
397402
}
398403

399-
Some(net::RecvPacket {
400-
packet: net::Packet::<ethernet::Eth>::new(
401-
PhysAddr::new(desc.addr).as_hhdm_virt(),
402-
desc.length as usize,
403-
),
404-
id,
405-
})
404+
let packet = PhysAddr::new(desc.addr)
405+
.as_hhdm_virt()
406+
.as_bytes_mut(desc.length as usize);
407+
408+
Some(net::RecvPacket { packet, id })
406409
}
407410

408411
fn recv_end(&mut self, id: usize) {
@@ -595,7 +598,7 @@ impl Device {
595598
}
596599

597600
impl NetworkDriver for Device {
598-
fn send(&self, packet: net::Packet<net::Eth>) {
601+
fn send(&self, packet: Box<[u8], DmaAllocator>) {
599602
self.e1000.lock_irq().send(packet)
600603
}
601604

@@ -619,7 +622,7 @@ impl NetworkDriver for Device {
619622
self.e1000.lock_irq().recv_end(packet_id)
620623
}
621624

622-
fn mac(&self) -> net::MacAddr {
625+
fn mac(&self) -> MacAddr {
623626
self.e1000.lock_irq().mac
624627
}
625628
}

src/aero_kernel/src/mem/paging/addr.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ impl VirtAddr {
125125
Ok(unsafe { &mut *self.as_mut_ptr() })
126126
}
127127

128-
pub fn as_bytes_mut(&self, size_bytes: usize) -> &mut [u8] {
128+
pub fn as_bytes_mut<'a>(&self, size_bytes: usize) -> &'a mut [u8] {
129129
self.validate_read::<&[u8]>().unwrap();
130130
unsafe { core::slice::from_raw_parts_mut(self.as_mut_ptr(), size_bytes) }
131131
}

0 commit comments

Comments
 (0)