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_ip_addr(VsmClient client,
284 const char* netdevId,
287 std::vector<InetAddr> addrlist;
288 VsmStatus status = getClient(client).vsm_netdev_get_ip_addr(zone, netdevId, addrlist);
289 int n = addrlist.size();
290 InetAddr *a = (InetAddr *)malloc((n+1)*sizeof(InetAddr));
291 std::copy(addrlist.begin(), addrlist.end(), a);
297 API VsmStatus vsm_netdev_get_ipv4_addr(VsmClient client,
299 const char* netdevId,
300 struct in_addr *addr)
302 return getClient(client).vsm_netdev_get_ipv4_addr(zone, netdevId, addr);
305 API VsmStatus vsm_netdev_get_ipv6_addr(VsmClient client,
307 const char* netdevId,
308 struct in6_addr *addr)
310 return getClient(client).vsm_netdev_get_ipv6_addr(zone, netdevId, addr);
313 API VsmStatus vsm_netdev_add_ipv4_addr(VsmClient client,
315 const char* netdevId,
316 struct in_addr *addr,
319 return getClient(client).vsm_netdev_add_ipv4_addr(zone, netdevId, addr, prefix);
322 API VsmStatus vsm_netdev_add_ipv6_addr(VsmClient client,
324 const char* netdevId,
325 struct in6_addr *addr,
328 return getClient(client).vsm_netdev_add_ipv6_addr(zone, netdevId, addr, prefix);
331 API VsmStatus vsm_netdev_del_ipv4_addr(VsmClient client,
333 const char* netdevId,
334 struct in_addr* addr,
337 return getClient(client).vsm_netdev_del_ipv4_addr(zone, netdevId, addr, prefix);
340 API VsmStatus vsm_netdev_del_ipv6_addr(VsmClient client,
342 const char* netdevId,
343 struct in6_addr* addr,
346 return getClient(client).vsm_netdev_del_ipv6_addr(zone, netdevId, addr, prefix);
349 API VsmStatus vsm_netdev_up(VsmClient client,
351 const char* netdevId)
353 return getClient(client).vsm_netdev_up(zone, netdevId);
356 API VsmStatus vsm_netdev_down(VsmClient client,
358 const char* netdevId)
360 return getClient(client).vsm_netdev_down(zone, netdevId);
363 API VsmStatus vsm_create_netdev_veth(VsmClient client,
368 return getClient(client).vsm_create_netdev_veth(zone, zoneDev, hostDev);
371 API VsmStatus vsm_create_netdev_macvlan(VsmClient client,
375 enum macvlan_mode mode)
377 return getClient(client).vsm_create_netdev_macvlan(zone, zoneDev, hostDev, mode);
380 API VsmStatus vsm_create_netdev_phys(VsmClient client, const char* zone, const char* devId)
382 return getClient(client).vsm_create_netdev_phys(zone, devId);
385 API VsmStatus vsm_lookup_netdev_by_name(VsmClient client,
387 const char* netdevId,
390 Netdev* n = reinterpret_cast<Netdev*>(netdev);
391 return getClient(client).vsm_lookup_netdev_by_name(zone, netdevId, n);
394 API VsmStatus vsm_destroy_netdev(VsmClient client, const char* zone, const char* devId)
396 return getClient(client).vsm_destroy_netdev(zone, devId);
399 API VsmStatus vsm_declare_file(VsmClient client,
406 return getClient(client).vsm_declare_file(zone, type, path, flags, mode, NULL);
410 API VsmStatus vsm_declare_mount(VsmClient client,
418 return getClient(client).vsm_declare_mount(source, zone, target, type, flags, data, NULL);
421 API VsmStatus vsm_declare_link(VsmClient client,
426 return getClient(client).vsm_declare_link(source, zone, target, NULL);
429 API VsmStatus vsm_list_declarations(VsmClient client,
431 VsmArrayString* declarations)
433 return getClient(client).vsm_list_declarations(zone, declarations);
436 API VsmStatus vsm_remove_declaration(VsmClient client,
438 VsmString declaration)
440 return getClient(client).vsm_remove_declaration(zone, declaration);
443 API VsmStatus vsm_clean_up_zones_root(VsmClient client)
445 return getClient(client).vsm_clean_up_zones_root();
448 API unsigned int vsm_addrlist_size(VsmAddrList addrs)
450 InetAddr *a = static_cast<InetAddr*>(addrs);
452 for (i = 0; a[i].type >= 0; ++i) ;
456 API int vsm_addrlist_get_type(VsmAddrList addrs, unsigned int i)
458 return static_cast<InetAddr*>(addrs)[i].type;
461 API const void *vsm_addrlist_get_addr(VsmAddrList addrs, unsigned int i)
463 return &static_cast<InetAddr*>(addrs)[i].addr;
466 API unsigned int vsm_addrlist_get_prefix(VsmAddrList addrs, unsigned int i)
468 return static_cast<InetAddr*>(addrs)[i].prefix;
471 API void vsm_addrlist_free(VsmAddrList addrs) {