Fork Vasum on GitHub Official Vasum Wiki on Tizen.org
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
container.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2015 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License version 2.1 as published by the Free Software Foundation.
7  *
8  * This library is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11  * Lesser General Public License for more details.
12  *
13  * You should have received a copy of the GNU Lesser General Public
14  * License along with this library; if not, write to the Free Software
15  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16  */
17 
24 #ifndef LXCPP_CONTAINER_HPP
25 #define LXCPP_CONTAINER_HPP
26 
27 #include "lxcpp/network-config.hpp"
30 #include "lxcpp/logger-config.hpp"
31 
32 #include <sys/types.h>
33 
34 #include <string>
35 #include <functional>
36 #include <vector>
37 
38 namespace lxcpp {
39 
41  const std::string ifname;
43  const std::string macaddr;
44  const int mtu;
45  const int flags;
46  const std::vector<InetAddr> addrs;
47 };
48 
49 class Container {
50 public:
51  typedef std::function<void(void)> Callback;
52 
53  enum class State {
54  STOPPED,
55  STOPPING,
56  STARTING,
57  RUNNING
58  };
59 
60  virtual ~Container() {};
61 
65  virtual const std::string& getName() const = 0;
66  virtual const std::string& getRootPath() const = 0;
67  virtual void setHostName(const std::string& hostname) = 0;
68 
69  virtual pid_t getGuardPid() const = 0;
70  virtual pid_t getInitPid() const = 0;
71 
72  virtual const std::vector<std::string>& getInit() = 0;
73  virtual void setInit(const std::vector<std::string> &init) = 0;
74 
75  virtual void setLogger(const logger::LogType type,
76  const logger::LogLevel level,
77  const std::string &arg = "") = 0;
78 
79  virtual void setTerminalCount(const unsigned int count) = 0;
80 
81  virtual void addUIDMap(unsigned min, unsigned max, unsigned num) = 0;
82  virtual void addGIDMap(unsigned min, unsigned max, unsigned num) = 0;
83 
87  virtual void start() = 0;
88  virtual void stop() = 0;
89  virtual void freeze() = 0;
90  virtual void unfreeze() = 0;
91  virtual void reboot() = 0;
92 
96  virtual State getState() = 0;
97  virtual void setStartedCallback(const Callback& callback) = 0;
98  virtual void setStoppedCallback(const Callback& callback) = 0;
99 
103  virtual int attach(const std::vector<std::string>& argv,
104  const uid_t uid,
105  const gid_t gid,
106  const std::string& ttyPath,
107  const std::vector<gid_t>& supplementaryGids,
108  const int capsToKeep,
109  const std::string& workDirInContainer,
110  const std::vector<std::string>& envToKeep,
111  const std::vector<std::pair<std::string, std::string>>& envToSet) = 0;
112  virtual void console() = 0;
113 
117  virtual void addInterfaceConfig(const std::string& hostif,
118  const std::string& zoneif,
119  InterfaceType type,
120  const std::vector<InetAddr>& addrs,
121  MacVLanMode mode = MacVLanMode::PRIVATE) = 0;
122  virtual void addInetConfig(const std::string& ifname, const InetAddr& addr) = 0;
123 
127  virtual std::vector<std::string> getInterfaces() const = 0;
128  virtual NetworkInterfaceInfo getInterfaceInfo(const std::string& ifname) const = 0;
129  virtual void createInterface(const std::string& hostif,
130  const std::string& zoneif,
131  InterfaceType type,
132  MacVLanMode mode) = 0;
133  virtual void destroyInterface(const std::string& ifname) = 0;
134  virtual void moveInterface(const std::string& ifname) = 0;
135  virtual void setUpInterface(const std::string& ifname) = 0;
136  virtual void setDownInterface(const std::string& ifname) = 0;
137  virtual void addInetAddr(const std::string& ifname, const InetAddr& addr) = 0;
138  virtual void delInetAddr(const std::string& ifname, const InetAddr& addr) = 0;
139 
143  virtual void declareFile(const provision::File::Type type,
144  const std::string& path,
145  const int32_t flags,
146  const int32_t mode) = 0;
147  virtual const FileVector& getFiles() const = 0;
148  virtual void removeFile(const provision::File& item) = 0;
149 
150  virtual void declareMount(const std::string& source,
151  const std::string& target,
152  const std::string& type,
153  const int64_t flags,
154  const std::string& data) = 0;
155  virtual const MountVector& getMounts() const = 0;
156  virtual void removeMount(const provision::Mount& item) = 0;
157 
158  virtual void declareLink(const std::string& source,
159  const std::string& target) = 0;
160  virtual const LinkVector& getLinks() const = 0;
161  virtual void removeLink(const provision::Link& item) = 0;
162 
166  virtual void addSubsystem(const std::string& name, const std::string& path) = 0;
167  virtual void addCGroup(const std::string& subsys,
168  const std::string& grpname,
169  const std::vector<CGroupParam>& comm,
170  const std::vector<CGroupParam>& params) = 0;
171 
175  virtual void setEnv(const std::vector<std::pair<std::string, std::string>>& variables) = 0;
176 
180  virtual void setCaps(const int caps) = 0;
181 
185  virtual void setSystemProperty(const std::string& name, const std::string& value) = 0;
186 
190  virtual void setRlimit(const std::string& type, const uint64_t hard, const uint64_t soft) = 0;
191 
196  virtual void setNamespaces(const int namespaces) = 0;
197 
202  virtual void setUser(const int uid, const int gid, const std::vector<int> additionalGids) = 0;
203 
207  virtual void addDevice(const std::string& path,
208  const char type,
209  const int64_t major,
210  const int64_t minor,
211  const std::string& permissions,
212  const uint32_t fileMode,
213  const uint32_t uid,
214  const uint32_t gid) = 0;
215 
219  virtual void addHook(const std::string& type,
220  const std::vector<std::string>& hook,
221  const std::vector<std::pair<std::string, std::string>>& env) = 0;
222 
223 };
224 
225 } // namespace lxcpp
226 
227 #endif // LXCPP_CONTAINER_HPP
virtual void setHostName(const std::string &hostname)=0
virtual void addInetAddr(const std::string &ifname, const InetAddr &addr)=0
virtual void start()=0
Execution actions.
virtual void stop()=0
const NetStatus status
Definition: container.hpp:42
virtual void setDownInterface(const std::string &ifname)=0
virtual void freeze()=0
std::function< void(void)> Callback
Definition: container.hpp:51
const std::vector< InetAddr > addrs
Definition: container.hpp:46
virtual void console()=0
Provision configuration items.
Definition: provision-config.hpp:43
virtual pid_t getInitPid() const =0
virtual void declareFile(const provision::File::Type type, const std::string &path, const int32_t flags, const int32_t mode)=0
Provisioning.
virtual void setLogger(const logger::LogType type, const logger::LogLevel level, const std::string &arg="")=0
virtual void moveInterface(const std::string &ifname)=0
Type
Definition: provision-config.hpp:45
Unified ip address.
Definition: network.hpp:56
virtual void removeLink(const provision::Link &item)=0
Definition: container.hpp:49
virtual void addUIDMap(unsigned min, unsigned max, unsigned num)=0
virtual void addGIDMap(unsigned min, unsigned max, unsigned num)=0
virtual const std::string & getName() const =0
Configuration.
virtual void removeFile(const provision::File &item)=0
virtual void setNamespaces(const int namespaces)=0
Namespaces TODO Needed to implement application container.
const int mtu
Definition: container.hpp:44
Logger configuration.
std::vector< provision::Mount > MountVector
Definition: provision-config.hpp:139
Definition: provision-config.hpp:81
const int flags
Definition: container.hpp:45
Definition: container.hpp:40
virtual void addInetConfig(const std::string &ifname, const InetAddr &addr)=0
virtual void removeMount(const provision::Mount &item)=0
virtual void addHook(const std::string &type, const std::vector< std::string > &hook, const std::vector< std::pair< std::string, std::string >> &env)=0
Hooks.
char data[368]
Definition: initctl.cpp:41
LogLevel
Available log levels.
Definition: level.hpp:36
virtual void setCaps(const int caps)=0
Linux capabilities.
virtual State getState()=0
States.
virtual void destroyInterface(const std::string &ifname)=0
virtual ~Container()
Definition: container.hpp:60
std::vector< provision::File > FileVector
Definition: provision-config.hpp:138
Network configuration classes.
State
Definition: container.hpp:53
virtual void reboot()=0
virtual void setUpInterface(const std::string &ifname)=0
virtual void setTerminalCount(const unsigned int count)=0
virtual void setEnv(const std::vector< std::pair< std::string, std::string >> &variables)=0
Environment variables.
virtual void setSystemProperty(const std::string &name, const std::string &value)=0
System Property (sysctl)
virtual const MountVector & getMounts() const =0
virtual void addInterfaceConfig(const std::string &hostif, const std::string &zoneif, InterfaceType type, const std::vector< InetAddr > &addrs, MacVLanMode mode=MacVLanMode::PRIVATE)=0
Network interfaces setup/config.
virtual const FileVector & getFiles() const =0
virtual std::vector< std::string > getInterfaces() const =0
Network interfaces (runtime)
virtual void addDevice(const std::string &path, const char type, const int64_t major, const int64_t minor, const std::string &permissions, const uint32_t fileMode, const uint32_t uid, const uint32_t gid)=0
Device.
virtual void setUser(const int uid, const int gid, const std::vector< int > additionalGids)=0
UID/GIDS TODO Needed to implement application container.
virtual void setRlimit(const std::string &type, const uint64_t hard, const uint64_t soft)=0
Rlimit.
virtual NetworkInterfaceInfo getInterfaceInfo(const std::string &ifname) const =0
Provisioning configuration.
NetStatus
Definition: network.hpp:195
virtual const std::string & getRootPath() const =0
virtual void setStoppedCallback(const Callback &callback)=0
virtual pid_t getGuardPid() const =0
virtual void setInit(const std::vector< std::string > &init)=0
virtual const LinkVector & getLinks() const =0
virtual void declareMount(const std::string &source, const std::string &target, const std::string &type, const int64_t flags, const std::string &data)=0
virtual int attach(const std::vector< std::string > &argv, const uid_t uid, const gid_t gid, const std::string &ttyPath, const std::vector< gid_t > &supplementaryGids, const int capsToKeep, const std::string &workDirInContainer, const std::vector< std::string > &envToKeep, const std::vector< std::pair< std::string, std::string >> &envToSet)=0
Other.
MacVLanMode
Suported MacVLan modes.
Definition: network.hpp:188
virtual void setStartedCallback(const Callback &callback)=0
virtual void delInetAddr(const std::string &ifname, const InetAddr &addr)=0
LogType
Definition: logger.hpp:82
Control-groups configuration.
virtual void addSubsystem(const std::string &name, const std::string &path)=0
CGroups.
virtual void addCGroup(const std::string &subsys, const std::string &grpname, const std::vector< CGroupParam > &comm, const std::vector< CGroupParam > &params)=0
const std::string ifname
Definition: container.hpp:41
virtual void declareLink(const std::string &source, const std::string &target)=0
virtual void createInterface(const std::string &hostif, const std::string &zoneif, InterfaceType type, MacVLanMode mode)=0
virtual void unfreeze()=0
virtual const std::vector< std::string > & getInit()=0
const std::string macaddr
Definition: container.hpp:43
InterfaceType
Created interface type.
Definition: network.hpp:179
std::vector< provision::Link > LinkVector
Definition: provision-config.hpp:140