mirror of
https://github.com/wichtounet/thor-os.git
synced 2025-09-19 09:35:15 -04:00
Implement all the new functions
This commit is contained in:
parent
a22b06d1b0
commit
73ab1d4d4a
@ -33,6 +33,10 @@ std::vector<cache_entry> mac_cache;
|
||||
|
||||
} //end of anonymous namespace
|
||||
|
||||
network::arp::cache::cache(network::arp::layer* layer, network::ethernet::layer* parent) : arp_layer(layer), ethernet_layer(parent) {
|
||||
// Nothing else to init
|
||||
}
|
||||
|
||||
void network::arp::cache::update_cache(uint64_t mac, network::ip::address ip){
|
||||
for(auto& entry : mac_cache){
|
||||
if(entry.mac == mac && entry.ip == ip){
|
||||
|
@ -164,3 +164,7 @@ void network::arp::wait_for_reply(){
|
||||
void network::arp::wait_for_reply(size_t ms){
|
||||
wait_queue.wait_for(ms);
|
||||
}
|
||||
|
||||
network::arp::cache& network::arp::layer::get_cache(){
|
||||
return _cache;
|
||||
}
|
||||
|
@ -57,6 +57,10 @@ void prepare_packet(network::ethernet::packet& packet, network::interface_descri
|
||||
|
||||
} //end of anonymous namespace
|
||||
|
||||
network::dhcp::layer::layer(network::udp::layer* parent) : parent(parent) {
|
||||
parent->register_dhcp_layer(this);
|
||||
}
|
||||
|
||||
void network::dhcp::layer::decode(network::interface_descriptor& /*interface*/, network::ethernet::packet& packet) {
|
||||
packet.tag(3, packet.index);
|
||||
|
||||
|
@ -86,6 +86,10 @@ std::string decode_domain(char* payload, size_t& offset) {
|
||||
|
||||
} //end of anonymous namespace
|
||||
|
||||
network::dns::layer::layer(network::udp::layer* parent) : parent(parent) {
|
||||
parent->register_dns_layer(this);
|
||||
}
|
||||
|
||||
void network::dns::layer::decode(network::interface_descriptor& /*interface*/, network::ethernet::packet& packet) {
|
||||
packet.tag(3, packet.index);
|
||||
|
||||
|
@ -167,3 +167,11 @@ std::expected<void> network::ethernet::layer::finalize_packet(network::interface
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
void network::ethernet::layer::register_arp_layer(network::arp::layer* layer){
|
||||
this->arp_layer = layer;
|
||||
}
|
||||
|
||||
void network::ethernet::layer::layer::register_ip_layer(network::ip::layer* layer){
|
||||
this->ip_layer = layer;
|
||||
}
|
||||
|
@ -54,6 +54,10 @@ void prepare_packet(network::ethernet::packet& packet, network::icmp::type t, si
|
||||
|
||||
} // end of anonymous namespace
|
||||
|
||||
network::icmp::layer::layer(network::ip::layer* parent) : parent(parent) {
|
||||
parent->register_icmp_layer(this);
|
||||
}
|
||||
|
||||
void network::icmp::layer::decode(network::interface_descriptor& interface, network::ethernet::packet& packet){
|
||||
packet.tag(2, packet.index);
|
||||
|
||||
|
@ -208,3 +208,18 @@ std::expected<uint64_t> network::ip::layer::get_target_mac(network::interface_de
|
||||
|
||||
return arp_layer->get_cache().get_mac_force(interface, interface.gateway, ARP_TIMEOUT);
|
||||
}
|
||||
void network::ip::layer::register_icmp_layer(network::icmp::layer* layer){
|
||||
this->icmp_layer = layer;
|
||||
}
|
||||
|
||||
void network::ip::layer::register_arp_layer(network::arp::layer* layer){
|
||||
this->arp_layer = layer;
|
||||
}
|
||||
|
||||
void network::ip::layer::register_udp_layer(network::udp::layer* layer){
|
||||
this->udp_layer = layer;
|
||||
}
|
||||
|
||||
void network::ip::layer::register_tcp_layer(network::tcp::layer* layer){
|
||||
this->tcp_layer = layer;
|
||||
}
|
||||
|
@ -107,6 +107,10 @@ size_t tcp_payload_len(const network::ethernet::packet& packet){
|
||||
|
||||
} //end of anonymous namespace
|
||||
|
||||
network::tcp::layer::layer(network::ip::layer* parent) : parent(parent) {
|
||||
parent->register_tcp_layer(this);
|
||||
}
|
||||
|
||||
void network::tcp::layer::init_layer(){
|
||||
local_port = 1023;
|
||||
}
|
||||
|
@ -74,6 +74,10 @@ void prepare_packet(network::ethernet::packet& packet, size_t source, size_t tar
|
||||
|
||||
} //end of anonymous namespace
|
||||
|
||||
network::udp::layer::layer(network::ip::layer* parent) : parent(parent) {
|
||||
parent->register_udp_layer(this);
|
||||
}
|
||||
|
||||
void network::udp::layer::init_layer(){
|
||||
local_port = 1023;
|
||||
}
|
||||
@ -434,3 +438,11 @@ std::expected<size_t> network::udp::layer::receive_from(char* buffer, network::s
|
||||
|
||||
return payload_len;
|
||||
}
|
||||
|
||||
void network::udp::layer::register_dns_layer(network::dns::layer* layer){
|
||||
this->dns_layer = layer;
|
||||
}
|
||||
|
||||
void network::udp::layer::register_dhcp_layer(network::dhcp::layer* layer){
|
||||
this->dhcp_layer = layer;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user