Implement all the new functions

This commit is contained in:
Baptiste Wicht 2016-09-28 23:07:36 +02:00
parent a22b06d1b0
commit 73ab1d4d4a
No known key found for this signature in database
GPG Key ID: C5566B6C7F884532
9 changed files with 59 additions and 0 deletions

View File

@ -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){

View File

@ -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;
}

View File

@ -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);

View File

@ -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);

View File

@ -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;
}

View File

@ -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);

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}