diff --git a/brewos.iso b/brewos.iso index 880ec06..aea4d7d 100644 Binary files a/brewos.iso and b/brewos.iso differ diff --git a/icmp.c b/icmp.c deleted file mode 100644 index c7d2a83..0000000 --- a/icmp.c +++ /dev/null @@ -1,65 +0,0 @@ -#include "net_defs.h" -#include "cmd.h" -#include "memory_manager.h" - -static volatile bool ping_reply_received = false; -static uint16_t ping_id_counter = 0; - -void icmp_handle_packet(ipv4_address_t src, void *data, uint16_t len) { - icmp_header_t *icmp = (icmp_header_t *)data; - - if (icmp->type == 0) { // Echo Reply - ping_reply_received = true; - char buf[64]; - // Simple output - cmd_write("Reply from "); - cmd_write_int(src.bytes[0]); cmd_write("."); - cmd_write_int(src.bytes[1]); cmd_write("."); - cmd_write_int(src.bytes[2]); cmd_write("."); - cmd_write_int(src.bytes[3]); - cmd_write(": bytes="); - cmd_write_int(len - sizeof(icmp_header_t)); - cmd_write(" seq="); - cmd_write_int(ntohs(icmp->sequence)); - cmd_write("\n"); - } -} - -void cli_cmd_ping(char *args) { - if (!args || !*args) { - cmd_write("Usage: ping \n"); - return; - } - - // Parse IP (Simplified) - ipv4_address_t dest; - int ip_parts[4]; - const char *p = args; - for(int i=0; i<4; i++) { - ip_parts[i] = 0; - while(*p >= '0' && *p <= '9') { - ip_parts[i] = ip_parts[i]*10 + (*p - '0'); - p++; - } - if(*p == '.') p++; - dest.bytes[i] = (uint8_t)ip_parts[i]; - } - - cmd_write("Pinging...\n"); - - for (int i = 0; i < 4; i++) { - icmp_header_t icmp; - icmp.type = 8; // Echo Request - icmp.code = 0; - icmp.id = htons(++ping_id_counter); - icmp.sequence = htons(i + 1); - icmp.checksum = 0; - icmp.checksum = net_checksum(&icmp, sizeof(icmp_header_t)); - - ping_reply_received = false; - ip_send_packet(dest, IP_PROTO_ICMP, &icmp, sizeof(icmp_header_t)); - - // Simple busy wait for ~1 second (assuming loop speed) - for(volatile int w=0; w<100000000 && !ping_reply_received; w++); - } -} \ No newline at end of file