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 "host-ipc-connection.hpp"
32 #include <ipc/epoll/thread-dispatcher.hpp>
33 #include <ipc/epoll/event-poll.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_get_zone_ids
128 VsmStatus vsm_get_zone_ids(VsmArrayString* array) noexcept;
131 * @see ::vsm_get_active_zone_id
133 VsmStatus vsm_get_active_zone_id(VsmString* id) noexcept;
136 * @see ::vsm_get_zone_rootpath
138 VsmStatus vsm_get_zone_rootpath(const char* id, VsmString* rootpath) noexcept;
141 * @see ::vsm_lookup_zone_by_pid
143 VsmStatus vsm_lookup_zone_by_pid(int pid, VsmString* id) noexcept;
146 * @see ::vsm_lookup_zone_by_id
148 VsmStatus vsm_lookup_zone_by_id(const char* id, VsmZone* zone) noexcept;
151 * @see ::vsm_lookup_zone_by_terminal_id
153 VsmStatus vsm_lookup_zone_by_terminal_id(int terminal, VsmString* id) noexcept;
156 * @see ::vsm_set_active_zone
158 VsmStatus vsm_set_active_zone(const char* id) noexcept;
161 * @see ::vsm_create_zone
163 VsmStatus vsm_create_zone(const char* id, const char* tname) noexcept;
166 * @see ::vsm_destroy_zone
168 VsmStatus vsm_destroy_zone(const char* id) noexcept;
171 * @see ::vsm_shutdown_zone
173 VsmStatus vsm_shutdown_zone(const char* id) noexcept;
176 * @see ::vsm_start_zone
178 VsmStatus vsm_start_zone(const char* id) noexcept;
181 * @see ::vsm_lock_zone
183 VsmStatus vsm_lock_zone(const char* id) noexcept;
186 * @see ::vsm_unlock_zone
188 VsmStatus vsm_unlock_zone(const char* id) noexcept;
191 * @see ::vsm_add_state_callback
193 VsmStatus vsm_add_state_callback(VsmZoneDbusStateFunction zoneDbusStateCallback,
195 VsmSubscriptionId* subscriptionId) noexcept;
198 * @see ::vsm_del_state_callback
200 VsmStatus vsm_del_state_callback(VsmSubscriptionId subscriptionId) noexcept;
203 * @see ::vsm_del_state_callback
205 VsmStatus vsm_grant_device(const char* id,
207 uint32_t flags) noexcept;
210 * @see ::vsm_revoke_device
212 VsmStatus vsm_revoke_device(const char* id, const char* device) noexcept;
215 * @see ::vsm_zone_get_netdevs
217 VsmStatus vsm_zone_get_netdevs(const char* zone, VsmArrayString* netdevIds) noexcept;
220 * @see ::vsm_netdev_get_ipv4_addr
222 VsmStatus vsm_netdev_get_ipv4_addr(const char* zone,
223 const char* netdevId,
224 struct in_addr *addr) noexcept;
227 * @see ::vsm_netdev_get_ipv6_addr
229 VsmStatus vsm_netdev_get_ipv6_addr(const char* zone,
230 const char* netdevId,
231 struct in6_addr *addr) noexcept;
234 * @see ::vsm_netdev_set_ipv4_addr
236 VsmStatus vsm_netdev_set_ipv4_addr(const char* zone,
237 const char* netdevId,
238 struct in_addr *addr,
239 int prefix) noexcept;
242 * @see ::vsm_netdev_set_ipv6_addr
244 VsmStatus vsm_netdev_set_ipv6_addr(const char* zone,
245 const char* netdevId,
246 struct in6_addr *addr,
247 int prefix) noexcept;
250 * @see ::vsm_netdev_del_ipv4_addr
252 VsmStatus vsm_netdev_del_ipv4_addr(const char* zone,
253 const char* netdevId,
254 struct in_addr* addr,
255 int prefix) noexcept;
258 * @see ::vsm_netdev_del_ipv6_addr
260 VsmStatus vsm_netdev_del_ipv6_addr(const char* zone,
261 const char* netdevId,
262 struct in6_addr* addr,
263 int prefix) noexcept;
266 * @see ::vsm_netdev_up
268 VsmStatus vsm_netdev_up(const char* zone, const char* netdevId) noexcept;
271 * @see ::vsm_netdev_down
273 VsmStatus vsm_netdev_down(const char* zone, const char* netdevId) noexcept;
276 * @see ::vsm_create_netdev_veth
278 VsmStatus vsm_create_netdev_veth(const char* zone,
280 const char* hostDev) noexcept;
283 * @see ::vsm_create_netdev_macvlan
285 VsmStatus vsm_create_netdev_macvlan(const char* zone,
288 enum macvlan_mode mode) noexcept;
291 * @see ::vsm_create_netdev_phys
293 VsmStatus vsm_create_netdev_phys(const char* zone, const char* devId) noexcept;
296 * @see ::vsm_lookup_netdev_by_name
298 VsmStatus vsm_lookup_netdev_by_name(const char* zone,
299 const char* netdevId,
300 VsmNetdev* netdev) noexcept;
303 * @see ::vsm_destroy_netdev
305 VsmStatus vsm_destroy_netdev(const char* zone, const char* devId) noexcept;
308 * @see ::vsm_declare_file
310 VsmStatus vsm_declare_file(const char* zone,
315 VsmString* id) noexcept;
318 * @see ::vsm_declare_mount
320 VsmStatus vsm_declare_mount(const char* source,
326 VsmString* id) noexcept;
328 * @see ::vsm_declare_link
330 VsmStatus vsm_declare_link(const char* source,
333 VsmString* id) noexcept;
336 * @see ::vsm_list_declarations
338 VsmStatus vsm_list_declarations(const char* zone, VsmArrayString* declarations) noexcept;
341 * @see ::vsm_remove_declaration
343 VsmStatus vsm_remove_declaration(const char* zone, VsmString declaration) noexcept;
346 * @see ::vsm_notify_active_zone
348 VsmStatus vsm_notify_active_zone(const char* application, const char* message) noexcept;
351 * @see ::vsm_file_move_request
353 VsmStatus vsm_file_move_request(const char* destZone, const char* path) noexcept;
356 * @see ::vsm_add_notification_callback
358 VsmStatus vsm_add_notification_callback(VsmNotificationFunction notificationCallback,
360 VsmSubscriptionId* subscriptionId) noexcept;
363 * @see ::vsm_del_notification_callback
365 VsmStatus vsm_del_notification_callback(VsmSubscriptionId subscriptionId) noexcept;
368 typedef vasum::client::HostIPCConnection HostConnection;
371 Status(VsmStatus status, const std::string& msg = "");
372 VsmStatus mVsmStatus;
377 mutable std::mutex mStatusMutex;
378 std::unique_ptr<ipc::epoll::ThreadDispatcher> mInternalDispatcher;
379 std::unique_ptr<ipc::epoll::EventPoll> mEventPoll;
380 HostConnection mHostClient;
382 bool isInternalDispatcherEnabled() const;
383 ipc::epoll::EventPoll& getEventPoll() const;
384 VsmStatus coverException(const std::function<void(void)>& worker) noexcept;
385 VsmStatus vsm_netdev_get_ip_addr(const char* zone,
386 const char* netdevId,
388 void* addr) noexcept;
391 #endif /* VASUM_CLIENT_IMPL_HPP */