]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/seastar/include/seastar/net/stack.hh
import 15.2.0 Octopus source
[ceph.git] / ceph / src / seastar / include / seastar / net / stack.hh
index d16c32bf066df91b0c08ec5aab7d0437deb8071a..ef55586bec7edf18fbc1b4e6d0f5b701bf2420dd 100644 (file)
@@ -22,6 +22,8 @@
 
 #include <chrono>
 #include <seastar/net/api.hh>
+#include <seastar/core/memory.hh>
+#include "../core/internal/api-level.hh"
 
 namespace seastar {
 
@@ -47,28 +49,70 @@ class socket_impl {
 public:
     virtual ~socket_impl() {}
     virtual future<connected_socket> connect(socket_address sa, socket_address local, transport proto = transport::TCP) = 0;
+    virtual void set_reuseaddr(bool reuseaddr) = 0;
+    virtual bool get_reuseaddr() const = 0;
     virtual void shutdown() = 0;
 };
 
+
+SEASTAR_INCLUDE_API_V2 namespace api_v2 {
+
+class server_socket_impl {
+public:
+    virtual ~server_socket_impl() {}
+    virtual future<accept_result> accept() = 0;
+    virtual void abort_accept() = 0;
+    virtual socket_address local_address() const = 0;
+};
+
+}
+
+#if SEASTAR_API_LEVEL <= 1
+
+SEASTAR_INCLUDE_API_V1 namespace api_v1 {
+
 class server_socket_impl {
 public:
     virtual ~server_socket_impl() {}
     virtual future<connected_socket, socket_address> accept() = 0;
     virtual void abort_accept() = 0;
+    virtual socket_address local_address() const = 0;
 };
 
+}
+
+#endif
+
 class udp_channel_impl {
 public:
-    virtual ~udp_channel_impl() {};
+    virtual ~udp_channel_impl() {}
+    virtual socket_address local_address() const = 0;
     virtual future<udp_datagram> receive() = 0;
-    virtual future<> send(ipv4_addr dst, const char* msg) = 0;
-    virtual future<> send(ipv4_addr dst, packet p) = 0;
+    virtual future<> send(const socket_address& dst, const char* msg) = 0;
+    virtual future<> send(const socket_address& dst, packet p) = 0;
     virtual void shutdown_input() = 0;
     virtual void shutdown_output() = 0;
     virtual bool is_closed() const = 0;
     virtual void close() = 0;
 };
 
+class network_interface_impl {
+public:
+    virtual ~network_interface_impl() {}
+    virtual uint32_t index() const = 0;
+    virtual uint32_t mtu() const = 0;
+
+    virtual const sstring& name() const = 0;
+    virtual const sstring& display_name() const = 0;
+    virtual const std::vector<net::inet_address>& addresses() const = 0;
+    virtual const std::vector<uint8_t> hardware_address() const = 0;
+
+    virtual bool is_loopback() const = 0;
+    virtual bool is_virtual() const = 0;
+    virtual bool is_up() const = 0;
+    virtual bool supports_ipv6() const = 0;
+};
+
 /// \endcond
 
 }