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 the public API for Vasum Client
27 #include "vasum-client.h"
28 #include "vasum-client-impl.hpp"
33 #define API __attribute__((visibility("default")))
40 Client& getClient(VsmClient client)
43 return *reinterpret_cast<Client*>(client);
48 API VsmStatus vsm_lock_queue(VsmClient client)
50 return getClient(client).vsm_lock_queue();
53 API VsmStatus vsm_unlock_queue(VsmClient client)
55 return getClient(client).vsm_unlock_queue();
58 API VsmStatus vsm_get_poll_fd(VsmClient client, int* fd)
60 return getClient(client).vsm_get_poll_fd(fd);
63 API VsmStatus vsm_enter_eventloop(VsmClient client, int flags, int timeout)
65 return getClient(client).vsm_enter_eventloop(flags, timeout);
68 API VsmStatus vsm_set_dispatcher_type(VsmClient client, VsmDispacherType dispacher)
70 return getClient(client).vsm_set_dispatcher_type(dispacher);
73 API VsmStatus vsm_get_dispatcher_type(VsmClient client, VsmDispacherType* dispacher)
75 return getClient(client).vsm_get_dispatcher_type(dispacher);
78 API VsmClient vsm_client_create()
80 Client* clientPtr = new(nothrow) Client();
81 return reinterpret_cast<VsmClient>(clientPtr);
84 API VsmStatus vsm_connect(VsmClient client)
86 return getClient(client).connectSystem();
89 API VsmStatus vsm_connect_custom(VsmClient client, const char* address)
91 return getClient(client).connect(address);
94 API VsmStatus vsm_disconnect(VsmClient client)
96 return getClient(client).disconnect();
99 API void vsm_array_string_free(VsmArrayString astring)
104 for (char** ptr = astring; *ptr; ++ptr) {
105 vsm_string_free(*ptr);
110 API void vsm_string_free(VsmString string)
115 API VsmString vsm_zone_get_id(VsmZone zone)
117 Zone z = static_cast<Zone>(zone);
121 API int vsm_zone_get_terminal(VsmZone zone)
123 Zone z = static_cast<Zone>(zone);
127 API VsmZoneState vsm_zone_get_state(VsmZone zone)
129 Zone z = static_cast<Zone>(zone);
133 API VsmString vsm_zone_get_rootfs(VsmZone zone)
135 Zone z = static_cast<Zone>(zone);
136 return z->rootfs_path;
139 API void vsm_zone_free(VsmZone zone)
141 Zone z = static_cast<Zone>(zone);
142 free(z->rootfs_path);
147 API VsmString vsm_netdev_get_name(VsmNetdev netdev)
149 Netdev n = static_cast<Netdev>(netdev);
153 API VsmNetdevType vsm_netdev_get_type(VsmNetdev netdev)
155 Netdev n = static_cast<Netdev>(netdev);
159 API void vsm_netdev_free(VsmNetdev netdev)
161 Netdev n = static_cast<Netdev>(netdev);
166 API void vsm_client_free(VsmClient client)
168 if (client != NULL) {
169 delete &getClient(client);
173 API const char* vsm_get_status_message(VsmClient client)
175 return getClient(client).vsm_get_status_message();
178 API VsmStatus vsm_get_status(VsmClient client)
180 return getClient(client).vsm_get_status();
183 API VsmStatus vsm_get_zone_dbuses(VsmClient client, VsmArrayString* keys, VsmArrayString* values)
185 return getClient(client).vsm_get_zone_dbuses(keys, values);
188 API VsmStatus vsm_get_zone_ids(VsmClient client, VsmArrayString* array)
190 return getClient(client).vsm_get_zone_ids(array);
193 API VsmStatus vsm_get_active_zone_id(VsmClient client, VsmString* id)
195 return getClient(client).vsm_get_active_zone_id(id);
198 API VsmStatus vsm_lookup_zone_by_pid(VsmClient client, int pid, VsmString* id)
200 return getClient(client).vsm_lookup_zone_by_pid(pid, id);
203 API VsmStatus vsm_lookup_zone_by_id(VsmClient client, const char* id, VsmZone* zone)
205 Zone* z = reinterpret_cast<Zone*>(zone);
206 return getClient(client).vsm_lookup_zone_by_id(id, z);
209 API VsmStatus vsm_lookup_zone_by_terminal_id(VsmClient client, int terminal, VsmString* id)
211 return getClient(client).vsm_lookup_zone_by_terminal_id(terminal, id);
214 API VsmStatus vsm_set_active_zone(VsmClient client, const char* id)
216 return getClient(client).vsm_set_active_zone(id);
219 API VsmStatus vsm_create_zone(VsmClient client, const char* id, const char* tname)
221 return getClient(client).vsm_create_zone(id, tname);
224 API VsmStatus vsm_destroy_zone(VsmClient client, const char* id, int /*force*/)
226 return getClient(client).vsm_destroy_zone(id);
229 API VsmStatus vsm_shutdown_zone(VsmClient client, const char* id)
231 return getClient(client).vsm_shutdown_zone(id);
234 API VsmStatus vsm_start_zone(VsmClient client, const char* id)
236 return getClient(client).vsm_start_zone(id);
239 API VsmStatus vsm_lock_zone(VsmClient client, const char* id)
241 return getClient(client).vsm_lock_zone(id);
244 API VsmStatus vsm_unlock_zone(VsmClient client, const char* id)
246 return getClient(client).vsm_unlock_zone(id);
249 API VsmStatus vsm_add_state_callback(VsmClient client,
250 VsmZoneDbusStateCallback zoneDbusStateCallback,
252 VsmSubscriptionId* subscriptionId)
254 return getClient(client).vsm_add_state_callback(zoneDbusStateCallback, data, subscriptionId);
257 API VsmStatus vsm_del_state_callback(VsmClient client, VsmSubscriptionId subscriptionId)
259 return getClient(client).vsm_del_state_callback(subscriptionId);
262 API VsmStatus vsm_grant_device(VsmClient client,
267 return getClient(client).vsm_grant_device(id, device, flags);
270 API VsmStatus vsm_revoke_device(VsmClient client, const char* id, const char* device)
272 return getClient(client).vsm_revoke_device(id, device);
275 API VsmStatus vsm_zone_get_netdevs(VsmClient client,
277 VsmArrayString* netdevIds)
279 return getClient(client).vsm_zone_get_netdevs(zone, netdevIds);
282 API VsmStatus vsm_netdev_get_ipv4_addr(VsmClient client,
284 const char* netdevId,
285 struct in_addr *addr)
287 return getClient(client).vsm_netdev_get_ipv4_addr(zone, netdevId, addr);
290 API VsmStatus vsm_netdev_get_ipv6_addr(VsmClient client,
292 const char* netdevId,
293 struct in6_addr *addr)
295 return getClient(client).vsm_netdev_get_ipv6_addr(zone, netdevId, addr);
298 API VsmStatus vsm_netdev_set_ipv4_addr(VsmClient client,
300 const char* netdevId,
301 struct in_addr *addr,
304 return getClient(client).vsm_netdev_set_ipv4_addr(zone, netdevId, addr, prefix);
307 API VsmStatus vsm_netdev_set_ipv6_addr(VsmClient client,
309 const char* netdevId,
310 struct in6_addr *addr,
313 return getClient(client).vsm_netdev_set_ipv6_addr(zone, netdevId, addr, prefix);
316 API VsmStatus vsm_netdev_del_ipv4_addr(VsmClient client,
318 const char* netdevId,
319 struct in_addr* addr,
322 return getClient(client).vsm_netdev_del_ipv4_addr(zone, netdevId, addr, prefix);
325 API VsmStatus vsm_netdev_del_ipv6_addr(VsmClient client,
327 const char* netdevId,
328 struct in6_addr* addr,
331 return getClient(client).vsm_netdev_del_ipv6_addr(zone, netdevId, addr, prefix);
334 API VsmStatus vsm_netdev_up(VsmClient client,
336 const char* netdevId)
338 return getClient(client).vsm_netdev_up(zone, netdevId);
341 API VsmStatus vsm_netdev_down(VsmClient client,
343 const char* netdevId)
345 return getClient(client).vsm_netdev_down(zone, netdevId);
348 API VsmStatus vsm_create_netdev_veth(VsmClient client,
353 return getClient(client).vsm_create_netdev_veth(zone, zoneDev, hostDev);
356 API VsmStatus vsm_create_netdev_macvlan(VsmClient client,
360 enum macvlan_mode mode)
362 return getClient(client).vsm_create_netdev_macvlan(zone, zoneDev, hostDev, mode);
365 API VsmStatus vsm_create_netdev_phys(VsmClient client, const char* zone, const char* devId)
367 return getClient(client).vsm_create_netdev_phys(zone, devId);
370 API VsmStatus vsm_lookup_netdev_by_name(VsmClient client,
372 const char* netdevId,
375 Netdev* n = reinterpret_cast<Netdev*>(netdev);
376 return getClient(client).vsm_lookup_netdev_by_name(zone, netdevId, n);
379 API VsmStatus vsm_destroy_netdev(VsmClient client, const char* zone, const char* devId)
381 return getClient(client).vsm_destroy_netdev(zone, devId);
384 API VsmStatus vsm_declare_file(VsmClient client,
391 return getClient(client).vsm_declare_file(zone, type, path, flags, mode, NULL);
395 API VsmStatus vsm_declare_mount(VsmClient client,
403 return getClient(client).vsm_declare_mount(source, zone, target, type, flags, data, NULL);
406 API VsmStatus vsm_declare_link(VsmClient client,
411 return getClient(client).vsm_declare_link(source, zone, target, NULL);
414 API VsmStatus vsm_list_declarations(VsmClient client,
416 VsmArrayString* declarations)
418 return getClient(client).vsm_list_declarations(zone, declarations);
421 API VsmStatus vsm_remove_declaration(VsmClient client,
423 VsmString declaration)
425 return getClient(client).vsm_remove_declaration(zone, declaration);
428 API VsmStatus vsm_clean_up_zones_root(VsmClient client)
430 return getClient(client).vsm_clean_up_zones_root();