From d8a7016d8dcd8fdd597689ef9651690249050104 Mon Sep 17 00:00:00 2001 From: Baptiste Wicht Date: Wed, 28 Sep 2016 23:24:27 +0200 Subject: [PATCH] Better encapsulation --- kernel/include/net/tcp_layer.hpp | 5 +++++ kernel/include/net/udp_layer.hpp | 17 +++++++++++++++++ kernel/src/net/tcp_layer.cpp | 9 +-------- kernel/src/net/udp_layer.cpp | 16 ---------------- 4 files changed, 23 insertions(+), 24 deletions(-) diff --git a/kernel/include/net/tcp_layer.hpp b/kernel/include/net/tcp_layer.hpp index 371fd40e..d3ce5984 100644 --- a/kernel/include/net/tcp_layer.hpp +++ b/kernel/include/net/tcp_layer.hpp @@ -12,6 +12,7 @@ #include #include "net/ethernet_layer.hpp" +#include "net/connection_handler.hpp" #include "net/ip_layer.hpp" #include "net/network.hpp" #include "net/socket.hpp" @@ -96,6 +97,10 @@ private: std::expected finalize_packet_direct(network::interface_descriptor& interface, network::ethernet::packet& p); network::ip::layer* parent; + + std::atomic local_port; + + network::connection_handler connections; }; } // end of tcp namespace diff --git a/kernel/include/net/udp_layer.hpp b/kernel/include/net/udp_layer.hpp index 5a0cc05c..25e8cc07 100644 --- a/kernel/include/net/udp_layer.hpp +++ b/kernel/include/net/udp_layer.hpp @@ -9,10 +9,12 @@ #define NET_UDP_LAYER_H #include +#include #include "net/ethernet_layer.hpp" #include "net/ip_layer.hpp" #include "net/network.hpp" +#include "net/connection_handler.hpp" namespace network { @@ -41,6 +43,17 @@ struct kernel_packet_descriptor { network::ip::address target_ip; }; +struct udp_connection { + size_t local_port; ///< The local source port + size_t server_port; ///< The server port + network::ip::address server_address; ///< The server address + + bool connected = false; + bool server = false; + + network::socket* socket = nullptr; +}; + struct layer { layer(network::ip::layer* parent); @@ -109,6 +122,10 @@ private: network::dns::layer* dns_layer; network::dhcp::layer* dhcp_layer; + + std::atomic local_port; + + network::connection_handler connections; }; } // end of upd namespace diff --git a/kernel/src/net/tcp_layer.cpp b/kernel/src/net/tcp_layer.cpp index 03428073..32b8e45a 100644 --- a/kernel/src/net/tcp_layer.cpp +++ b/kernel/src/net/tcp_layer.cpp @@ -6,11 +6,9 @@ //======================================================================= #include -#include #include "conc/condition_variable.hpp" -#include "net/connection_handler.hpp" #include "net/tcp_layer.hpp" #include "net/dns_layer.hpp" #include "net/checksum.hpp" @@ -23,10 +21,9 @@ namespace { -std::atomic local_port; - static constexpr size_t timeout_ms = 1000; static constexpr size_t max_tries = 5; +constexpr size_t default_tcp_header_length = 20; using flag_data_offset = std::bit_field; using flag_reserved = std::bit_field; @@ -40,8 +37,6 @@ using flag_rst = std::bit_field; using flag_syn = std::bit_field; using flag_fin = std::bit_field; -network::connection_handler connections; - void compute_checksum(network::ethernet::packet& packet) { auto* ip_header = reinterpret_cast(packet.payload + packet.tag(1)); auto* tcp_header = reinterpret_cast(packet.payload + packet.tag(2)); @@ -66,8 +61,6 @@ void compute_checksum(network::ethernet::packet& packet) { tcp_header->checksum = switch_endian_16(network::checksum_finalize_nz(sum)); } -constexpr size_t default_tcp_header_length = 20; - uint16_t get_default_flags() { uint16_t flags = 0; // By default diff --git a/kernel/src/net/udp_layer.cpp b/kernel/src/net/udp_layer.cpp index b5eb9460..d3f71eaa 100644 --- a/kernel/src/net/udp_layer.cpp +++ b/kernel/src/net/udp_layer.cpp @@ -7,7 +7,6 @@ #include -#include "net/connection_handler.hpp" #include "net/udp_layer.hpp" #include "net/dns_layer.hpp" #include "net/dhcp_layer.hpp" @@ -19,21 +18,6 @@ namespace { -std::atomic local_port; - -struct udp_connection { - size_t local_port; ///< The local source port - size_t server_port; ///< The server port - network::ip::address server_address; ///< The server address - - bool connected = false; - bool server = false; - - network::socket* socket = nullptr; -}; - -network::connection_handler connections; - void compute_checksum(network::ethernet::packet& packet){ auto* ip_header = reinterpret_cast(packet.payload + packet.tag(1)); auto* udp_header = reinterpret_cast(packet.payload + packet.tag(2));