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"
31 #include <ipc/epoll/thread-dispatcher.hpp>
32 #include <ipc/epoll/event-poll.hpp>
33 #include <ipc/client.hpp>
38 #include <linux/if_link.h>
41 * Zone's D-Bus state change callback function signature.
43 * @param[in] zoneId affected zone id
44 * @param[in] dbusAddress new D-Bus address
45 * @param data custom user's data pointer passed to vsm_add_state_callback() function
47 typedef std::function<void (const char *zoneId, const char *dbusAddress, void *data)> VsmZoneDbusStateFunction;
50 * Notification callback function signature.
52 * @param[in] zone source zone
53 * @param[in] application sending application name
54 * @param[in] message notification message
55 * @param data custom user's data pointer passed to vsm_add_notification_callback()
57 typedef std::function<void(const char *zone, const char *application, const char *message, void *data)>
58 VsmNotificationFunction;
61 * vasum's client definition.
63 * Client uses dbus API.
71 * Connect client with system ipc address.
73 * @return status of this function call
75 VsmStatus connectSystem() noexcept;
80 * @param address ipc socket address
81 * @return status of this function call
83 VsmStatus connect(const std::string& address) noexcept;
88 VsmStatus disconnect() noexcept;
91 * @see ::vsm_get_poll_fd
93 VsmStatus vsm_get_poll_fd(int* fd) noexcept;
96 * @see ::vsm_enter_eventloop
98 VsmStatus vsm_enter_eventloop(int flags, int timeout) noexcept;
101 * @see ::vsm_set_dispatcher_type
103 VsmStatus vsm_set_dispatcher_type(VsmDispacherType dispacher) noexcept;
106 * @see ::vsm_get_dispatcher_type
108 VsmStatus vsm_get_dispatcher_type(VsmDispacherType* dispacher) noexcept;
111 * @see ::vsm_get_status_message
113 const char* vsm_get_status_message() const noexcept;
116 * @see ::vsm_get_status
118 VsmStatus vsm_get_status() const noexcept;
121 * @see ::vsm_get_zone_dbuses
123 VsmStatus vsm_get_zone_dbuses(VsmArrayString* keys, VsmArrayString* values) noexcept;
126 * @see ::vsm_lock_queue
128 VsmStatus vsm_lock_queue() noexcept;
131 * @see ::vsm_unlock_queue
133 VsmStatus vsm_unlock_queue() noexcept;
136 * @see ::vsm_get_zone_ids
138 VsmStatus vsm_get_zone_ids(VsmArrayString* array) noexcept;
141 * @see ::vsm_get_active_zone_id
143 VsmStatus vsm_get_active_zone_id(VsmString* id) noexcept;
146 * @see ::vsm_get_zone_rootpath
148 VsmStatus vsm_get_zone_rootpath(const char* id, VsmString* rootpath) noexcept;
151 * @see ::vsm_lookup_zone_by_pid
153 VsmStatus vsm_lookup_zone_by_pid(int pid, VsmString* id) noexcept;
156 * @see ::vsm_lookup_zone_by_id
158 VsmStatus vsm_lookup_zone_by_id(const char* id, VsmZone* zone) noexcept;
161 * @see ::vsm_lookup_zone_by_terminal_id
163 VsmStatus vsm_lookup_zone_by_terminal_id(int terminal, VsmString* id) noexcept;
166 * @see ::vsm_set_active_zone
168 VsmStatus vsm_set_active_zone(const char* id) noexcept;
171 * @see ::vsm_create_zone
173 VsmStatus vsm_create_zone(const char* id, const char* tname) noexcept;
176 * @see ::vsm_destroy_zone
178 VsmStatus vsm_destroy_zone(const char* id) noexcept;
181 * @see ::vsm_shutdown_zone
183 VsmStatus vsm_shutdown_zone(const char* id) noexcept;
186 * @see ::vsm_start_zone
188 VsmStatus vsm_start_zone(const char* id) noexcept;
191 * @see ::vsm_lock_zone
193 VsmStatus vsm_lock_zone(const char* id) noexcept;
196 * @see ::vsm_unlock_zone
198 VsmStatus vsm_unlock_zone(const char* id) noexcept;
201 * @see ::vsm_add_state_callback
203 VsmStatus vsm_add_state_callback(VsmZoneDbusStateFunction zoneDbusStateCallback,
205 VsmSubscriptionId* subscriptionId) noexcept;
208 * @see ::vsm_del_state_callback
210 VsmStatus vsm_del_state_callback(VsmSubscriptionId subscriptionId) noexcept;
213 * @see ::vsm_del_state_callback
215 VsmStatus vsm_grant_device(const char* id,
217 uint32_t flags) noexcept;
220 * @see ::vsm_revoke_device
222 VsmStatus vsm_revoke_device(const char* id, const char* device) noexcept;
225 * @see ::vsm_zone_get_netdevs
227 VsmStatus vsm_zone_get_netdevs(const char* zone, VsmArrayString* netdevIds) noexcept;
230 * @see ::vsm_netdev_get_ipv4_addr
232 VsmStatus vsm_netdev_get_ipv4_addr(const char* zone,
233 const char* netdevId,
234 struct in_addr *addr) noexcept;
237 * @see ::vsm_netdev_get_ipv6_addr
239 VsmStatus vsm_netdev_get_ipv6_addr(const char* zone,
240 const char* netdevId,
241 struct in6_addr *addr) noexcept;
244 * @see ::vsm_netdev_set_ipv4_addr
246 VsmStatus vsm_netdev_set_ipv4_addr(const char* zone,
247 const char* netdevId,
248 struct in_addr *addr,
249 int prefix) noexcept;
252 * @see ::vsm_netdev_set_ipv6_addr
254 VsmStatus vsm_netdev_set_ipv6_addr(const char* zone,
255 const char* netdevId,
256 struct in6_addr *addr,
257 int prefix) noexcept;
260 * @see ::vsm_netdev_del_ipv4_addr
262 VsmStatus vsm_netdev_del_ipv4_addr(const char* zone,
263 const char* netdevId,
264 struct in_addr* addr,
265 int prefix) noexcept;
268 * @see ::vsm_netdev_del_ipv6_addr
270 VsmStatus vsm_netdev_del_ipv6_addr(const char* zone,
271 const char* netdevId,
272 struct in6_addr* addr,
273 int prefix) noexcept;
276 * @see ::vsm_netdev_up
278 VsmStatus vsm_netdev_up(const char* zone, const char* netdevId) noexcept;
281 * @see ::vsm_netdev_down
283 VsmStatus vsm_netdev_down(const char* zone, const char* netdevId) noexcept;
286 * @see ::vsm_create_netdev_veth
288 VsmStatus vsm_create_netdev_veth(const char* zone,
290 const char* hostDev) noexcept;
293 * @see ::vsm_create_netdev_macvlan
295 VsmStatus vsm_create_netdev_macvlan(const char* zone,
298 enum macvlan_mode mode) noexcept;
301 * @see ::vsm_create_netdev_phys
303 VsmStatus vsm_create_netdev_phys(const char* zone, const char* devId) noexcept;
306 * @see ::vsm_lookup_netdev_by_name
308 VsmStatus vsm_lookup_netdev_by_name(const char* zone,
309 const char* netdevId,
310 VsmNetdev* netdev) noexcept;
313 * @see ::vsm_destroy_netdev
315 VsmStatus vsm_destroy_netdev(const char* zone, const char* devId) noexcept;
318 * @see ::vsm_declare_file
320 VsmStatus vsm_declare_file(const char* zone,
325 VsmString* id) noexcept;
328 * @see ::vsm_declare_mount
330 VsmStatus vsm_declare_mount(const char* source,
336 VsmString* id) noexcept;
338 * @see ::vsm_declare_link
340 VsmStatus vsm_declare_link(const char* source,
343 VsmString* id) noexcept;
346 * @see ::vsm_list_declarations
348 VsmStatus vsm_list_declarations(const char* zone, VsmArrayString* declarations) noexcept;
351 * @see ::vsm_remove_declaration
353 VsmStatus vsm_remove_declaration(const char* zone, VsmString declaration) noexcept;
356 * @see ::vsm_notify_active_zone
358 VsmStatus vsm_notify_active_zone(const char* application, const char* message) noexcept;
361 * @see ::vsm_file_move_request
363 VsmStatus vsm_file_move_request(const char* destZone, const char* path) noexcept;
366 * @see ::vsm_add_notification_callback
368 VsmStatus vsm_add_notification_callback(VsmNotificationFunction notificationCallback,
370 VsmSubscriptionId* subscriptionId) noexcept;
373 * @see ::vsm_del_notification_callback
375 VsmStatus vsm_del_notification_callback(VsmSubscriptionId subscriptionId) noexcept;
380 Status(VsmStatus status, const std::string& msg = "");
381 VsmStatus mVsmStatus;
386 mutable std::mutex mStatusMutex;
387 std::unique_ptr<ipc::epoll::ThreadDispatcher> mInternalDispatcher;
388 std::unique_ptr<ipc::epoll::EventPoll> mEventPoll;
389 std::unique_ptr<ipc::Client> mClient;
391 bool isConnected() const;
392 bool isInternalDispatcherEnabled() const;
393 ipc::epoll::EventPoll& getEventPoll() const;
394 VsmStatus coverException(const std::function<void(void)>& worker) noexcept;
395 VsmStatus vsm_netdev_get_ip_addr(const char* zone,
396 const char* netdevId,
398 void* addr) noexcept;
401 #endif /* VASUM_CLIENT_IMPL_HPP */