From a019ee26349c0afafcc6dd185994634cc43c04c6 Mon Sep 17 00:00:00 2001 From: Yuuki Takano Date: Thu, 16 Jan 2025 11:59:01 +0900 Subject: [PATCH] fix(ixgbe): handle IXGBE_DEV_ID_82598AT_DUAL_PORT Signed-off-by: Yuuki Takano --- applications/tests/test_network/src/lib.rs | 38 ++++++++++++------- .../src/pcie/intel/ixgbe/ixgbe_hw.rs | 1 + awkernel_lib/src/net/if_net.rs | 6 +-- scripts/udp.py | 3 +- userland/Cargo.toml | 2 +- 5 files changed, 32 insertions(+), 18 deletions(-) diff --git a/applications/tests/test_network/src/lib.rs b/applications/tests/test_network/src/lib.rs index 18949840a..84bb73526 100644 --- a/applications/tests/test_network/src/lib.rs +++ b/applications/tests/test_network/src/lib.rs @@ -8,13 +8,17 @@ 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; @@ -22,7 +26,7 @@ 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(), @@ -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); @@ -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; @@ -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; @@ -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(), @@ -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; }; @@ -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); diff --git a/awkernel_drivers/src/pcie/intel/ixgbe/ixgbe_hw.rs b/awkernel_drivers/src/pcie/intel/ixgbe/ixgbe_hw.rs index d02d36dba..eae62702c 100644 --- a/awkernel_drivers/src/pcie/intel/ixgbe/ixgbe_hw.rs +++ b/awkernel_drivers/src/pcie/intel/ixgbe/ixgbe_hw.rs @@ -94,6 +94,7 @@ pub fn get_mac_type(device: u16) -> Result { | 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 diff --git a/awkernel_lib/src/net/if_net.rs b/awkernel_lib/src/net/if_net.rs index c16f54840..46c0c11a6 100644 --- a/awkernel_lib/src/net/if_net.rs +++ b/awkernel_lib/src/net/if_net.rs @@ -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 } diff --git a/scripts/udp.py b/scripts/udp.py index 28482af36..76f6a6044 100644 --- a/scripts/udp.py +++ b/scripts/udp.py @@ -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) diff --git a/userland/Cargo.toml b/userland/Cargo.toml index f36e9fd55..7d1c6cb30 100644 --- a/userland/Cargo.toml +++ b/userland/Cargo.toml @@ -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