feat: add ethernet & TCP/IP stack

This commit is contained in:
2026-02-17 13:19:11 +01:00
parent f7e6ce70a0
commit 20fa8a9be2
23 changed files with 2409 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
/*
* Ipv4.hpp
* Internet Protocol version 4
* Copyright (c) 2025 Daniel Hammer
*/
#pragma once
#include <cstdint>
namespace Net::Ipv4 {
constexpr uint8_t PROTO_ICMP = 1;
constexpr uint8_t PROTO_TCP = 6;
constexpr uint8_t PROTO_UDP = 17;
constexpr uint8_t DEFAULT_TTL = 64;
constexpr uint16_t HEADER_SIZE = 20; // Without options
struct Header {
uint8_t VersionIhl; // Version (4 bits) + IHL (4 bits)
uint8_t Tos; // Type of Service
uint16_t TotalLength;
uint16_t Identification;
uint16_t FlagsFragment; // Flags (3 bits) + Fragment Offset (13 bits)
uint8_t Ttl;
uint8_t Protocol;
uint16_t Checksum;
uint32_t SrcIp;
uint32_t DstIp;
} __attribute__((packed));
// Initialize the IPv4 subsystem
void Initialize();
// Handle an incoming IP packet (called by Ethernet layer)
void OnPacketReceived(const uint8_t* data, uint16_t length);
// Send an IP packet with the given protocol and payload
bool Send(uint32_t destIp, uint8_t protocol, const uint8_t* payload, uint16_t payloadLen);
// Compute the Internet checksum over a buffer
uint16_t Checksum(const void* data, uint16_t length);
// Compute TCP/UDP pseudo-header checksum
uint16_t PseudoHeaderChecksum(uint32_t srcIp, uint32_t dstIp, uint8_t protocol,
uint16_t length, const void* data, uint16_t dataLen);
}