23#ifndef DOBBYRDKPLUGINUTILS_H
24#define DOBBYRDKPLUGINUTILS_H
26#include "rt_dobby_schema.h"
27#include "rt_state_schema.h"
29#if defined (DOBBY_BUILD)
30 #include <IDobbyStartState.h>
32 #include <Dobby/rdkPlugins/IDobbyStartState.h>
49#define ADDRESS_FILE_DIR "/tmp/dobby/plugin/networking/"
51#define MOUNT_TUNNEL_CONTAINER_PATH "/mnt/.containermnttunnel"
52#define MOUNT_TUNNEL_HOST_PATH "/tmp/.hostmnttunnel-"
57 std::string ipAddress;
58 in_addr_t ipAddressRaw;
59 std::string containerId;
63 if (containerId.empty() || rhs.containerId.empty())
65 return ipAddressRaw == rhs.ipAddressRaw;
67 return containerId == rhs.containerId;
82 const std::string &containerId);
84 const std::shared_ptr<IDobbyStartState> &startState,
85 const std::string &containerId);
87 const std::shared_ptr<const rt_state_schema> &state,
88 const std::string &containerId);
90 const std::shared_ptr<const rt_state_schema> &state,
91 const std::shared_ptr<IDobbyStartState> &startState,
92 const std::string &containerId);
120 template<
class Function,
class... Args >
121 inline bool callInNamespace(pid_t pid,
int nsType, Function&& f, Args&&... args)
const
124 std::forward<Args>(args)...));
128 const std::function<
bool()>& func)
const;
130 void nsThread(
int newNsFd,
int nsType,
bool* success,
131 std::function<
bool()>& func)
const;
140 const std::string &str,
144 std::string
readTextFile(
const std::string &path)
const;
146 bool addMount(
const std::string &source,
147 const std::string &target,
148 const std::string &fsType,
149 const std::list<std::string> &mountOptions)
const;
157 std::list<int>
files()
const;
159 std::list<int>
files(
const std::string& pluginName)
const;
161 bool addAnnotation(
const std::string &key,
const std::string &value);
163 std::map<std::string, std::string> getAnnotations()
const {
return mAnnotations; };
168 std::string ipAddressToString(
const in_addr_t &ipAddress);
171 mutable std::mutex mLock;
173 std::shared_ptr<rt_dobby_schema> mConf;
174 std::shared_ptr<const rt_state_schema> mState;
175 std::shared_ptr<IDobbyStartState> mStartState;
177 const std::string mContainerId;
179 std::map<std::string, std::string> mAnnotations;
Class for useful utility methods for plugins such as adding mounts and environment variables.
Definition DobbyRdkPluginUtils.h:79
bool callInNamespaceImpl(pid_t pid, int nsType, const std::function< bool()> &func) const
Utility function to run some code in a specific namespace of the container.
Definition DobbyRdkPluginUtils.cpp:305
std::string readTextFile(const std::string &path) const
Simply reads a file into a string.
Definition DobbyRdkPluginUtils.cpp:446
pid_t getContainerPid() const
Gets the container pid from the stdin string of a hook.
Definition DobbyRdkPluginUtils.cpp:107
bool getContainerNetworkInfo(ContainerNetworkInfo &networkInfo)
Gets network info about the container (veth/IP)
Definition DobbyRdkPluginUtils.cpp:146
static bool mkdirRecursive(const std::string &path, mode_t mode)
Makes a directory and all parent directories as needed.
Definition DobbyRdkPluginUtils.cpp:530
void nsThread(int newNsFd, int nsType, bool *success, std::function< bool()> &func) const
Thread helper function that implements the setns syscall.
Definition DobbyRdkPluginUtils.cpp:254
bool getTakenVeths(std::vector< std::string > &takenVeths)
Gets allocated veth devices.
Definition DobbyRdkPluginUtils.cpp:191
std::list< int > files() const
Gets all file descriptor registered by any client.
Definition DobbyRdkPluginUtils.cpp:683
bool removeAnnotation(const std::string &key)
removes a key value pair from the annotations
Definition DobbyRdkPluginUtils.cpp:770
int addFileDescriptor(const std::string &pluginName, int fd)
Adds another file descriptor to be passed into the container.
Definition DobbyRdkPluginUtils.cpp:659
std::string getContainerId() const
Gets the container ID.
Definition DobbyRdkPluginUtils.cpp:130
bool writeTextFile(const std::string &path, const std::string &str, int flags, mode_t mode) const
Simply writes a string into a file.
Definition DobbyRdkPluginUtils.cpp:395
bool addMount(const std::string &source, const std::string &target, const std::string &fsType, const std::list< std::string > &mountOptions) const
Public api to allow for adding additional mounts to a container's config file.
Definition DobbyRdkPluginUtils.cpp:480
bool callInNamespace(pid_t pid, int nsType, Function &&f, Args &&... args) const
Slightly nicer version of callInNamespace, handles the function bind for you automatically.
Definition DobbyRdkPluginUtils.h:121
bool addEnvironmentVar(const std::string &envVar) const
Public api to allow for adding additional environment variables.
Definition DobbyRdkPluginUtils.cpp:586
bool addAnnotation(const std::string &key, const std::string &value)
adds a key value pair to the annotations
Definition DobbyRdkPluginUtils.cpp:749
Definition DobbyRdkPluginUtils.h:55