Max OS 0.3
Loading...
Searching...
No Matches
ipv4.h
Go to the documentation of this file.
1
9#ifndef MAXOS_NET_IPV4_H
10#define MAXOS_NET_IPV4_H
11
12#include <cstdint>
13#include <net/ethernetframe.h>
14
15
16namespace MaxOS::net {
17
18 typedef uint32_t InternetProtocolAddress;
19 typedef uint32_t SubnetMask;
20
28 typedef struct PACKED IPV4Header {
29
30 uint8_t header_length : 4;
31 uint8_t version : 4;
33 uint16_t total_length;
34
35 uint16_t identifier;
37
38 uint8_t time_to_live;
39 uint8_t protocol;
40 uint16_t checksum;
41
42 uint32_t source_ip;
43 uint32_t destination_ip;
44
45 } ipv4_header_t;
46
47 class InternetProtocolHandler;
48
54 public:
55 explicit IPV4AddressResolver(InternetProtocolHandler* internet_protocol_handler);
58 virtual void store(InternetProtocolAddress internet_protocol_address, drivers::ethernet::MediaAccessControlAddress media_access_control_address);
59 };
60
61
67 friend class InternetProtocolHandler;
68
69 protected:
71 uint8_t ip_protocol;
72
73 public:
76
77 virtual bool handle_internet_protocol_payload(net::InternetProtocolAddress src_ip_be, net::InternetProtocolAddress dst_ip_be, uint8_t* internetprotocol_payload, uint32_t size);
78 void send(InternetProtocolAddress destination_ip, uint8_t* payload_data, uint32_t size);
79 };
80
86
87 friend class IPV4AddressResolver;
88
89 protected:
90
92
95
99
101
102 public:
109
110 bool handle_ethernetframe_payload(uint8_t* ethernetframe_payload, uint32_t size) override;
111 void send_internet_protocol_packet(uint32_t dst_ip_be, uint8_t protocol, const uint8_t* data, uint32_t size);
112
113 static uint16_t checksum(const uint16_t* data, uint32_t length_in_bytes);
114
115 static InternetProtocolAddress create_internet_protocol_address(uint8_t digit1, uint8_t digit2, uint8_t digit3, uint8_t digit4);
116 static InternetProtocolAddress parse(string address);
117 static SubnetMask create_subnet_mask(uint8_t digit1, uint8_t digit2, uint8_t digit3, uint8_t digit4);
120
121 void connect_ipv_4_payload_handler(IPV4PayloadHandler* ipv_4_payload_handler);
122
123
124 };
125}
126
127
128#endif //MAXOS_NET_IPV4_H
A stream that strings can be written to.
Stores the left, top, width and height of a rectangle.
Definition rectangle.h:22
Handles incoming Ethernet Frames and routes them to the appropriate payload handlers.
Handles a specific type of Ethernet Frame payload.
Resolves IP addresses to MAC addresses.
Definition ipv4.h:53
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)
Definition ipv4.cpp:47
virtual drivers::ethernet::MediaAccessControlAddress resolve(InternetProtocolAddress address)
Resolves an IP address to a MAC address. (Default, returns broadcast address, override for use)
Definition ipv4.cpp:37
Handles the payload of a specific IP protocol.
Definition ipv4.h:66
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)
Definition ipv4.cpp:79
void send(InternetProtocolAddress destination_ip, uint8_t *payload_data, uint32_t size)
Sends an IP packet.
Definition ipv4.cpp:93
uint8_t ip_protocol
The IP protocol this handler handles.
Definition ipv4.h:71
InternetProtocolHandler * internet_protocol_handler
The Internet protocol handler this payload handler is connected to.
Definition ipv4.h:70
Handles IPv4 packets over Ethernet frames.
Definition ipv4.h:85
SubnetMask subnet_mask
The subnet mask.
Definition ipv4.h:98
static SubnetMask create_subnet_mask(uint8_t digit1, uint8_t digit2, uint8_t digit3, uint8_t digit4)
Creates a subnet mask from four digits.
Definition ipv4.cpp:336
common::OutputStream * error_messages
Stream to output error messages to.
Definition ipv4.h:94
InternetProtocolAddress get_internet_protocol_address() const
Gets the IP address of this device.
Definition ipv4.cpp:345
common::Map< uint8_t, IPV4PayloadHandler * > ipv_4_payload_handlers
Map of IP protocol numbers to their payload handlers.
Definition ipv4.h:91
void connect_ipv_4_payload_handler(IPV4PayloadHandler *ipv_4_payload_handler)
Connects an IP protocol payload handler.
Definition ipv4.cpp:363
IPV4AddressResolver * resolver
The IP address resolver.
Definition ipv4.h:93
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.
Definition ipv4.cpp:292
static InternetProtocolAddress parse(string address)
Parses a string representation of an IP address.
Definition ipv4.cpp:306
InternetProtocolAddress default_gateway_internet_protocol_address
The IP address of the default gateway.
Definition ipv4.h:97
bool handle_ethernetframe_payload(uint8_t *ethernetframe_payload, uint32_t size) override
Called when an IP packet is received.
Definition ipv4.cpp:130
void send_internet_protocol_packet(uint32_t dst_ip_be, uint8_t protocol, const uint8_t *data, uint32_t size)
Sends an IP packet.
Definition ipv4.cpp:190
drivers::ethernet::MediaAccessControlAddress get_media_access_control_address()
Gets the MAC address of this device.
Definition ipv4.cpp:354
static uint16_t checksum(const uint16_t *data, uint32_t length_in_bytes)
Creates a checksum for the given data.
Definition ipv4.cpp:249
InternetProtocolAddress own_internet_protocol_address
The IP address of this device.
Definition ipv4.h:96
void register_ipv_4_address_resolver(IPV4AddressResolver *ipv4_resolver)
Registers an IP address resolver.
Definition ipv4.cpp:276
uint64_t MediaAccessControlAddress
Used to make MAC addresses more readable.
Definition ethernet.h:21
Defines classes for handling Ethernet Frames and their payloads.
uint32_t SubnetMask
A subnet mask.
Definition ipv4.h:19
uint32_t InternetProtocolAddress
An IPv4 address.
Definition ipv4.h:18
The header of an IPv4 packet.
Definition ipv4.h:28
uint32_t destination_ip
The IP of the receiver.
Definition ipv4.h:43
uint8_t version
The version of the IP protocol (4 for IPv4)
Definition ipv4.h:31
uint16_t flags_and_offset
Flags (3 bits) and Fragment Offset (13 bits)
Definition ipv4.h:36
uint8_t header_length
The length of the header in 32-bit words (min 5, max 15)
Definition ipv4.h:30
uint16_t identifier
Unique identifier for the group of fragments of a single IP packet.
Definition ipv4.h:35
uint8_t protocol
The protocol of the payload (TCP, UDP, ICMP, etc.
Definition ipv4.h:39
uint16_t checksum
The checksum of the header.
Definition ipv4.h:40
uint8_t type_of_service
The type of service (low delay, high throughput, high reliability, etc.
Definition ipv4.h:32
uint8_t time_to_live
The maximum hops between devices before the packet is discarded.
Definition ipv4.h:38
uint32_t source_ip
The IP of the sender.
Definition ipv4.h:42
uint16_t total_length
The total length of the IP packet (header + data) in bytes.
Definition ipv4.h:33