Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 1de1b56

Browse filesBrowse files
feat(kernel): bump crabnet and crabnet_tcp
* Bump `crabnet` and `crabnet_tcp` * No longer ignore the TCP options and pass them to `on_packet` on the respective TCP socket. Signed-off-by: Anhad Singh <andypythonappdeveloper@gmail.com>
1 parent c63e036 commit 1de1b56
Copy full SHA for 1de1b56

File tree

Expand file treeCollapse file tree

5 files changed

+49
-26
lines changed
Filter options
Expand file treeCollapse file tree

5 files changed

+49
-26
lines changed

‎src/Cargo.lock

Copy file name to clipboardExpand all lines: src/Cargo.lock
+2-2Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎src/aero_kernel/Cargo.toml

Copy file name to clipboardExpand all lines: src/aero_kernel/Cargo.toml
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ vte = { git = "https://github.com/alacritty/vte", features = ["ansi"] }
5050
byte_endian = { git = "https://github.com/aero-os/byte_endian" }
5151
crabnet = { git = "https://github.com/aero-os/crabnet" }
5252
crabnet_tcp = { git = "https://github.com/aero-os/crabnet", default-features = false }
53+
# crabnet = { path = "../../../orgs/aero/crabnet" }
54+
# crabnet_tcp = { path = "../../../orgs/aero/crabnet/crabnet_tcp", default-features = false }
5355

5456
# X86_64 specific dependencies:
5557
[target.'cfg(target_arch = "x86_64")'.dependencies]

‎src/aero_kernel/src/net/mod.rs

Copy file name to clipboardExpand all lines: src/aero_kernel/src/net/mod.rs
+25-6Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use alloc::boxed::Box;
1919
use alloc::sync::Arc;
2020
use alloc::vec::Vec;
21+
use crabnet::transport::TcpOptions;
2122
use spin::RwLock;
2223

2324
pub mod arp;
@@ -132,12 +133,10 @@ fn packet_processor_thread() {
132133

133134
Ipv4Type::Tcp => {
134135
let tcp = parser.next::<Tcp>();
135-
let options_size = tcp.options_size() as usize;
136-
let size = ip.payload_len() as usize - core::mem::size_of::<Tcp>();
137-
138-
// TODO(andypython): do not ignore TCP options.
139-
let payload = &parser.payload()[options_size..size];
140-
tcp::on_packet(tcp, payload)
136+
let size = ip.payload_len() as usize - tcp.header_size() as usize;
137+
let options = parser.next::<TcpOptions>();
138+
let payload = &parser.payload()[..size];
139+
tcp::on_packet(tcp, options, payload)
141140
}
142141
}
143142
}
@@ -217,6 +216,26 @@ pub mod shim {
217216
}
218217
}
219218

