return signalUnsubscribe(subscriptionId);
}
+VsmStatus Client::vsm_domain_grant_device(const char*, const char*, uint32_t) noexcept
+{
+ mStatus = Status(VSMCLIENT_OTHER_ERROR, "Not implemented");
+ return vsm_get_status();
+}
+
+VsmStatus Client::vsm_revoke_device(const char*, const char*) noexcept
+{
+ mStatus = Status(VSMCLIENT_OTHER_ERROR, "Not implemented");
+ return vsm_get_status();
+}
+
+VsmStatus Client::vsm_domain_get_netdevs(const char*, VsmArrayString*) noexcept
+{
+ mStatus = Status(VSMCLIENT_OTHER_ERROR, "Not implemented");
+ return vsm_get_status();
+}
+
+VsmStatus Client::vsm_netdev_get_ipv4_addr(const char*, const char*, struct in_addr*) noexcept
+{
+ mStatus = Status(VSMCLIENT_OTHER_ERROR, "Not implemented");
+ return vsm_get_status();
+}
+
+VsmStatus Client::vsm_netdev_get_ipv6_addr(const char*, const char*, struct in6_addr*) noexcept
+{
+ mStatus = Status(VSMCLIENT_OTHER_ERROR, "Not implemented");
+ return vsm_get_status();
+}
+
+VsmStatus Client::vsm_netdev_set_ipv4_addr(const char*, const char*, struct in_addr*, int) noexcept
+{
+ mStatus = Status(VSMCLIENT_OTHER_ERROR, "Not implemented");
+ return vsm_get_status();
+}
+
+VsmStatus Client::vsm_netdev_set_ipv6_addr(const char*, const char*, struct in6_addr*, int) noexcept
+{
+ mStatus = Status(VSMCLIENT_OTHER_ERROR, "Not implemented");
+ return vsm_get_status();
+}
+
+VsmStatus Client::vsm_create_netdev(const char*, VsmNetdevType, const char*, const char*) noexcept
+{
+ mStatus = Status(VSMCLIENT_OTHER_ERROR, "Not implemented");
+ return vsm_get_status();
+}
+
+VsmStatus Client::vsm_destroy_netdev(const char*, const char*) noexcept
+{
+ mStatus = Status(VSMCLIENT_OTHER_ERROR, "Not implemented");
+ return vsm_get_status();
+}
+
+VsmStatus Client::vsm_lookup_netdev_by_name(const char*, const char*, VsmNetdev*) noexcept
+{
+ mStatus = Status(VSMCLIENT_OTHER_ERROR, "Not implemented");
+ return vsm_get_status();
+}
+
VsmStatus Client::vsm_notify_active_container(const char* application, const char* message) noexcept
{
assert(application);
VsmStatus vsm_del_state_callback(VsmSubscriptionId subscriptionId) noexcept;
/**
+ * @see ::vsm_del_state_callback
+ */
+ VsmStatus vsm_domain_grant_device(const char* id,
+ const char* device,
+ uint32_t flags) noexcept;
+
+ /**
+ * @see ::vsm_revoke_device
+ */
+ VsmStatus vsm_revoke_device(const char* id, const char* device) noexcept;
+
+ /**
+ * @see ::vsm_domain_get_netdevs
+ */
+ VsmStatus vsm_domain_get_netdevs(const char* domain, VsmArrayString* netdevIds) noexcept;
+
+ /**
+ * @see ::vsm_netdev_get_ipv4_addr
+ */
+ VsmStatus vsm_netdev_get_ipv4_addr(const char* domain,
+ const char* netdevId,
+ struct in_addr *addr) noexcept;
+
+ /**
+ * @see ::vsm_netdev_get_ipv6_addr
+ */
+ VsmStatus vsm_netdev_get_ipv6_addr(const char* domain,
+ const char* netdevId,
+ struct in6_addr *addr) noexcept;
+
+ /**
+ * @see ::vsm_netdev_set_ipv4_addr
+ */
+ VsmStatus vsm_netdev_set_ipv4_addr(const char* domain,
+ const char* netdevId,
+ struct in_addr *addr,
+ int prefix) noexcept;
+
+ /**
+ * @see ::vsm_netdev_set_ipv6_addr
+ */
+ VsmStatus vsm_netdev_set_ipv6_addr(const char* domain,
+ const char* netdevId,
+ struct in6_addr *addr,
+ int prefix) noexcept;
+
+ /**
+ * @see ::vsm_create_netdev
+ */
+ VsmStatus vsm_create_netdev(const char* domain,
+ VsmNetdevType netdevType,
+ const char* target,
+ const char* netdevId) noexcept;
+
+ /**
+ * @see ::vsm_destroy_netdev
+ */
+ VsmStatus vsm_destroy_netdev(const char* domain, const char* netdevId) noexcept;
+
+ /**
+ * @see ::vsm_lookup_netdev_by_name
+ */
+ VsmStatus vsm_lookup_netdev_by_name(const char* domain,
+ const char* netdevId,
+ VsmNetdev* netdev) noexcept;
+
+ /**
* @see ::vsm_notify_active_container
*/
VsmStatus vsm_notify_active_container(const char* application, const char* message) noexcept;
free(domain);
}
+API void vsm_netdev_free(VsmNetdev netdev)
+{
+ free(netdev->name);
+ free(netdev);
+}
+
API void vsm_client_free(VsmClient client)
{
if (client != NULL) {
return getClient(client).vsm_del_state_callback(subscriptionId);
}
+API VsmStatus vsm_domain_grant_device(VsmClient client,
+ const char* id,
+ const char* device,
+ uint32_t flags)
+{
+ return getClient(client).vsm_domain_grant_device(id, device, flags);
+}
+
+API VsmStatus vsm_revoke_device(VsmClient client, const char* id, const char* device)
+{
+ return getClient(client).vsm_revoke_device(id, device);
+}
+
+API VsmStatus vsm_domain_get_netdevs(VsmClient client,
+ const char* domain,
+ VsmArrayString* netdevIds)
+{
+ return getClient(client).vsm_domain_get_netdevs(domain, netdevIds);
+}
+
+API VsmStatus vsm_netdev_get_ipv4_addr(VsmClient client,
+ const char* domain,
+ const char* netdevId,
+ struct in_addr *addr)
+{
+ return getClient(client).vsm_netdev_get_ipv4_addr(domain, netdevId, addr);
+}
+
+API VsmStatus vsm_netdev_get_ipv6_addr(VsmClient client,
+ const char* domain,
+ const char* netdevId,
+ struct in6_addr *addr)
+{
+ return getClient(client).vsm_netdev_get_ipv6_addr(domain, netdevId, addr);
+}
+
+API VsmStatus vsm_netdev_set_ipv4_addr(VsmClient client,
+ const char* domain,
+ const char* netdevId,
+ struct in_addr *addr,
+ int prefix)
+{
+ return getClient(client).vsm_netdev_set_ipv4_addr(domain, netdevId, addr, prefix);
+}
+
+API VsmStatus vsm_netdev_set_ipv6_addr(VsmClient client,
+ const char* domain,
+ const char* netdevId,
+ struct in6_addr *addr,
+ int prefix)
+{
+ return getClient(client).vsm_netdev_set_ipv6_addr(domain, netdevId, addr, prefix);
+}
+
+API VsmStatus vsm_create_netdev(VsmClient client,
+ const char* domain,
+ VsmNetdevType netdevType,
+ const char* target,
+ const char* netdevId)
+{
+ return getClient(client).vsm_create_netdev(domain, netdevType, target, netdevId);
+}
+
+API VsmStatus vsm_destroy_netdev(VsmClient client, const char* domain, const char* netdevId)
+{
+ return getClient(client).vsm_destroy_netdev(domain, netdevId);
+}
+
+API VsmStatus vsm_lookup_netdev_by_name(VsmClient client,
+ const char* domain,
+ const char* netdevId,
+ VsmNetdev* netdev)
+{
+ return getClient(client).vsm_lookup_netdev_by_name(domain, netdevId, netdev);
+}
+
API VsmStatus vsm_notify_active_container(VsmClient client,
const char* application,
const char* message)
#ifndef SECURITY_CONTAINERS_CLIENT_H
#define SECURITY_CONTAINERS_CLIENT_H
+#include <stdint.h>
+
#ifdef __cplusplus
extern "C"
{
/**
* Domain information structure
*/
-struct VsmDomainStructure {
+typedef struct {
char* id;
int terminal;
VsmDomainState state;
char *rootfs_path;
-};
+} VsmDomainStructure;
/**
* Domain information
typedef VsmDomainStructure* VsmDomain;
/**
+ * Netowrk device type
+ */
+typedef enum {
+ VETH,
+ PHYS,
+ MACVLAN
+} VsmNetdevType;
+
+/**
+ * Network device information structure
+ */
+typedef struct {
+ char* name;
+ VsmNetdevType type;
+} VsmNetdevStructure;
+
+/**
+ * Network device information
+ */
+typedef VsmNetdevStructure* VsmNetdev;
+
+/**
* Start glib loop.
*
* Do not call this function if an application creates a glib loop itself.
void vsm_domain_free(VsmDomain domain);
/**
+ * Release VsmNetdev
+ *
+ * @param netdev VsmNetdev
+ */
+void vsm_netdev_free(VsmNetdev netdev);
+
+/**
* @name Host API
*
* Functions using org.tizen.containers.host.manager D-Bus interface.
*/
VsmStatus vsm_del_state_callback(VsmClient client, VsmSubscriptionId subscriptionId);
+/**
+ * Grant access to device
+ *
+ * @param[in] client security-containers-server's client
+ * @param[in] domain domain name
+ * @param[in] device device path
+ * @param[in] flags access flags
+ * @return status of this function call
+ */
+VsmStatus vsm_domain_grant_device(VsmClient client,
+ const char* domain,
+ const char* device,
+ uint32_t flags);
+
+/**
+ * Revoke access to device
+ *
+ * @param[in] client security-containers-server's client
+ * @param[in] domain domain name
+ * @param[in] device device path
+ * @return status of this function call
+ */
+VsmStatus vsm_revoke_device(VsmClient client, const char* domain, const char* device);
+
+/**
+ * Get array of netdev from given domain
+ *
+ * @param[in] client security-containers-server's client
+ * @param[in] domain domain name
+ * @param[out] netdevIds array of netdev id
+ * @return status of this function call
+ * @remark Use vsm_array_string_free() to free memory occupied by @p netdevIds.
+ */
+VsmStatus vsm_domain_get_netdevs(VsmClient client, const char* domain, VsmArrayString* netdevIds);
+
+/**
+ * Get ipv4 address for given netdevId
+ *
+ * @param[in] client security-containers-server's client
+ * @param[in] domain domain name
+ * @param[in] netdevId netdev id
+ * @param[out] addr ipv4 address
+ * @return status of this function call
+ */
+VsmStatus vsm_netdev_get_ipv4_addr(VsmClient client,
+ const char* domain,
+ const char* netdevId,
+ struct in_addr *addr);
+
+/**
+ * Get ipv6 address for given netdevId
+ *
+ * @param[in] client security-containers-server's client
+ * @param[in] domain domain name
+ * @param[in] netdevId netdev id
+ * @param[out] addr ipv6 address
+ * @return status of this function call
+ */
+VsmStatus vsm_netdev_get_ipv6_addr(VsmClient client,
+ const char* domain,
+ const char* netdevId,
+ struct in6_addr *addr);
+
+/**
+ * Set ipv4 address for given netdevId
+ *
+ * @param[in] client security-containers-server's client
+ * @param[in] domain domain name
+ * @param[in] netdevId netdev id
+ * @param[in] addr ipv4 address
+ * @param[in] prefix bit-length of the network prefix
+ * @return status of this function call
+ */
+VsmStatus vsm_netdev_set_ipv4_addr(VsmClient client,
+ const char* domain,
+ const char* netdevId,
+ struct in_addr *addr,
+ int prefix);
+
+/**
+ * Set ipv6 address for given netdevId
+ *
+ * @param[in] client security-containers-server's client
+ * @param[in] domain domain name
+ * @param[in] netdevId netdev id
+ * @param[in] addr ipv6 address
+ * @param[in] prefix bit-length of the network prefix
+ * @return status of this function call
+ */
+VsmStatus vsm_netdev_set_ipv6_addr(VsmClient client,
+ const char* domain,
+ const char* netdevId,
+ struct in6_addr *addr,
+ int prefix);
+
+/**
+ * Create netdev in domain
+ *
+ * @param[in] client security-containers-server's client
+ * @param[in] domain domain name
+ * @param[in] netdevType netdev type
+ * @param[in] target TODO: this is taken form domain-control
+ * @param[in] netdevId network device id
+ * @return status of this function call
+ */
+VsmStatus vsm_create_netdev(VsmClient client,
+ const char* domain,
+ VsmNetdevType netdevType,
+ const char* target,
+ const char* netdevId);
+
+/**
+ * Remove netdev from domain
+ *
+ * @param[in] client security-containers-server's client
+ * @param[in] domain domain name
+ * @param[in] netdevId network device id
+ * @return status of this function call
+ */
+VsmStatus vsm_destroy_netdev(VsmClient client, const char* domain, const char* netdevId);
+
+/**
+ * Get netdev informations
+ *
+ * @param[in] client security-containers-server's client
+ * @param[in] domain domain name
+ * @param[in] netdevId network device id
+ * @param[out] netdev netdev informations
+ * @return status of this function call
+ * @remark Use vsm_netdev_free() to free memory occupied by @p netdev.
+ */
+VsmStatus vsm_lookup_netdev_by_name(VsmClient client,
+ const char* domain,
+ const char* netdevId,
+ VsmNetdev* netdev);
+
/** @} */ // Host API