Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 25 additions & 13 deletions applications/tests/test_network/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,25 @@ use alloc::format;
use awkernel_async_lib::net::{tcp::TcpConfig, udp::UdpConfig, IpAddr};
use awkernel_lib::net::NetManagerError;

const INTERFACE_INDEX: u64 = 1;

// 10.0.2.0/24 is the IP address range of the Qemu's network.
const INTERFACE_ADDR: Ipv4Addr = Ipv4Addr::new(10, 0, 2, 64);
// const INTERFACE_ADDR: Ipv4Addr = Ipv4Addr::new(10, 0, 2, 64);

// const INTERFACE_ADDR: Ipv4Addr = Ipv4Addr::new(192, 168, 100, 52); // For experiment.
const INTERFACE_ADDR: Ipv4Addr = Ipv4Addr::new(192, 168, 100, 52); // For experiment.

// 10.0.2.2 is the IP address of the Qemu's host.
const UDP_TCP_DST_ADDR: Ipv4Addr = Ipv4Addr::new(10, 0, 2, 2);
// const UDP_TCP_DST_ADDR: Ipv4Addr = Ipv4Addr::new(10, 0, 2, 2);

const UDP_TCP_DST_ADDR: Ipv4Addr = Ipv4Addr::new(192, 168, 100, 1);

const UDP_DST_PORT: u16 = 26099;

const MULTICAST_ADDR: Ipv4Addr = Ipv4Addr::new(224, 0, 0, 123);
const MULTICAST_PORT: u16 = 20001;

pub async fn run() {
awkernel_lib::net::add_ipv4_addr(0, INTERFACE_ADDR, 24);
awkernel_lib::net::add_ipv4_addr(INTERFACE_INDEX, INTERFACE_ADDR, 24);

awkernel_async_lib::spawn(
"test udp".into(),
Expand Down Expand Up @@ -62,8 +66,11 @@ pub async fn run() {

async fn ipv4_multicast_send_test() {
// Create a UDP socket on interface 0.
let mut socket =
awkernel_async_lib::net::udp::UdpSocket::bind_on_interface(0, Default::default()).unwrap();
let mut socket = awkernel_async_lib::net::udp::UdpSocket::bind_on_interface(
INTERFACE_INDEX,
Default::default(),
)
.unwrap();

let dst_addr = IpAddr::new_v4(MULTICAST_ADDR);

Expand All @@ -87,12 +94,14 @@ async fn ipv4_multicast_recv_test() {
let mut config = UdpConfig::default();
config.port = Some(MULTICAST_PORT);

let mut socket = awkernel_async_lib::net::udp::UdpSocket::bind_on_interface(0, config).unwrap();
let mut socket =
awkernel_async_lib::net::udp::UdpSocket::bind_on_interface(INTERFACE_INDEX, config)
.unwrap();

loop {
// Join the multicast group.
loop {
match awkernel_lib::net::join_multicast_v4(0, MULTICAST_ADDR) {
match awkernel_lib::net::join_multicast_v4(INTERFACE_INDEX, MULTICAST_ADDR) {
Ok(_) => {
log::debug!("Joined the multicast group.");
break;
Expand Down Expand Up @@ -125,7 +134,7 @@ async fn ipv4_multicast_recv_test() {

// Leave the multicast group.
loop {
match awkernel_lib::net::leave_multicast_v4(0, MULTICAST_ADDR) {
match awkernel_lib::net::leave_multicast_v4(INTERFACE_INDEX, MULTICAST_ADDR) {
Ok(_) => {
log::debug!("Left the multicast group.");
break;
Expand All @@ -144,7 +153,7 @@ async fn ipv4_multicast_recv_test() {

async fn tcp_connect_test() {
let Ok(mut stream) = awkernel_async_lib::net::tcp::TcpStream::connect(
0,
INTERFACE_INDEX,
IpAddr::new_v4(UDP_TCP_DST_ADDR),
8080,
Default::default(),
Expand All @@ -162,7 +171,7 @@ async fn tcp_listen_test() {
};

let Ok(mut tcp_listener) =
awkernel_async_lib::net::tcp::TcpListener::bind_on_interface(0, config)
awkernel_async_lib::net::tcp::TcpListener::bind_on_interface(INTERFACE_INDEX, config)
else {
return;
};
Expand Down Expand Up @@ -202,8 +211,11 @@ async fn bogus_http_server(mut stream: awkernel_async_lib::net::tcp::TcpStream)

async fn udp_test() {
// Create a UDP socket on interface 0.
let mut socket =
awkernel_async_lib::net::udp::UdpSocket::bind_on_interface(0, Default::default()).unwrap();
let mut socket = awkernel_async_lib::net::udp::UdpSocket::bind_on_interface(
INTERFACE_INDEX,
Default::default(),
)
.unwrap();

let dst_addr = IpAddr::new_v4(UDP_TCP_DST_ADDR);

Expand Down
1 change: 1 addition & 0 deletions awkernel_drivers/src/pcie/intel/ixgbe/ixgbe_hw.rs
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ pub fn get_mac_type(device: u16) -> Result<MacType, IxgbeDriverErr> {
| IXGBE_DEV_ID_82598AF_DUAL_PORT
| IXGBE_DEV_ID_82598AT
| IXGBE_DEV_ID_82598AT2
| IXGBE_DEV_ID_82598AT_DUAL_PORT
| IXGBE_DEV_ID_82598EB_CX4
| IXGBE_DEV_ID_82598_CX4_DUAL_PORT
| IXGBE_DEV_ID_82598_DA_DUAL_PORT
Expand Down
6 changes: 3 additions & 3 deletions awkernel_lib/src/net/if_net.rs
Original file line number Diff line number Diff line change
Expand Up @@ -117,9 +117,9 @@ impl Device for NetDriverRef<'_> {
// cap.checksum.udp = Checksum::Rx;
// }

if capabilities.contains(NetCapabilities::CSUM_UDPv4) {
cap.checksum.udp = Checksum::Rx;
}
// if capabilities.contains(NetCapabilities::CSUM_UDPv4) {
// cap.checksum.udp = Checksum::Rx;
// }

cap
}
Expand Down
3 changes: 2 additions & 1 deletion scripts/udp.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@


sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
addr = ('localhost', 26099)
#addr = ('localhost', 26099)
addr = ('192.168.100.1', 26099)
#addr = ('10.0.2.2', 26099)
print('listening on %s port %s' % addr, file=sys.stderr)
sock.bind(addr)
Expand Down
2 changes: 1 addition & 1 deletion userland/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ path = "../applications/tests/test_sched_preempt"
optional = true

[features]
default = ["test_sched_preempt"]
default = ["test_network"]
perf = ["awkernel_services/perf"]

# Test applications
Expand Down
Loading