libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
networkrouting.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
13#include <promeki/namespace.h>
14#include <promeki/list.h>
15#include <promeki/ipv4address.h>
16#include <promeki/ipv6address.h>
19
20PROMEKI_NAMESPACE_BEGIN
21
55class NetworkRouting {
56 public:
57 NetworkRouting() = delete;
58 ~NetworkRouting() = delete;
59
68 static NetworkAddress defaultGatewayIpv4();
69
71 static NetworkAddress defaultGatewayIpv6();
72
80 static NetworkInterface defaultRouteInterfaceIpv4();
81
83 static NetworkInterface defaultRouteInterfaceIpv6();
84
99 static Ipv4Address sourceAddressFor(const Ipv4Address &dest);
100
113 static Ipv6Address sourceAddressFor(const Ipv6Address &dest);
114
126 static List<NetworkAddress> dnsServers();
127
144 struct Route {
145 NetworkAddress destination;
146 int prefixLen = 0;
147 NetworkAddress gateway;
148 NetworkInterface iface;
149 uint32_t metric = 0;
150 };
151
175 static List<Route> routesFor(const Ipv4Address &dest);
176
181 static List<Route> routesFor(const Ipv6Address &dest);
182
198 class Backend {
199 public:
200 virtual ~Backend() = default;
201
203 virtual NetworkAddress defaultGatewayIpv4() const = 0;
204
206 virtual NetworkAddress defaultGatewayIpv6() const = 0;
207
209 virtual NetworkInterface defaultRouteInterfaceIpv4() const = 0;
210
212 virtual NetworkInterface defaultRouteInterfaceIpv6() const = 0;
213
215 virtual List<NetworkAddress> dnsServers() const = 0;
216
218 virtual List<Route> routesForIpv4(const Ipv4Address &dest) const = 0;
219
221 virtual List<Route> routesForIpv6(const Ipv6Address &dest) const = 0;
222 };
223
232 static void setBackend(Backend *backend);
233
235 static Backend *backend();
236};
237
238PROMEKI_NAMESPACE_END
239
240#endif // PROMEKI_ENABLE_NETWORK