summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/device.h3
-rw-r--r--src/device.c40
-rw-r--r--src/network.c12
3 files changed, 46 insertions, 9 deletions
diff --git a/include/device.h b/include/device.h
index 17a2a0ca..8311607b 100644
--- a/include/device.h
+++ b/include/device.h
@@ -89,6 +89,9 @@ extern void connman_device_set_policy(struct connman_device *device,
extern void connman_device_set_mode(struct connman_device *device,
enum connman_device_mode mode);
extern enum connman_device_mode connman_device_get_mode(struct connman_device *device);
+extern void connman_device_set_secondary(struct connman_device *device,
+ connman_bool_t secondary);
+extern connman_bool_t connman_device_get_secondary(struct connman_device *device);
extern int connman_device_set_powered(struct connman_device *device,
connman_bool_t powered);
diff --git a/src/device.c b/src/device.c
index df7e7fbf..f33d601c 100644
--- a/src/device.c
+++ b/src/device.c
@@ -35,6 +35,7 @@ struct connman_device {
enum connman_device_type type;
enum connman_device_mode mode;
enum connman_device_policy policy;
+ connman_bool_t secondary;
connman_bool_t powered;
connman_bool_t carrier;
connman_bool_t scanning;
@@ -793,7 +794,8 @@ static int setup_device(struct connman_device *device)
case CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE:
break;
case CONNMAN_DEVICE_MODE_TRANSPORT_IP:
- __connman_profile_add_device(device);
+ if (device->secondary == FALSE)
+ __connman_profile_add_device(device);
break;
}
@@ -837,7 +839,8 @@ static void remove_device(struct connman_device *device)
case CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE:
break;
case CONNMAN_DEVICE_MODE_TRANSPORT_IP:
- __connman_profile_remove_device(device);
+ if (device->secondary == FALSE)
+ __connman_profile_remove_device(device);
break;
}
@@ -984,10 +987,11 @@ struct connman_device *connman_device_create(const char *node,
device->element.ipv4.method = CONNMAN_IPV4_METHOD_DHCP;
- device->type = type;
- device->name = g_strdup(type2description(device->type));
- device->mode = CONNMAN_DEVICE_MODE_UNKNOWN;
- device->policy = CONNMAN_DEVICE_POLICY_AUTO;
+ device->type = type;
+ device->name = g_strdup(type2description(device->type));
+ device->mode = CONNMAN_DEVICE_MODE_UNKNOWN;
+ device->policy = CONNMAN_DEVICE_POLICY_AUTO;
+ device->secondary = FALSE;
switch (type) {
case CONNMAN_DEVICE_TYPE_UNKNOWN:
@@ -1205,6 +1209,30 @@ enum connman_device_mode connman_device_get_mode(struct connman_device *device)
}
/**
+ * connman_device_set_secondary:
+ * @device: device structure
+ * @secondary: secondary value
+ *
+ * Change secondary value of device
+ */
+void connman_device_set_secondary(struct connman_device *device,
+ connman_bool_t secondary)
+{
+ device->secondary = secondary;
+}
+
+/**
+ * connman_device_get_secondary:
+ * @device: device structure
+ *
+ * Get secondary value of device
+ */
+connman_bool_t connman_device_get_secondary(struct connman_device *device)
+{
+ return device->secondary;
+}
+
+/**
* connman_device_set_powered:
* @device: device structure
* @powered: powered state
diff --git a/src/network.c b/src/network.c
index 6c37eacd..f2b9da24 100644
--- a/src/network.c
+++ b/src/network.c
@@ -33,6 +33,7 @@ struct connman_network {
struct connman_element element;
enum connman_network_type type;
enum connman_network_protocol protocol;
+ connman_bool_t secondary;
connman_bool_t available;
connman_bool_t connected;
connman_bool_t remember;
@@ -486,7 +487,8 @@ struct connman_network *connman_network_create(const char *identifier,
connman_element_set_uint8(&network->element, "Strength", strength);
- network->type = type;
+ network->type = type;
+ network->secondary = FALSE;
network->identifier = g_strdup(identifier);
return network;
@@ -1108,6 +1110,8 @@ static int network_probe(struct connman_element *element)
return err;
}
+ network->secondary = connman_device_get_secondary(network->device);
+
switch (network->type) {
case CONNMAN_NETWORK_TYPE_UNKNOWN:
case CONNMAN_NETWORK_TYPE_VENDOR:
@@ -1117,7 +1121,8 @@ static int network_probe(struct connman_element *element)
break;
case CONNMAN_NETWORK_TYPE_WIFI:
case CONNMAN_NETWORK_TYPE_WIMAX:
- __connman_profile_add_network(network);
+ if (network->secondary == FALSE)
+ __connman_profile_add_network(network);
break;
}
@@ -1145,7 +1150,8 @@ static void network_remove(struct connman_element *element)
break;
case CONNMAN_NETWORK_TYPE_WIFI:
case CONNMAN_NETWORK_TYPE_WIMAX:
- __connman_profile_remove_network(network);
+ if (network->secondary == FALSE)
+ __connman_profile_remove_network(network);
break;
}