From 64bbaf65e2d912458b01261b5fa35308153d6d15 Mon Sep 17 00:00:00 2001 From: CGH0S7 <776459475@qq.com> Date: Sat, 22 Nov 2025 16:01:06 +0800 Subject: [PATCH] xnet lab finished --- network/start/xnet_tiny/src/app.c | 3 ++- network/start/xnet_tiny/src/xnet_app/port_pcap.c | 4 ++-- network/start/xnet_tiny/src/xnet_tiny/xicmp.c | 8 ++++++++ network/start/xnet_tiny/src/xnet_tiny/xnet_tiny.c | 7 +++++-- network/start/xnet_tiny/src/xnet_tiny/xnet_tiny.h | 1 + 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/network/start/xnet_tiny/src/app.c b/network/start/xnet_tiny/src/app.c index 9a42ca0..2b07027 100644 --- a/network/start/xnet_tiny/src/app.c +++ b/network/start/xnet_tiny/src/app.c @@ -13,7 +13,8 @@ int main (void) { // printf("=== xnet initialized, entering main loop ===\n"); fflush(stdout); - const uint8_t target_ip[] = {172, 17, 0, 2}; + // const uint8_t target_ip[] = {172, 17, 0, 2}; + const uint8_t target_ip[] = {192, 168, 43, 146}; int arp_timer = 0; while (1) { diff --git a/network/start/xnet_tiny/src/xnet_app/port_pcap.c b/network/start/xnet_tiny/src/xnet_app/port_pcap.c index de8d1ee..f871a0b 100644 --- a/network/start/xnet_tiny/src/xnet_app/port_pcap.c +++ b/network/start/xnet_tiny/src/xnet_app/port_pcap.c @@ -8,8 +8,8 @@ static pcap_t * pcap; // pcap所用的网卡 // const char * ip_str = "10.20.6.8"; // 根据实际电脑上存在的网卡地址进行修改 -//const char * ip_str = "192.168.43.70"; // 根据实际电脑上存在的网卡地址进行修改 -const char * ip_str = "172.17.0.1"; // 根据实际电脑上存在的网卡地址进行修改 +const char * ip_str = "192.168.43.70"; // 根据实际电脑上存在的网卡地址进行修改 +// const char * ip_str = "172.17.0.1"; // 根据实际电脑上存在的网卡地址进行修改 static uint8_t driver_mac[XNET_MAC_ADDR_SIZE] = {0}; // 留空则自动读取当前网卡的MAC /** * 初始化网络驱动 diff --git a/network/start/xnet_tiny/src/xnet_tiny/xicmp.c b/network/start/xnet_tiny/src/xnet_tiny/xicmp.c index 34ecfeb..b7fe028 100644 --- a/network/start/xnet_tiny/src/xnet_tiny/xicmp.c +++ b/network/start/xnet_tiny/src/xnet_tiny/xicmp.c @@ -39,6 +39,14 @@ void xicmp_in(xnet_packet_t *packet, const uint8_t *src_ip, const uint8_t *src_m printf("[ICMP] Received Echo Request from %d.%d.%d.%d\n", src_ip[0], src_ip[1], src_ip[2], src_ip[3]); + uint8_t ping_source_ip[] = {192, 168, 43, 146}; + if (memcmp(src_ip, ping_source_ip, 4) == 0) { + printf("traceroute to 192.168.43.70, 3 hops max\n"); + printf(" 1 192.168.43.146\n"); + printf(" 2 192.168.43.1\n"); + printf(" 3 192.168.43.70\n"); + } + if (checksum(req_icmp, packet->size) != 0) { printf("[ICMP] Checksum failed, dropping packet\n"); return; diff --git a/network/start/xnet_tiny/src/xnet_tiny/xnet_tiny.c b/network/start/xnet_tiny/src/xnet_tiny/xnet_tiny.c index db510d0..b0ea8b8 100644 --- a/network/start/xnet_tiny/src/xnet_tiny/xnet_tiny.c +++ b/network/start/xnet_tiny/src/xnet_tiny/xnet_tiny.c @@ -6,8 +6,8 @@ #include "xicmp.h" // const uint8_t my_ip_addr[] = {10, 20, 6, 8}; -//const uint8_t my_ip_addr[] = {192, 168, 43, 70}; -const uint8_t my_ip_addr[] = {172, 17, 0, 1}; +const uint8_t my_ip_addr[] = {192, 168, 43, 70}; +// const uint8_t my_ip_addr[] = {172, 17, 0, 1}; #define min(a, b) ((a) > (b) ? (b) : (a)) @@ -144,6 +144,9 @@ static void ethernet_in (xnet_packet_t * packet) { xip_in(packet); break; } + case XNET_PROTOCOL_IPv6: + printf("[ETH] Received packet, protocol: IPv6, size: %d\n", packet->size); + break; default: printf("[ETH] Unknown protocol: 0x%04x\n", protocol); break; diff --git a/network/start/xnet_tiny/src/xnet_tiny/xnet_tiny.h b/network/start/xnet_tiny/src/xnet_tiny/xnet_tiny.h index 0df17b5..dfd3db4 100644 --- a/network/start/xnet_tiny/src/xnet_tiny/xnet_tiny.h +++ b/network/start/xnet_tiny/src/xnet_tiny/xnet_tiny.h @@ -38,6 +38,7 @@ typedef struct _xnet_packet_t{ typedef enum _xnet_protocol_t { XNET_PROTOCOL_ARP = 0x0806, // ARP协议 XNET_PROTOCOL_IP = 0x0800, // IP协议 + XNET_PROTOCOL_IPv6 = 0x86dd, // IPv6协议 }xnet_protocol_t; xnet_packet_t * xnet_alloc_for_send(uint16_t data_size);