12using namespace MaxOS::common;
13using namespace MaxOS::net;
14using namespace MaxOS::memory;
15using namespace MaxOS::drivers;
16using namespace MaxOS::drivers::ethernet;
29IPV4AddressResolver::~IPV4AddressResolver() =
default;
38 return 0xFFFFFFFFFFFF;
68IPV4PayloadHandler::~IPV4PayloadHandler() =
default;
119InternetProtocolHandler::~InternetProtocolHandler() =
default;
205 | ((
message->total_length & 0x00FF)
209 message->flags_and_offset = 0x0040;
255 temp += ((data[i] & 0xFF00) >> 8) |
256 ((data[i] & 0x00FF) << 8);
268 return ((~
temp & 0xFF00) >> 8) | ((~
temp & 0x00FF) << 8);
313 for(
size_t i = 0; i < address.length(); i++) {
314 if(address[i] ==
'.') {
A stream that strings can be written to.
void write(string string_to_write) override
Writes a string to the output stream.
Stores the left, top, width and height of a rectangle.
static void * kmalloc(size_t size)
Allocates a block of memory in the KERNEL space.
static void kfree(void *pointer)
Frees a block of memory using the kernel memory manager.
Handles incoming Ethernet Frames and routes them to the appropriate payload handlers.
void send_ethernet_frame(uint64_t destination_mac, uint16_t frame_type, uint8_t *data, uint32_t size)
send an packet via the backend driver
drivers::ethernet::MediaAccessControlAddress get_mac()
Get the MAC address of this device.
Handles a specific type of Ethernet Frame payload.
uint16_t handled_type
The Ethernet frame type this handler handles.
EthernetFrameHandler * frame_handler
The Ethernet frame handler this payload handler is connected to.
Resolves IP addresses to MAC addresses.
virtual void store(InternetProtocolAddress internet_protocol_address, drivers::ethernet::MediaAccessControlAddress media_access_control_address)
Stores an IP address to MAC address mapping. (Default, does nothing, override for use)
IPV4AddressResolver(InternetProtocolHandler *internet_protocol_handler)
Construct a new IPV4 Address Resolver object and register it with the Internet Protocol Handler.
virtual drivers::ethernet::MediaAccessControlAddress resolve(InternetProtocolAddress address)
Resolves an IP address to a MAC address. (Default, returns broadcast address, override for use)
Handles the payload of a specific IP protocol.
virtual bool handle_internet_protocol_payload(net::InternetProtocolAddress src_ip_be, net::InternetProtocolAddress dst_ip_be, uint8_t *internetprotocol_payload, uint32_t size)
Called when an IP packet is received. (Deafult, does nothing, overide for use)
void send(InternetProtocolAddress destination_ip, uint8_t *payload_data, uint32_t size)
Sends an IP packet.
uint8_t ip_protocol
The IP protocol this handler handles.
InternetProtocolHandler * internet_protocol_handler
The Internet protocol handler this payload handler is connected to.
IPV4PayloadHandler(InternetProtocolHandler *internet_protocol_handler, uint8_t protocol)
Construct a new IPV4 Payload Handler object and register it with the Internet Protocol Handler.
Handles IPv4 packets over Ethernet frames.
SubnetMask subnet_mask
The subnet mask.
static SubnetMask create_subnet_mask(uint8_t digit1, uint8_t digit2, uint8_t digit3, uint8_t digit4)
Creates a subnet mask from four digits.
common::OutputStream * error_messages
Stream to output error messages to.
InternetProtocolAddress get_internet_protocol_address() const
Gets the IP address of this device.
common::Map< uint8_t, IPV4PayloadHandler * > ipv_4_payload_handlers
Map of IP protocol numbers to their payload handlers.
void connect_ipv_4_payload_handler(IPV4PayloadHandler *ipv_4_payload_handler)
Connects an IP protocol payload handler.
IPV4AddressResolver * resolver
The IP address resolver.
static InternetProtocolAddress create_internet_protocol_address(uint8_t digit1, uint8_t digit2, uint8_t digit3, uint8_t digit4)
Creates an IP address from four digits.
static InternetProtocolAddress parse(string address)
Parses a string representation of an IP address.
InternetProtocolAddress default_gateway_internet_protocol_address
The IP address of the default gateway.
bool handle_ethernetframe_payload(uint8_t *ethernetframe_payload, uint32_t size) override
Called when an IP packet is received.
void send_internet_protocol_packet(uint32_t dst_ip_be, uint8_t protocol, const uint8_t *data, uint32_t size)
Sends an IP packet.
drivers::ethernet::MediaAccessControlAddress get_media_access_control_address()
Gets the MAC address of this device.
static uint16_t checksum(const uint16_t *data, uint32_t length_in_bytes)
Creates a checksum for the given data.
InternetProtocolAddress own_internet_protocol_address
The IP address of this device.
void register_ipv_4_address_resolver(IPV4AddressResolver *ipv4_resolver)
Registers an IP address resolver.
InternetProtocolHandler(EthernetFrameHandler *backend, InternetProtocolAddress own_internet_protocol_address, InternetProtocolAddress default_gateway_internet_protocol_address, SubnetMask subnet_mask, common::OutputStream *error_messages)
Construct a new Internet Protocol Handler object.
uint64_t MediaAccessControlAddress
Used to make MAC addresses more readable.
Defines classes and structures for handling Internet Protocol version 4 (IPv4) packets.
uint32_t SubnetMask
A subnet mask.
uint32_t InternetProtocolAddress
An IPv4 address.