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:454
 
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:538
 
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:691
 
bool removeAnnotation(const std::string &key)
removes a key value pair from the annotations
Definition DobbyRdkPluginUtils.cpp:778
 
int addFileDescriptor(const std::string &pluginName, int fd)
Adds another file descriptor to be passed into the container.
Definition DobbyRdkPluginUtils.cpp:667
 
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:488
 
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:594
 
bool addAnnotation(const std::string &key, const std::string &value)
adds a key value pair to the annotations
Definition DobbyRdkPluginUtils.cpp:757
 
Definition DobbyRdkPluginUtils.h:55