219+
impl<T: Protocol, U: Protocol, S: Protocol> PacketSend
220+
for Stacked<Stacked<Stacked<Stacked<Eth, Ipv4>, T>, U>, S>
221+
{
222+
fn send(mut self) {
223+
let device = net::default_device();
224+
225+
let eth = &mut self.upper.upper.upper.upper;
226+
let ip = &self.upper.upper.upper.lower;
227+
228+
eth.src_mac = device.mac();
229+
230+
if let Some(addr) = arp::get(ip.dest_ip()) {
231+
eth.dest_mac = addr;
232+
device.send(self.into_boxed_bytes_in(DmaAllocator));
233+
} else {
234+
arp::request_ip(ip.dest_ip(), self.into_boxed_bytes_in(DmaAllocator));
235+
}
236+
}
237+
}
238+
220239
impl PacketSend for Arp {
221240
fn send(self) {
222241
let device = net::default_device();

‎src/aero_kernel/src/net/tcp.rs

Copy file name to clipboardExpand all lines: src/aero_kernel/src/net/tcp.rs
+3-3Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,18 @@
1818
use alloc::collections::BTreeMap;
1919
use alloc::sync::Arc;
2020

21-
use crabnet::transport::Tcp;
21+
use crabnet::transport::{Tcp, TcpOptions};
2222
use spin::RwLock;
2323

2424
use crate::socket::tcp::TcpSocket;
2525

2626
static HANDLERS: RwLock<BTreeMap<u16, Arc<TcpSocket>>> = RwLock::new(BTreeMap::new());
2727

28-
pub fn on_packet(tcp: &Tcp, payload: &[u8]) {
28+
pub fn on_packet(tcp: &Tcp, options: TcpOptions, payload: &[u8]) {
2929
let handlers = HANDLERS.read();
3030

3131
if let Some(handler) = handlers.get(&tcp.dest_port()) {
32-
handler.on_packet(tcp, payload);
32+
handler.on_packet(tcp, options, payload);
3333
} else {
3434
log::warn!("tcp: no handler registered for port {}", tcp.dest_port());
3535
}

‎src/aero_kernel/src/socket/tcp.rs

Copy file name to clipboardExpand all lines: src/aero_kernel/src/socket/tcp.rs
+17-15Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@ use aero_syscall::{InAddr, OpenFlags, SocketAddrInet, AF_INET};
33
use alloc::sync::{Arc, Weak};
44
use alloc::vec::Vec;
55

6+
use crabnet::network::Ipv4Addr;
67
use spin::Once;
78

89
use crabnet::data_link::{Eth, EthType, MacAddr};
9-
use crabnet::transport::Tcp;
10-
use crabnet_tcp::{Address, Error as TcpError, State};
10+
use crabnet::transport::{Tcp, TcpOptions};
11+
use crabnet_tcp::{Address, Error as TcpError, Packet as TcpPacket, State};
1112

1213
use crate::fs::file_table::FileHandle;
1314
use crate::fs::inode::{FileType, INodeInterface, Metadata, PollFlags, PollTable};
@@ -23,19 +24,14 @@ use crate::utils::sync::{Mutex, WaitQueue};
2324
struct DeviceShim(Arc<NetworkDevice>);
2425

2526
impl crabnet_tcp::NetworkDevice for DeviceShim {
26-
fn send(
27-
&self,
28-
ipv4: crabnet::network::Ipv4,
29-
tcp: Tcp,
30-
payload: &[u8],
31-
_handle: crabnet_tcp::RetransmitHandle,
32-
) {
33-
// TODO(andypython): Handle TCP retransmission here.
27+
fn ip(&self) -> Ipv4Addr {
28+
self.0.ip()
29+
}
3430

31+
fn send(&self, packet: TcpPacket, _handle: crabnet_tcp::RetransmitHandle) {
32+
// TODO(andypython): Handle TCP retransmission here.
3533
let eth = Eth::new(MacAddr::NULL, self.0.mac(), EthType::Ip);
36-
let ipv4 = ipv4.set_src_ip(self.0.ip());
37-
38-
(eth / ipv4 / tcp / payload).send();
34+
(eth / packet.ip / packet.tcp / packet.options / packet.payload).send();
3935
}
4036

4137
fn remove_retransmit(&self, _seq_number: u32) {
@@ -62,9 +58,15 @@ impl TcpSocket {
6258
})
6359
}
6460

65-
pub fn on_packet(&self, tcp: &Tcp, payload: &[u8]) {
61+
pub fn on_packet(&self, tcp: &Tcp, options: TcpOptions, payload: &[u8]) {
6662
if let Some(socket) = self.tcp.lock_irq().as_mut() {
67-
socket.on_packet(tcp, payload);
63+
// Ignore any invalid TCP options.
64+
let options = options
65+
.iter()
66+
.filter_map(|option| option.ok())
67+
.collect::<Vec<_>>();
68+
69+
socket.on_packet(tcp, &options, payload);
6870
self.wq.notify_all();
6971
}
7072
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.