Imported Upstream connman version 1.38
[platform/upstream/connman.git] / src / config.c
index 56ca2b8..993f4f6 100644 (file)
@@ -72,6 +72,7 @@ struct connman_config_service {
        char *ipv6_gateway;
        char *ipv6_privacy;
        char *mac;
+       char *devname;
        bool mdns;
        char **nameservers;
        char **search_domains;
@@ -124,6 +125,7 @@ static bool cleanup = false;
 #define SERVICE_KEY_IPv6               "IPv6"
 #define SERVICE_KEY_IPv6_PRIVACY       "IPv6.Privacy"
 #define SERVICE_KEY_MAC                "MAC"
+#define SERVICE_KEY_DEVICE_NAME               "DeviceName"
 #define SERVICE_KEY_NAMESERVERS        "Nameservers"
 #define SERVICE_KEY_SEARCH_DOMAINS     "SearchDomains"
 #define SERVICE_KEY_TIMESERVERS        "Timeservers"
@@ -164,6 +166,7 @@ static const char *service_possible_keys[] = {
        SERVICE_KEY_IPv6,
        SERVICE_KEY_IPv6_PRIVACY,
        SERVICE_KEY_MAC,
+       SERVICE_KEY_DEVICE_NAME,
        SERVICE_KEY_MDNS,
        SERVICE_KEY_NAMESERVERS,
        SERVICE_KEY_SEARCH_DOMAINS,
@@ -272,6 +275,7 @@ free_only:
        g_free(config_service->ipv6_gateway);
        g_free(config_service->ipv6_privacy);
        g_free(config_service->mac);
+       g_free(config_service->devname);
        g_strfreev(config_service->nameservers);
        g_strfreev(config_service->search_domains);
        g_strfreev(config_service->timeservers);
@@ -498,6 +502,12 @@ static bool load_service_generic(GKeyFile *keyfile,
                service->mac = str;
        }
 
+       str = __connman_config_get_string(keyfile, group, SERVICE_KEY_DEVICE_NAME, NULL);
+       if (str) {
+               g_free(service->devname);
+               service->devname = str;
+       }
+
        str = __connman_config_get_string(keyfile, group, SERVICE_KEY_DOMAIN, NULL);
        if (str) {
                g_free(service->domain_name);
@@ -551,6 +561,7 @@ err:
        g_free(service->ipv6_address);
        g_free(service->ipv6_gateway);
        g_free(service->mac);
+       g_free(service->devname);
        g_free(service);
 
        return false;
@@ -1365,6 +1376,22 @@ static int try_provision_service(struct connman_config_service *config,
 
                if (g_ascii_strcasecmp(device_addr, config->mac) != 0)
                        return -ENOENT;
+       } else if (config->devname) {
+               struct connman_device *device;
+               const char *devname;
+
+               device = connman_network_get_device(network);
+               if (!device) {
+                       connman_error("Network device is missing");
+                       return -ENODEV;
+               }
+
+               devname = connman_device_get_string(device, "Interface");
+
+               DBG("wants %s has %s", config->devname, devname);
+
+               if (g_ascii_strcasecmp(devname, config->devname) != 0)
+                       return -ENOENT;
        }
 
 #if defined TIZEN_EXT
@@ -1591,7 +1618,9 @@ int __connman_config_provision_service(struct connman_service *service)
 
        /* For now only WiFi, Gadget and Ethernet services are supported */
        type = connman_service_get_type(service);
-
+#if defined TIZEN_EXT
+       if (!simplified_log)
+#endif
        DBG("service %p type %d", service, type);
 
        if (type != CONNMAN_SERVICE_TYPE_WIFI &&