lokinet/llarp/router/route_poker.hpp
Thomas Winget 7caa87862e standardize include format and pragma once
All #ifndef guards on headers have been removed, I think,
in favor of #pragma once

Headers are now included as `#include "filename"` if the included file
resides in the same directory as the file including it, or any
subdirectory therein.  Otherwise they are included as
`#include <project/top/dir/relative/path/filename>`

The above does not include system/os headers.
2021-03-09 19:01:41 -05:00

76 lines
1.3 KiB
C++

#pragma once
#include <unordered_map>
#include <string>
#include <memory>
#include <llarp/net/net_int.hpp>
namespace llarp
{
struct AbstractRouter;
struct RoutePoker
{
void
AddRoute(huint32_t ip);
void
DelRoute(huint32_t ip);
void
Init(AbstractRouter* router, bool enable = false);
~RoutePoker();
void
Update();
// sets stored routes and causes AddRoute to actually
// set routes rather than just storing them
void
Enable();
// unsets stored routes, and causes AddRoute to simply
// remember the desired routes rather than setting them.
void
Disable();
/// explicitly put routes up
void
Up();
/// explicitly put routes down
void
Down();
private:
void
DeleteAllRoutes();
void
DisableAllRoutes();
void
EnableAllRoutes();
void
EnableRoute(huint32_t ip, huint32_t gateway);
void
DisableRoute(huint32_t ip, huint32_t gateway);
std::optional<huint32_t>
GetDefaultGateway() const;
std::unordered_map<huint32_t, huint32_t> m_PokedRoutes;
huint32_t m_CurrentGateway;
bool m_Enabled = false;
bool m_Enabling = false;
AbstractRouter* m_Router = nullptr;
bool m_HasNetwork = true;
};
} // namespace llarp