2 * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
4 * Contact: Mateusz Malicki <m.malicki2@samsung.com>
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
10 * http://www.apache.org/licenses/LICENSE-2.0
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
22 * @author Mateusz Malicki (m.malicki2@samsung.com)
23 * @brief This file contains vasum-server's client definition
26 #ifndef VASUM_CLIENT_IMPL_HPP
27 #define VASUM_CLIENT_IMPL_HPP
29 #include "vasum-client.h"
30 #include "ipc/epoll/thread-dispatcher.hpp"
31 #include "ipc/epoll/event-poll.hpp"
32 #include "ipc/client.hpp"
37 #include <linux/if_link.h>
40 * Zone's D-Bus state change callback function signature.
42 * @param[in] zoneId affected zone id
43 * @param[in] dbusAddress new D-Bus address
44 * @param data custom user's data pointer passed to vsm_add_state_callback() function
46 typedef std::function<void (const char *zoneId, const char *dbusAddress, void *data)> VsmZoneDbusStateFunction;
49 * Zone information structure
51 typedef struct ZoneStructure {
59 * Network device information structure
61 typedef struct NetdevStructure {
67 * Network interface information structure
80 * vasum's client definition.
82 * Client uses dbus API.
90 * Connect client with system ipc address.
92 * @return status of this function call
94 VsmStatus connectSystem() noexcept;
99 * @param address ipc socket address
100 * @return status of this function call
102 VsmStatus connect(const std::string& address) noexcept;
107 VsmStatus disconnect() noexcept;
110 * @see ::vsm_get_poll_fd
112 VsmStatus vsm_get_poll_fd(int* fd) noexcept;
115 * @see ::vsm_enter_eventloop
117 VsmStatus vsm_enter_eventloop(int flags, int timeout) noexcept;
120 * @see ::vsm_set_dispatcher_type
122 VsmStatus vsm_set_dispatcher_type(VsmDispacherType dispacher) noexcept;
125 * @see ::vsm_get_dispatcher_type
127 VsmStatus vsm_get_dispatcher_type(VsmDispacherType* dispacher) noexcept;
130 * @see ::vsm_get_status_message
132 const char* vsm_get_status_message() const noexcept;
135 * @see ::vsm_get_status
137 VsmStatus vsm_get_status() const noexcept;
140 * @see ::vsm_get_zone_dbuses
142 VsmStatus vsm_get_zone_dbuses(VsmArrayString* keys, VsmArrayString* values) noexcept;
145 * @see ::vsm_lock_queue
147 VsmStatus vsm_lock_queue() noexcept;
150 * @see ::vsm_unlock_queue
152 VsmStatus vsm_unlock_queue() noexcept;
155 * @see ::vsm_get_zone_ids
157 VsmStatus vsm_get_zone_ids(VsmArrayString* array) noexcept;
160 * @see ::vsm_get_active_zone_id
162 VsmStatus vsm_get_active_zone_id(VsmString* id) noexcept;
165 * @see ::vsm_lookup_zone_by_pid
167 VsmStatus vsm_lookup_zone_by_pid(int pid, VsmString* id) noexcept;
170 * @see ::vsm_lookup_zone_by_id
172 VsmStatus vsm_lookup_zone_by_id(const char* id, Zone* zone) noexcept;
175 * @see ::vsm_lookup_zone_by_terminal_id
177 VsmStatus vsm_lookup_zone_by_terminal_id(int terminal, VsmString* id) noexcept;
180 * @see ::vsm_set_active_zone
182 VsmStatus vsm_set_active_zone(const char* id) noexcept;
185 * @see ::vsm_create_zone
187 VsmStatus vsm_create_zone(const char* id, const char* tname) noexcept;
190 * @see ::vsm_destroy_zone
192 VsmStatus vsm_destroy_zone(const char* id) noexcept;
195 * @see ::vsm_shutdown_zone
197 VsmStatus vsm_shutdown_zone(const char* id) noexcept;
200 * @see ::vsm_start_zone
202 VsmStatus vsm_start_zone(const char* id) noexcept;
205 * @see ::vsm_lock_zone
207 VsmStatus vsm_lock_zone(const char* id) noexcept;
210 * @see ::vsm_unlock_zone
212 VsmStatus vsm_unlock_zone(const char* id) noexcept;
215 * @see ::vsm_add_state_callback
217 VsmStatus vsm_add_state_callback(VsmZoneDbusStateFunction zoneDbusStateCallback,
219 VsmSubscriptionId* subscriptionId) noexcept;
222 * @see ::vsm_del_state_callback
224 VsmStatus vsm_del_state_callback(VsmSubscriptionId subscriptionId) noexcept;
227 * @see ::vsm_del_state_callback
229 VsmStatus vsm_grant_device(const char* id,
231 uint32_t flags) noexcept;
234 * @see ::vsm_revoke_device
236 VsmStatus vsm_revoke_device(const char* id, const char* device) noexcept;
239 * @see ::vsm_zone_get_netdevs
241 VsmStatus vsm_zone_get_netdevs(const char* zone, VsmArrayString* netdevIds) noexcept;
243 VsmStatus vsm_netdev_get_ip_addr(const char* zone,
244 const char* netdevId,
245 std::vector<InetAddr>& addrs) noexcept;
248 * @see ::vsm_netdev_get_ipv4_addr
250 VsmStatus vsm_netdev_get_ipv4_addr(const char* zone,
251 const char* netdevId,
252 struct in_addr *addr) noexcept;
255 * @see ::vsm_netdev_get_ipv6_addr
257 VsmStatus vsm_netdev_get_ipv6_addr(const char* zone,
258 const char* netdevId,
259 struct in6_addr *addr) noexcept;
262 * @see ::vsm_netdev_add_ipv4_addr
264 VsmStatus vsm_netdev_add_ipv4_addr(const char* zone,
265 const char* netdevId,
266 struct in_addr *addr,
267 int prefix) noexcept;
270 * @see ::vsm_netdev_add_ipv6_addr
272 VsmStatus vsm_netdev_add_ipv6_addr(const char* zone,
273 const char* netdevId,
274 struct in6_addr *addr,
275 int prefix) noexcept;
278 * @see ::vsm_netdev_del_ipv4_addr
280 VsmStatus vsm_netdev_del_ipv4_addr(const char* zone,
281 const char* netdevId,
282 struct in_addr* addr,
283 int prefix) noexcept;
286 * @see ::vsm_netdev_del_ipv6_addr
288 VsmStatus vsm_netdev_del_ipv6_addr(const char* zone,
289 const char* netdevId,
290 struct in6_addr* addr,
291 int prefix) noexcept;
294 * @see ::vsm_netdev_up
296 VsmStatus vsm_netdev_up(const char* zone, const char* netdevId) noexcept;
299 * @see ::vsm_netdev_down
301 VsmStatus vsm_netdev_down(const char* zone, const char* netdevId) noexcept;
304 * @see ::vsm_create_netdev_veth
306 VsmStatus vsm_create_netdev_veth(const char* zone,
308 const char* hostDev) noexcept;
311 * @see ::vsm_create_netdev_macvlan
313 VsmStatus vsm_create_netdev_macvlan(const char* zone,
316 enum macvlan_mode mode) noexcept;
319 * @see ::vsm_create_netdev_phys
321 VsmStatus vsm_create_netdev_phys(const char* zone, const char* devId) noexcept;
324 * @see ::vsm_lookup_netdev_by_name
326 VsmStatus vsm_lookup_netdev_by_name(const char* zone,
327 const char* netdevId,
328 Netdev* netdev) noexcept;
331 * @see ::vsm_destroy_netdev
333 VsmStatus vsm_destroy_netdev(const char* zone, const char* devId) noexcept;
336 * @see ::vsm_declare_file
338 VsmStatus vsm_declare_file(const char* zone,
343 VsmString* id) noexcept;
346 * @see ::vsm_declare_mount
348 VsmStatus vsm_declare_mount(const char* source,
354 VsmString* id) noexcept;
356 * @see ::vsm_declare_link
358 VsmStatus vsm_declare_link(const char* source,
361 VsmString* id) noexcept;
364 * @see ::vsm_list_declarations
366 VsmStatus vsm_list_declarations(const char* zone, VsmArrayString* declarations) noexcept;
369 * @see ::vsm_remove_declaration
371 VsmStatus vsm_remove_declaration(const char* zone, VsmString declaration) noexcept;
374 * @see ::vsm_clean_up_zones_root
376 VsmStatus vsm_clean_up_zones_root() noexcept;
381 Status(VsmStatus status, const std::string& msg = "");
382 VsmStatus mVsmStatus;
387 mutable std::mutex mStatusMutex;
388 std::unique_ptr<ipc::epoll::ThreadDispatcher> mInternalDispatcher;
389 std::unique_ptr<ipc::epoll::EventPoll> mEventPoll;
390 std::unique_ptr<ipc::Client> mClient;
392 bool isConnected() const;
393 bool isInternalDispatcherEnabled() const;
394 ipc::epoll::EventPoll& getEventPoll() const;
395 VsmStatus coverException(const std::function<void(void)>& worker) noexcept;
398 #endif /* VASUM_CLIENT_IMPL_HPP */