Add client stubs for domain devices management 66/30266/1
authorMateusz Malicki <m.malicki2@samsung.com>
Wed, 12 Nov 2014 15:10:30 +0000 (16:10 +0100)
committerMateusz Malicki <m.malicki2@samsung.com>
Thu, 13 Nov 2014 11:35:24 +0000 (12:35 +0100)
[Bug/Feature]   Client stubs for domain devices management
[Cause]         N/A
[Solution]      N/A
[Verification]  Build

Change-Id: Ie34fff4507fa7277a2327983ae3bd6b7c732ae82

client/security-containers-client-impl.cpp
client/security-containers-client-impl.hpp
client/security-containers-client.cpp
client/security-containers-client.h

index fc4699d..a98349a 100644 (file)
@@ -425,6 +425,66 @@ VsmStatus Client::vsm_del_state_callback(VsmSubscriptionId subscriptionId) noexc
     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);
index 0d450a7..592771d 100644 (file)
@@ -166,6 +166,73 @@ public:
     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;
index c1dafeb..6616c80 100644 (file)
@@ -95,6 +95,12 @@ API void vsm_domain_free(VsmDomain domain)
     free(domain);
 }
 
+API void vsm_netdev_free(VsmNetdev netdev)
+{
+    free(netdev->name);
+    free(netdev);
+}
+
 API void vsm_client_free(VsmClient client)
 {
     if (client != NULL) {
@@ -175,6 +181,82 @@ API VsmStatus vsm_del_state_callback(VsmClient client, VsmSubscriptionId subscri
     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)
index f19d3b7..8afc67b 100644 (file)
@@ -78,6 +78,8 @@ finish:
 #ifndef SECURITY_CONTAINERS_CLIENT_H
 #define SECURITY_CONTAINERS_CLIENT_H
 
+#include <stdint.h>
+
 #ifdef __cplusplus
 extern "C"
 {
@@ -139,12 +141,12 @@ typedef enum {
 /**
  * Domain information structure
  */
-struct VsmDomainStructure {
+typedef struct {
     char* id;
     int terminal;
     VsmDomainState state;
     char *rootfs_path;
-};
+} VsmDomainStructure;
 
 /**
  * Domain information
@@ -152,6 +154,28 @@ struct VsmDomainStructure {
 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.
@@ -239,6 +263,13 @@ void vsm_string_free(VsmString string);
 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.
@@ -384,6 +415,142 @@ VsmStatus vsm_add_state_callback(VsmClient client,
  */
 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