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);
49 API VsmStatus vsm_start_glib_loop()
51 return Client::vsm_start_glib_loop();
54 API VsmStatus vsm_stop_glib_loop()
56 return Client::vsm_stop_glib_loop();
59 API VsmClient vsm_client_create()
61 Client* clientPtr = new(nothrow) Client();
62 return reinterpret_cast<VsmClient>(clientPtr);
65 API VsmStatus vsm_connect(VsmClient client)
67 return getClient(client).createSystem();
70 API VsmStatus vsm_connect_custom(VsmClient client, const char* address)
72 return getClient(client).create(address);
75 API void vsm_array_string_free(VsmArrayString astring)
80 for (char** ptr = astring; *ptr; ++ptr) {
81 vsm_string_free(*ptr);
86 API void vsm_string_free(VsmString string)
91 API void vsm_zone_free(VsmZone zone)
93 free(zone->rootfs_path);
98 API void vsm_netdev_free(VsmNetdev netdev)
104 API void vsm_client_free(VsmClient client)
106 if (client != NULL) {
107 delete &getClient(client);
111 API const char* vsm_get_status_message(VsmClient client)
113 return getClient(client).vsm_get_status_message();
116 API VsmStatus vsm_get_status(VsmClient client)
118 return getClient(client).vsm_get_status();
121 API VsmStatus vsm_get_zone_dbuses(VsmClient client, VsmArrayString* keys, VsmArrayString* values)
123 return getClient(client).vsm_get_zone_dbuses(keys, values);
126 API VsmStatus vsm_get_zone_ids(VsmClient client, VsmArrayString* array)
128 return getClient(client).vsm_get_zone_ids(array);
131 API VsmStatus vsm_get_active_zone_id(VsmClient client, VsmString* id)
133 return getClient(client).vsm_get_active_zone_id(id);
136 API VsmStatus vsm_lookup_zone_by_pid(VsmClient client, int pid, VsmString* id)
138 return getClient(client).vsm_lookup_zone_by_pid(pid, id);
141 API VsmStatus vsm_lookup_zone_by_id(VsmClient client, const char* id, VsmZone* zone)
143 return getClient(client).vsm_lookup_zone_by_id(id, zone);
146 API VsmStatus vsm_lookup_zone_by_terminal_id(VsmClient client, int terminal, VsmString* id)
148 return getClient(client).vsm_lookup_zone_by_terminal_id(terminal, id);
151 API VsmStatus vsm_set_active_zone(VsmClient client, const char* id)
153 return getClient(client).vsm_set_active_zone(id);
156 API VsmStatus vsm_create_zone(VsmClient client, const char* id, const char* tname)
158 return getClient(client).vsm_create_zone(id, tname);
161 API VsmStatus vsm_destroy_zone(VsmClient client, const char* id, int /*force*/)
163 return getClient(client).vsm_destroy_zone(id);
166 API VsmStatus vsm_shutdown_zone(VsmClient client, const char* id)
168 return getClient(client).vsm_shutdown_zone(id);
171 API VsmStatus vsm_start_zone(VsmClient client, const char* id)
173 return getClient(client).vsm_start_zone(id);
176 API VsmStatus vsm_lock_zone(VsmClient client, const char* id)
178 return getClient(client).vsm_lock_zone(id);
181 API VsmStatus vsm_unlock_zone(VsmClient client, const char* id)
183 return getClient(client).vsm_unlock_zone(id);
186 API VsmStatus vsm_add_state_callback(VsmClient client,
187 VsmZoneDbusStateCallback zoneDbusStateCallback,
189 VsmSubscriptionId* subscriptionId)
191 return getClient(client).vsm_add_state_callback(zoneDbusStateCallback, data, subscriptionId);
194 API VsmStatus vsm_del_state_callback(VsmClient client, VsmSubscriptionId subscriptionId)
196 return getClient(client).vsm_del_state_callback(subscriptionId);
199 API VsmStatus vsm_grant_device(VsmClient client,
204 return getClient(client).vsm_grant_device(id, device, flags);
207 API VsmStatus vsm_revoke_device(VsmClient client, const char* id, const char* device)
209 return getClient(client).vsm_revoke_device(id, device);
212 API VsmStatus vsm_zone_get_netdevs(VsmClient client,
214 VsmArrayString* netdevIds)
216 return getClient(client).vsm_zone_get_netdevs(zone, netdevIds);
219 API VsmStatus vsm_netdev_get_ipv4_addr(VsmClient client,
221 const char* netdevId,
222 struct in_addr *addr)
224 return getClient(client).vsm_netdev_get_ipv4_addr(zone, netdevId, addr);
227 API VsmStatus vsm_netdev_get_ipv6_addr(VsmClient client,
229 const char* netdevId,
230 struct in6_addr *addr)
232 return getClient(client).vsm_netdev_get_ipv6_addr(zone, netdevId, addr);
235 API VsmStatus vsm_netdev_set_ipv4_addr(VsmClient client,
237 const char* netdevId,
238 struct in_addr *addr,
241 return getClient(client).vsm_netdev_set_ipv4_addr(zone, netdevId, addr, prefix);
244 API VsmStatus vsm_netdev_set_ipv6_addr(VsmClient client,
246 const char* netdevId,
247 struct in6_addr *addr,
250 return getClient(client).vsm_netdev_set_ipv6_addr(zone, netdevId, addr, prefix);
253 API VsmStatus vsm_netdev_up(VsmClient client,
255 const char* netdevId)
257 return getClient(client).vsm_netdev_up(zone, netdevId);
260 API VsmStatus vsm_netdev_down(VsmClient client,
262 const char* netdevId)
264 return getClient(client).vsm_netdev_down(zone, netdevId);
267 API VsmStatus vsm_create_netdev_veth(VsmClient client,
272 return getClient(client).vsm_create_netdev_veth(zone, zoneDev, hostDev);
275 API VsmStatus vsm_create_netdev_macvlan(VsmClient client,
279 enum macvlan_mode mode)
281 return getClient(client).vsm_create_netdev_macvlan(zone, zoneDev, hostDev, mode);
284 API VsmStatus vsm_create_netdev_phys(VsmClient client, const char* zone, const char* devId)
286 return getClient(client).vsm_create_netdev_phys(zone, devId);
289 API VsmStatus vsm_lookup_netdev_by_name(VsmClient client,
291 const char* netdevId,
294 return getClient(client).vsm_lookup_netdev_by_name(zone, netdevId, netdev);
297 API VsmStatus vsm_destroy_netdev(VsmClient client, const char* zone, const char* devId)
299 return getClient(client).vsm_destroy_netdev(zone, devId);
302 API VsmStatus vsm_declare_file(VsmClient client,
309 return getClient(client).vsm_declare_file(zone, type, path, flags, mode, NULL);
313 API VsmStatus vsm_declare_mount(VsmClient client,
321 return getClient(client).vsm_declare_mount(source, zone, target, type, flags, data, NULL);
324 API VsmStatus vsm_declare_link(VsmClient client,
329 return getClient(client).vsm_declare_link(source, zone, target, NULL);
332 API VsmStatus vsm_list_declarations(VsmClient client,
334 VsmArrayString* declarations)
336 return getClient(client).vsm_list_declarations(zone, declarations);
339 API VsmStatus vsm_remove_declaration(VsmClient client,
341 VsmString declaration)
343 return getClient(client).vsm_remove_declaration(zone, declaration);
346 API VsmStatus vsm_notify_active_zone(VsmClient client,
347 const char* application,
350 return getClient(client).vsm_notify_active_zone(application, message);
353 API VsmStatus vsm_file_move_request(VsmClient client, const char* destZone, const char* path)
355 return getClient(client).vsm_file_move_request(destZone, path);
358 API VsmStatus vsm_add_notification_callback(VsmClient client,
359 VsmNotificationCallback notificationCallback,
361 VsmSubscriptionId* subscriptionId)
363 return getClient(client).vsm_add_notification_callback(notificationCallback, data, subscriptionId);
366 API VsmStatus vsm_del_notification_callback(VsmClient client,
367 VsmSubscriptionId subscriptionId)
369 return getClient(client).vsm_del_notification_callback(subscriptionId);