Fork Vasum on GitHub Official Vasum Wiki on Tizen.org
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
vasum-client-impl.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * Contact: Mateusz Malicki <m.malicki2@samsung.com>
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License
17  */
18 
19 
26 #ifndef VASUM_CLIENT_IMPL_HPP
27 #define VASUM_CLIENT_IMPL_HPP
28 
29 #include "vasum-client.h"
32 #include "cargo-ipc/client.hpp"
33 
34 #include <mutex>
35 #include <memory>
36 #include <functional>
37 #include <linux/if_link.h>
38 
46 typedef std::function<void (const char *zoneId, const char *dbusAddress, void *data)> VsmZoneDbusStateFunction;
47 
51 typedef struct ZoneStructure {
52  char *id;
53  int terminal;
55  char *rootfs_path;
56 } *Zone;
57 
61 typedef struct NetdevStructure {
62  char *name;
64 } *Netdev;
65 
69 typedef struct {
70  int type;
71  int prefix;
72  union {
73  struct in_addr ipv4;
74  struct in6_addr ipv6;
75  } addr;
76 } InetAddr;
77 
78 
84 class Client final {
85 public:
86  Client() noexcept;
87  ~Client() noexcept;
88 
94  VsmStatus connectSystem() noexcept;
95 
102  VsmStatus connect(const std::string& address) noexcept;
103 
107  VsmStatus disconnect() noexcept;
108 
112  VsmStatus vsm_get_poll_fd(int* fd) noexcept;
113 
117  VsmStatus vsm_enter_eventloop(int flags, int timeout) noexcept;
118 
123 
128 
132  const char* vsm_get_status_message() const noexcept;
133 
137  VsmStatus vsm_get_status() const noexcept;
138 
143 
147  VsmStatus vsm_lock_queue() noexcept;
148 
152  VsmStatus vsm_unlock_queue() noexcept;
153 
157  VsmStatus vsm_get_zone_ids(VsmArrayString* array) noexcept;
158 
163 
167  VsmStatus vsm_lookup_zone_by_pid(int pid, VsmString* id) noexcept;
168 
172  VsmStatus vsm_lookup_zone_by_id(const char* id, Zone* zone) noexcept;
173 
177  VsmStatus vsm_lookup_zone_by_terminal_id(int terminal, VsmString* id) noexcept;
178 
182  VsmStatus vsm_set_active_zone(const char* id) noexcept;
183 
187  VsmStatus vsm_create_zone(const char* id, const char* tname) noexcept;
188 
192  VsmStatus vsm_destroy_zone(const char* id) noexcept;
193 
197  VsmStatus vsm_shutdown_zone(const char* id) noexcept;
198 
202  VsmStatus vsm_start_zone(const char* id) noexcept;
203 
207  VsmStatus vsm_lock_zone(const char* id) noexcept;
208 
212  VsmStatus vsm_unlock_zone(const char* id) noexcept;
213 
218  void* data,
219  VsmSubscriptionId* subscriptionId) noexcept;
220 
224  VsmStatus vsm_del_state_callback(VsmSubscriptionId subscriptionId) noexcept;
225 
229  VsmStatus vsm_grant_device(const char* id,
230  const char* device,
231  uint32_t flags) noexcept;
232 
236  VsmStatus vsm_revoke_device(const char* id, const char* device) noexcept;
237 
241  VsmStatus vsm_zone_get_netdevs(const char* zone, VsmArrayString* netdevIds) noexcept;
242 
243  VsmStatus vsm_netdev_get_ip_addr(const char* zone,
244  const char* netdevId,
245  std::vector<InetAddr>& addrs) noexcept;
246 
250  VsmStatus vsm_netdev_get_ipv4_addr(const char* zone,
251  const char* netdevId,
252  struct in_addr *addr) noexcept;
253 
257  VsmStatus vsm_netdev_get_ipv6_addr(const char* zone,
258  const char* netdevId,
259  struct in6_addr *addr) noexcept;
260 
264  VsmStatus vsm_netdev_add_ipv4_addr(const char* zone,
265  const char* netdevId,
266  struct in_addr *addr,
267  int prefix) noexcept;
268 
272  VsmStatus vsm_netdev_add_ipv6_addr(const char* zone,
273  const char* netdevId,
274  struct in6_addr *addr,
275  int prefix) noexcept;
276 
280  VsmStatus vsm_netdev_del_ipv4_addr(const char* zone,
281  const char* netdevId,
282  struct in_addr* addr,
283  int prefix) noexcept;
284 
288  VsmStatus vsm_netdev_del_ipv6_addr(const char* zone,
289  const char* netdevId,
290  struct in6_addr* addr,
291  int prefix) noexcept;
292 
296  VsmStatus vsm_netdev_up(const char* zone, const char* netdevId) noexcept;
297 
301  VsmStatus vsm_netdev_down(const char* zone, const char* netdevId) noexcept;
302 
306  VsmStatus vsm_create_netdev_veth(const char* zone,
307  const char* zoneDev,
308  const char* hostDev) noexcept;
309 
313  VsmStatus vsm_create_netdev_macvlan(const char* zone,
314  const char* zoneDev,
315  const char* hostDev,
316  enum macvlan_mode mode) noexcept;
317 
321  VsmStatus vsm_create_netdev_phys(const char* zone, const char* devId) noexcept;
322 
326  VsmStatus vsm_lookup_netdev_by_name(const char* zone,
327  const char* netdevId,
328  Netdev* netdev) noexcept;
329 
333  VsmStatus vsm_destroy_netdev(const char* zone, const char* devId) noexcept;
334 
338  VsmStatus vsm_declare_file(const char* zone,
339  VsmFileType type,
340  const char* path,
341  int32_t flags,
342  mode_t mode,
343  VsmString* id) noexcept;
344 
348  VsmStatus vsm_declare_mount(const char* source,
349  const char* zone,
350  const char* target,
351  const char* type,
352  uint64_t flags,
353  const char* data,
354  VsmString* id) noexcept;
358  VsmStatus vsm_declare_link(const char* source,
359  const char* zone,
360  const char* target,
361  VsmString* id) noexcept;
362 
366  VsmStatus vsm_list_declarations(const char* zone, VsmArrayString* declarations) noexcept;
367 
371  VsmStatus vsm_remove_declaration(const char* zone, VsmString declaration) noexcept;
372 
377 
378 private:
379  struct Status {
380  Status();
381  Status(VsmStatus status, const std::string& msg = "");
383  std::string mMsg;
384  };
386 
387  mutable std::mutex mStatusMutex;
388  std::unique_ptr<cargo::ipc::epoll::ThreadDispatcher> mInternalDispatcher;
389  std::unique_ptr<cargo::ipc::epoll::EventPoll> mEventPoll;
390  std::unique_ptr<cargo::ipc::Client> mClient;
391 
392  bool isConnected() const;
393  bool isInternalDispatcherEnabled() const;
395  VsmStatus coverException(const std::function<void(void)>& worker) noexcept;
396 };
397 
398 #endif /* VASUM_CLIENT_IMPL_HPP */
C++ epoll wrapper.
VsmStatus vsm_remove_declaration(const char *zone, VsmString declaration) noexcept
Definition: vasum-client-impl.cpp:881
char * name
Definition: vasum-client-impl.hpp:62
VsmStatus connectSystem() noexcept
Connect client with system ipc address.
Definition: vasum-client-impl.cpp:212
VsmStatus vsm_declare_link(const char *source, const char *zone, const char *target, VsmString *id) noexcept
Definition: vasum-client-impl.cpp:849
VsmStatus vsm_netdev_up(const char *zone, const char *netdevId) noexcept
Definition: vasum-client-impl.cpp:677
VsmStatus vsm_unlock_zone(const char *id) noexcept
Definition: vasum-client-impl.cpp:461
VsmStatus vsm_netdev_del_ipv4_addr(const char *zone, const char *netdevId, struct in_addr *addr, int prefix) noexcept
Definition: vasum-client-impl.cpp:638
bool isInternalDispatcherEnabled() const
Definition: vasum-client-impl.cpp:166
Status mStatus
Definition: vasum-client-impl.hpp:385
VsmStatus vsm_unlock_queue() noexcept
Definition: vasum-client-impl.cpp:318
VsmStatus vsm_del_state_callback(VsmSubscriptionId subscriptionId) noexcept
Definition: vasum-client-impl.cpp:481
VsmStatus vsm_grant_device(const char *id, const char *device, uint32_t flags) noexcept
Definition: vasum-client-impl.cpp:488
VsmStatus vsm_get_poll_fd(int *fd) noexcept
Definition: vasum-client-impl.cpp:235
char * rootfs_path
Definition: vasum-client-impl.hpp:55
const char * vsm_get_status_message() const noexcept
Definition: vasum-client-impl.cpp:290
VsmStatus coverException(const std::function< void(void)> &worker) noexcept
Definition: vasum-client-impl.cpp:184
VsmStatus vsm_destroy_netdev(const char *zone, const char *devId) noexcept
Definition: vasum-client-impl.cpp:789
VsmStatus vsm_get_dispatcher_type(VsmDispacherType *dispacher) noexcept
Definition: vasum-client-impl.cpp:277
VsmStatus vsm_get_zone_dbuses(VsmArrayString *keys, VsmArrayString *values) noexcept
Definition: vasum-client-impl.cpp:301
Network interface information structure.
Definition: vasum-client-impl.hpp:69
Network device information structure.
Definition: vasum-client-impl.hpp:61
VsmStatus vsm_lookup_zone_by_pid(int pid, VsmString *id) noexcept
Definition: vasum-client-impl.cpp:351
VsmStatus vsm_lock_zone(const char *id) noexcept
Definition: vasum-client-impl.cpp:450
std::mutex mStatusMutex
Definition: vasum-client-impl.hpp:387
VsmNetdevType type
Definition: vasum-client-impl.hpp:63
VsmStatus vsm_destroy_zone(const char *id) noexcept
Definition: vasum-client-impl.cpp:417
VsmStatus vsm_netdev_del_ipv6_addr(const char *zone, const char *netdevId, struct in6_addr *addr, int prefix) noexcept
Definition: vasum-client-impl.cpp:657
VsmStatus vsm_clean_up_zones_root() noexcept
Definition: vasum-client-impl.cpp:893
~Client() noexcept
Definition: vasum-client-impl.cpp:157
VsmStatus connect(const std::string &address) noexcept
Connect client.
Definition: vasum-client-impl.cpp:217
VsmZoneState state
Definition: vasum-client-impl.hpp:54
VsmStatus vsm_declare_mount(const char *source, const char *zone, const char *target, const char *type, uint64_t flags, const char *data, VsmString *id) noexcept
Definition: vasum-client-impl.cpp:822
char data[368]
Definition: initctl.cpp:41
VsmStatus vsm_add_state_callback(VsmZoneDbusStateFunction zoneDbusStateCallback, void *data, VsmSubscriptionId *subscriptionId) noexcept
Definition: vasum-client-impl.cpp:471
VsmStatus vsm_list_declarations(const char *zone, VsmArrayString *declarations) noexcept
Definition: vasum-client-impl.cpp:868
Zone information structure.
Definition: vasum-client-impl.hpp:51
VsmStatus vsm_lock_queue() noexcept
Definition: vasum-client-impl.cpp:309
VsmStatus vsm_netdev_add_ipv4_addr(const char *zone, const char *netdevId, struct in_addr *addr, int prefix) noexcept
Definition: vasum-client-impl.cpp:602
std::unique_ptr< cargo::ipc::epoll::EventPoll > mEventPoll
Definition: vasum-client-impl.hpp:389
unsigned int VsmSubscriptionId
Subscription id.
Definition: vasum-client.h:205
char * id
Definition: vasum-client-impl.hpp:52
std::unique_ptr< cargo::ipc::Client > mClient
Definition: vasum-client-impl.hpp:390
std::string mMsg
Definition: vasum-client-impl.hpp:383
VsmDispacherType
Event dispacher types.
Definition: vasum-client.h:255
VsmStatus vsm_get_active_zone_id(VsmString *id) noexcept
Definition: vasum-client-impl.cpp:339
VsmStatus vsm_create_netdev_veth(const char *zone, const char *zoneDev, const char *hostDev) noexcept
Definition: vasum-client-impl.cpp:705
VsmStatus vsm_lookup_zone_by_id(const char *id, Zone *zone) noexcept
Definition: vasum-client-impl.cpp:372
vasum's client definition.
Definition: vasum-client-impl.hpp:84
VsmNetdevType
Netowrk device type.
Definition: vasum-client.h:232
This file contains the public API for Vasum Client.
VsmStatus vsm_start_zone(const char *id) noexcept
Definition: vasum-client-impl.cpp:439
VsmStatus vsm_create_zone(const char *id, const char *tname) noexcept
Definition: vasum-client-impl.cpp:404
VsmStatus vsm_netdev_get_ipv6_addr(const char *zone, const char *netdevId, struct in6_addr *addr) noexcept
Definition: vasum-client-impl.cpp:587
int prefix
Definition: vasum-client-impl.hpp:71
VsmStatus vsm_netdev_down(const char *zone, const char *netdevId) noexcept
Definition: vasum-client-impl.cpp:691
VsmStatus vsm_netdev_get_ipv4_addr(const char *zone, const char *netdevId, struct in_addr *addr) noexcept
Definition: vasum-client-impl.cpp:572
VsmStatus
Completion status of libvasum-client's functions.
Definition: vasum-client.h:193
VsmStatus mVsmStatus
Definition: vasum-client-impl.hpp:382
int type
Definition: vasum-client-impl.hpp:70
cargo::ipc::epoll::EventPoll & getEventPoll() const
Definition: vasum-client-impl.cpp:171
Client() noexcept
Definition: vasum-client-impl.cpp:153
VsmStatus vsm_netdev_add_ipv6_addr(const char *zone, const char *netdevId, struct in6_addr *addr, int prefix) noexcept
Definition: vasum-client-impl.cpp:620
std::function< void(const char *zoneId, const char *dbusAddress, void *data)> VsmZoneDbusStateFunction
Zone's D-Bus state change callback function signature.
Definition: vasum-client-impl.hpp:46
VsmString * VsmArrayString
NULL-terminated array of strings type.
Definition: vasum-client.h:187
Thread epoll dispatcher.
Status()
Definition: vasum-client-impl.cpp:143
int terminal
Definition: vasum-client-impl.hpp:53
VsmStatus vsm_get_zone_ids(VsmArrayString *array) noexcept
Definition: vasum-client-impl.cpp:327
VsmStatus vsm_lookup_zone_by_terminal_id(int terminal, VsmString *id) noexcept
Definition: vasum-client-impl.cpp:385
VsmStatus vsm_set_dispatcher_type(VsmDispacherType dispacher) noexcept
Definition: vasum-client-impl.cpp:256
This class waits on registered file descriptor for events.
Definition: event-poll.hpp:47
VsmStatus vsm_get_status() const noexcept
Definition: vasum-client-impl.cpp:295
VsmStatus vsm_set_active_zone(const char *id) noexcept
Definition: vasum-client-impl.cpp:393
VsmZoneState
States of zone.
Definition: vasum-client.h:210
struct NetdevStructure * Netdev
Network device information structure.
struct ZoneStructure * Zone
Zone information structure.
VsmStatus vsm_lookup_netdev_by_name(const char *zone, const char *netdevId, Netdev *netdev) noexcept
Definition: vasum-client-impl.cpp:751
std::unique_ptr< cargo::ipc::epoll::ThreadDispatcher > mInternalDispatcher
Definition: vasum-client-impl.hpp:388
VsmStatus vsm_revoke_device(const char *id, const char *device) noexcept
Definition: vasum-client-impl.cpp:500
VsmStatus vsm_create_netdev_macvlan(const char *zone, const char *zoneDev, const char *hostDev, enum macvlan_mode mode) noexcept
Definition: vasum-client-impl.cpp:721
VsmStatus vsm_zone_get_netdevs(const char *zone, VsmArrayString *netdevIds) noexcept
Definition: vasum-client-impl.cpp:512
VsmFileType
File type.
Definition: vasum-client.h:246
char * VsmString
NULL-terminated string type.
Definition: vasum-client.h:180
Definition: vasum-client-impl.hpp:379
VsmStatus vsm_enter_eventloop(int flags, int timeout) noexcept
Definition: vasum-client-impl.cpp:246
bool isConnected() const
Definition: vasum-client-impl.cpp:161
VsmStatus vsm_declare_file(const char *zone, VsmFileType type, const char *path, int32_t flags, mode_t mode, VsmString *id) noexcept
Definition: vasum-client-impl.cpp:801
VsmStatus vsm_netdev_get_ip_addr(const char *zone, const char *netdevId, std::vector< InetAddr > &addrs) noexcept
Definition: vasum-client-impl.cpp:525
VsmStatus disconnect() noexcept
Disconnect client.
Definition: vasum-client-impl.cpp:228
VsmStatus vsm_create_netdev_phys(const char *zone, const char *devId) noexcept
Definition: vasum-client-impl.cpp:738
VsmStatus vsm_shutdown_zone(const char *id) noexcept
Definition: vasum-client-impl.cpp:428