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 * vasum's client definition.
69 * Client uses dbus API.
77 * Connect client with system ipc address.
79 * @return status of this function call
81 VsmStatus connectSystem() noexcept;
86 * @param address ipc socket address
87 * @return status of this function call
89 VsmStatus connect(const std::string& address) noexcept;
94 VsmStatus disconnect() noexcept;
97 * @see ::vsm_get_poll_fd
99 VsmStatus vsm_get_poll_fd(int* fd) noexcept;
102 * @see ::vsm_enter_eventloop
104 VsmStatus vsm_enter_eventloop(int flags, int timeout) noexcept;
107 * @see ::vsm_set_dispatcher_type
109 VsmStatus vsm_set_dispatcher_type(VsmDispacherType dispacher) noexcept;
112 * @see ::vsm_get_dispatcher_type
114 VsmStatus vsm_get_dispatcher_type(VsmDispacherType* dispacher) noexcept;
117 * @see ::vsm_get_status_message
119 const char* vsm_get_status_message() const noexcept;
122 * @see ::vsm_get_status
124 VsmStatus vsm_get_status() const noexcept;
127 * @see ::vsm_get_zone_dbuses
129 VsmStatus vsm_get_zone_dbuses(VsmArrayString* keys, VsmArrayString* values) noexcept;
132 * @see ::vsm_lock_queue
134 VsmStatus vsm_lock_queue() noexcept;
137 * @see ::vsm_unlock_queue
139 VsmStatus vsm_unlock_queue() noexcept;
142 * @see ::vsm_get_zone_ids
144 VsmStatus vsm_get_zone_ids(VsmArrayString* array) noexcept;
147 * @see ::vsm_get_active_zone_id
149 VsmStatus vsm_get_active_zone_id(VsmString* id) noexcept;
152 * @see ::vsm_lookup_zone_by_pid
154 VsmStatus vsm_lookup_zone_by_pid(int pid, VsmString* id) noexcept;
157 * @see ::vsm_lookup_zone_by_id
159 VsmStatus vsm_lookup_zone_by_id(const char* id, Zone* zone) noexcept;
162 * @see ::vsm_lookup_zone_by_terminal_id
164 VsmStatus vsm_lookup_zone_by_terminal_id(int terminal, VsmString* id) noexcept;
167 * @see ::vsm_set_active_zone
169 VsmStatus vsm_set_active_zone(const char* id) noexcept;
172 * @see ::vsm_create_zone
174 VsmStatus vsm_create_zone(const char* id, const char* tname) noexcept;
177 * @see ::vsm_destroy_zone
179 VsmStatus vsm_destroy_zone(const char* id) noexcept;
182 * @see ::vsm_shutdown_zone
184 VsmStatus vsm_shutdown_zone(const char* id) noexcept;
187 * @see ::vsm_start_zone
189 VsmStatus vsm_start_zone(const char* id) noexcept;
192 * @see ::vsm_lock_zone
194 VsmStatus vsm_lock_zone(const char* id) noexcept;
197 * @see ::vsm_unlock_zone
199 VsmStatus vsm_unlock_zone(const char* id) noexcept;
202 * @see ::vsm_add_state_callback
204 VsmStatus vsm_add_state_callback(VsmZoneDbusStateFunction zoneDbusStateCallback,
206 VsmSubscriptionId* subscriptionId) noexcept;
209 * @see ::vsm_del_state_callback
211 VsmStatus vsm_del_state_callback(VsmSubscriptionId subscriptionId) noexcept;
214 * @see ::vsm_del_state_callback
216 VsmStatus vsm_grant_device(const char* id,
218 uint32_t flags) noexcept;
221 * @see ::vsm_revoke_device
223 VsmStatus vsm_revoke_device(const char* id, const char* device) noexcept;
226 * @see ::vsm_zone_get_netdevs
228 VsmStatus vsm_zone_get_netdevs(const char* zone, VsmArrayString* netdevIds) noexcept;
231 * @see ::vsm_netdev_get_ipv4_addr
233 VsmStatus vsm_netdev_get_ipv4_addr(const char* zone,
234 const char* netdevId,
235 struct in_addr *addr) noexcept;
238 * @see ::vsm_netdev_get_ipv6_addr
240 VsmStatus vsm_netdev_get_ipv6_addr(const char* zone,
241 const char* netdevId,
242 struct in6_addr *addr) noexcept;
245 * @see ::vsm_netdev_set_ipv4_addr
247 VsmStatus vsm_netdev_set_ipv4_addr(const char* zone,
248 const char* netdevId,
249 struct in_addr *addr,
250 int prefix) noexcept;
253 * @see ::vsm_netdev_set_ipv6_addr
255 VsmStatus vsm_netdev_set_ipv6_addr(const char* zone,
256 const char* netdevId,
257 struct in6_addr *addr,
258 int prefix) noexcept;
261 * @see ::vsm_netdev_del_ipv4_addr
263 VsmStatus vsm_netdev_del_ipv4_addr(const char* zone,
264 const char* netdevId,
265 struct in_addr* addr,
266 int prefix) noexcept;
269 * @see ::vsm_netdev_del_ipv6_addr
271 VsmStatus vsm_netdev_del_ipv6_addr(const char* zone,
272 const char* netdevId,
273 struct in6_addr* addr,
274 int prefix) noexcept;
277 * @see ::vsm_netdev_up
279 VsmStatus vsm_netdev_up(const char* zone, const char* netdevId) noexcept;
282 * @see ::vsm_netdev_down
284 VsmStatus vsm_netdev_down(const char* zone, const char* netdevId) noexcept;
287 * @see ::vsm_create_netdev_veth
289 VsmStatus vsm_create_netdev_veth(const char* zone,
291 const char* hostDev) noexcept;
294 * @see ::vsm_create_netdev_macvlan
296 VsmStatus vsm_create_netdev_macvlan(const char* zone,
299 enum macvlan_mode mode) noexcept;
302 * @see ::vsm_create_netdev_phys
304 VsmStatus vsm_create_netdev_phys(const char* zone, const char* devId) noexcept;
307 * @see ::vsm_lookup_netdev_by_name
309 VsmStatus vsm_lookup_netdev_by_name(const char* zone,
310 const char* netdevId,
311 Netdev* netdev) noexcept;
314 * @see ::vsm_destroy_netdev
316 VsmStatus vsm_destroy_netdev(const char* zone, const char* devId) noexcept;
319 * @see ::vsm_declare_file
321 VsmStatus vsm_declare_file(const char* zone,
326 VsmString* id) noexcept;
329 * @see ::vsm_declare_mount
331 VsmStatus vsm_declare_mount(const char* source,
337 VsmString* id) noexcept;
339 * @see ::vsm_declare_link
341 VsmStatus vsm_declare_link(const char* source,
344 VsmString* id) noexcept;
347 * @see ::vsm_list_declarations
349 VsmStatus vsm_list_declarations(const char* zone, VsmArrayString* declarations) noexcept;
352 * @see ::vsm_remove_declaration
354 VsmStatus vsm_remove_declaration(const char* zone, VsmString declaration) noexcept;
357 * @see ::vsm_clean_up_zones_root
359 VsmStatus vsm_clean_up_zones_root() noexcept;
364 Status(VsmStatus status, const std::string& msg = "");
365 VsmStatus mVsmStatus;
370 mutable std::mutex mStatusMutex;
371 std::unique_ptr<ipc::epoll::ThreadDispatcher> mInternalDispatcher;
372 std::unique_ptr<ipc::epoll::EventPoll> mEventPoll;
373 std::unique_ptr<ipc::Client> mClient;
375 bool isConnected() const;
376 bool isInternalDispatcherEnabled() const;
377 ipc::epoll::EventPoll& getEventPoll() const;
378 VsmStatus coverException(const std::function<void(void)>& worker) noexcept;
379 VsmStatus vsm_netdev_get_ip_addr(const char* zone,
380 const char* netdevId,
382 void* addr) noexcept;
385 #endif /* VASUM_CLIENT_IMPL_HPP */