Send connman mailing list submissions to
[email protected]
To subscribe or unsubscribe via the World Wide Web, visit
https://lists.01.org/mailman/listinfo/connman
or, via email, send a message with subject or body 'help' to
[email protected]
You can reach the person managing the list at
[email protected]
When replying, please edit your Subject line so it is more specific
than "Re: Contents of connman digest..."
Today's Topics:
1. [RFC v2 4/8] ofono: add network_context to property info
(Mylene JOSSERAND)
2. [RFC v2 5/8] ofono: remove the context struct in modem one
(Mylene JOSSERAND)
3. [RFC v2 6/8] ofono: implementation of simultaneous APNS
(Mylene JOSSERAND)
4. [RFC v2 7/8] ofono: add array parsing when contexts are added
(Mylene JOSSERAND)
5. [RFC v2 8/8] ofono: set "powered" property according to value
(Mylene JOSSERAND)
----------------------------------------------------------------------
Message: 1
Date: Fri, 27 Nov 2015 19:37:08 +0100
From: Mylene JOSSERAND <[email protected]>
To: [email protected]
Subject: [RFC v2 4/8] ofono: add network_context to property info
Message-ID:
<637d8ba391bbf5a6a781a4a2d169f898cae14ff8.1448627165.git.josserand.myl...@gmail.com>
The commit adds the context structure to the property information.
A new function is needed : "get_context_with_network". It returns
a context from the list according to a network.
---
plugins/ofono.c | 53 +++++++++++++++++++++++++++++++++++++++++++----------
1 file changed, 43 insertions(+), 10 deletions(-)
diff --git a/plugins/ofono.c b/plugins/ofono.c
index 5c8b429..2fa16c1 100644
--- a/plugins/ofono.c
+++ b/plugins/ofono.c
@@ -237,6 +237,23 @@ static struct network_context
*get_context_with_path(GSList *context_list,
return NULL;
}
+static struct network_context *get_context_with_network(GSList *context_list,
+ const struct connman_network *network)
+{
+ GSList *list;
+
+ DBG("network %p", network);
+
+ for (list = context_list; list; list = list->next) {
+ struct network_context *context = list->data;
+
+ if (context->network == network)
+ return context;
+ }
+
+ return NULL;
+}
+
static struct network_context *network_context_alloc(const char *path)
{
struct network_context *context;
@@ -362,12 +379,13 @@ static void set_disconnected(struct network_context
*context)
}
typedef void (*set_property_cb)(struct modem_data *data,
- bool success);
+ struct network_context *context, bool success);
typedef void (*get_properties_cb)(struct modem_data *data,
DBusMessageIter *dict);
struct property_info {
struct modem_data *modem;
+ struct network_context *context;
const char *path;
const char *interface;
const char *property;
@@ -400,7 +418,8 @@ static void set_property_reply(DBusPendingCall *call, void
*user_data)
}
if (info->set_property_cb)
- (*info->set_property_cb)(info->modem, success);
+ (*info->set_property_cb)(info->modem, info->context,
+ success);
dbus_message_unref(reply);
@@ -408,6 +427,7 @@ static void set_property_reply(DBusPendingCall *call, void
*user_data)
}
static int set_property(struct modem_data *modem,
+ struct network_context *context,
const char *path, const char *interface,
const char *property, int type, void *value,
set_property_cb notify)
@@ -454,6 +474,7 @@ static int set_property(struct modem_data *modem,
}
info->modem = modem;
+ info->context = context;
info->path = path;
info->interface = interface;
info->property = property;
@@ -594,13 +615,14 @@ static void context_set_active_reply(struct modem_data
*modem,
}
static int context_set_active(struct modem_data *modem,
- dbus_bool_t active)
+ struct network_context *context,
+ dbus_bool_t active)
{
int err;
DBG("%s active %d", modem->path, active);
- err = set_property(modem, modem->context->path,
+ err = set_property(modem, context, context->path,
OFONO_CONTEXT_INTERFACE,
"Active", DBUS_TYPE_BOOLEAN,
&active,
@@ -651,7 +673,8 @@ static int cdma_cm_set_powered(struct modem_data *modem,
dbus_bool_t powered)
DBG("%s powered %d", modem->path, powered);
- err = set_property(modem, modem->path, OFONO_CDMA_CM_INTERFACE,
+ err = set_property(modem, modem->context, modem->path,
+ OFONO_CDMA_CM_INTERFACE,
"Powered", DBUS_TYPE_BOOLEAN,
&powered,
cdma_cm_set_powered_reply);
@@ -666,7 +689,7 @@ static int modem_set_online(struct modem_data *modem,
dbus_bool_t online)
{
DBG("%s online %d", modem->path, online);
- return set_property(modem, modem->path,
+ return set_property(modem, NULL, modem->path,
OFONO_MODEM_INTERFACE,
"Online", DBUS_TYPE_BOOLEAN,
&online,
@@ -679,7 +702,7 @@ static int cm_set_powered(struct modem_data *modem,
dbus_bool_t powered)
DBG("%s powered %d", modem->path, powered);
- err = set_property(modem, modem->path,
+ err = set_property(modem, NULL, modem->path,
OFONO_CM_INTERFACE,
"Powered", DBUS_TYPE_BOOLEAN,
&powered,
@@ -699,7 +722,7 @@ static int modem_set_powered(struct modem_data *modem,
dbus_bool_t powered)
modem->set_powered = powered;
- err = set_property(modem, modem->path,
+ err = set_property(modem, NULL, modem->path,
OFONO_MODEM_INTERFACE,
"Powered", DBUS_TYPE_BOOLEAN,
&powered,
@@ -2640,12 +2663,17 @@ static void network_remove(struct connman_network
*network)
static int network_connect(struct connman_network *network)
{
+ struct network_context *context;
struct modem_data *modem = connman_network_get_data(network);
DBG("%s network %p", modem->path, network);
+ context = get_context_with_network(modem->context_list, network);
+ if (!context)
+ return -ENODEV;
+
if (has_interface(modem->interfaces, OFONO_API_CM))
- return context_set_active(modem, TRUE);
+ return context_set_active(modem, context, TRUE);
else if (has_interface(modem->interfaces, OFONO_API_CDMA_CM))
return cdma_cm_set_powered(modem, TRUE);
@@ -2656,12 +2684,17 @@ static int network_connect(struct connman_network
*network)
static int network_disconnect(struct connman_network *network)
{
+ struct network_context *context;
struct modem_data *modem = connman_network_get_data(network);
DBG("%s network %p", modem->path, network);
+ context = get_context_with_network(modem->context_list, network);
+ if (!context)
+ return -ENODEV;
+
if (has_interface(modem->interfaces, OFONO_API_CM))
- return context_set_active(modem, FALSE);
+ return context_set_active(modem, context, FALSE);
else if (has_interface(modem->interfaces, OFONO_API_CDMA_CM))
return cdma_cm_set_powered(modem, FALSE);
--
2.1.4
------------------------------
Message: 2
Date: Fri, 27 Nov 2015 19:37:09 +0100
From: Mylene JOSSERAND <[email protected]>
To: [email protected]
Subject: [RFC v2 5/8] ofono: remove the context struct in modem one
Message-ID:
<4aa45b87537bf9bde7a565244f67efe323bc3e71.1448627165.git.josserand.myl...@gmail.com>
The current commit removes the context structure of the modem one
to use only the list of contexts.
---
plugins/ofono.c | 41 +++++++++++++++++++++++------------------
1 file changed, 23 insertions(+), 18 deletions(-)
diff --git a/plugins/ofono.c b/plugins/ofono.c
index 2fa16c1..e4a6c55 100644
--- a/plugins/ofono.c
+++ b/plugins/ofono.c
@@ -152,7 +152,6 @@ struct modem_data {
struct connman_device *device;
- struct network_context *context;
GSList *context_list;
/* Modem Interface */
@@ -670,10 +669,16 @@ static void cdma_cm_set_powered_reply(struct modem_data
*modem,
static int cdma_cm_set_powered(struct modem_data *modem, dbus_bool_t powered)
{
int err;
+ struct network_context *context = NULL;
+
+ if (!modem->context_list)
+ return;
DBG("%s powered %d", modem->path, powered);
- err = set_property(modem, modem->context, modem->path,
+ /* In case of CDMA, there is only one context */
+ context = g_slist_nth_data(modem->context_list, 0);
+ err = set_property(modem, context, modem->path,
OFONO_CDMA_CM_INTERFACE,
"Powered", DBUS_TYPE_BOOLEAN,
&powered,
@@ -1241,7 +1246,6 @@ static int add_cm_context(struct modem_data *modem, const
char *context_path,
if (ip_protocol)
set_context_ipconfig(context, ip_protocol);
- modem->context = context;
context->active = active;
modem->context_list = g_slist_prepend(modem->context_list, context);
@@ -1257,8 +1261,6 @@ static int add_cm_context(struct modem_data *modem, const
char *context_path,
static void remove_cm_context(struct modem_data *modem,
struct network_context *context)
{
- if (!modem->context)
- return;
if (!modem->context_list)
return;
if (!context)
@@ -1270,8 +1272,8 @@ static void remove_cm_context(struct modem_data *modem,
remove_network(modem, context);
modem->context_list = g_slist_remove(modem->context_list, context);
- network_context_free(modem->context);
- modem->context = NULL;
+ network_context_free(context);
+ context = NULL;
}
static void remove_all_contexts(struct modem_data *modem)
@@ -1339,11 +1341,11 @@ static gboolean context_changed(DBusConnection *conn,
if (g_str_equal(key, "Settings")) {
DBG("%s Settings", modem->path);
- extract_ipv4_settings(&value, modem->context);
+ extract_ipv4_settings(&value, context);
} else if (g_str_equal(key, "IPv6.Settings")) {
DBG("%s IPv6.Settings", modem->path);
- extract_ipv6_settings(&value, modem->context);
+ extract_ipv6_settings(&value, context);
} else if (g_str_equal(key, "Active")) {
dbus_bool_t active;
@@ -1395,7 +1397,7 @@ static gboolean context_changed(DBusConnection *conn,
dbus_message_iter_get_basic(&value, &ip_protocol);
- set_context_ipconfig(modem->context, ip_protocol);
+ set_context_ipconfig(context, ip_protocol);
}
return TRUE;
@@ -1852,7 +1854,7 @@ static gboolean cdma_netreg_changed(DBusConnection *conn,
if (modem->registered)
add_cdma_network(modem);
else
- remove_network(modem, modem->context);
+ remove_all_networks(modem);
return TRUE;
}
@@ -1887,7 +1889,7 @@ static void cdma_netreg_properties_reply(struct
modem_data *modem,
if (modem->registered)
add_cdma_network(modem);
else
- remove_network(modem, modem->context);
+ remove_all_networks(modem);
}
static int cdma_netreg_get_properties(struct modem_data *modem)
@@ -1907,7 +1909,7 @@ static void cm_update_attached(struct modem_data *modem,
DBG("%s Attached %d", modem->path, modem->attached);
if (!modem->attached) {
- remove_network(modem, modem->context);
+ remove_all_networks(modem);
return;
}
@@ -1968,6 +1970,7 @@ static gboolean cm_changed(DBusConnection *conn,
DBusMessage *message,
static void cdma_cm_update_powered(struct modem_data *modem,
DBusMessageIter *value)
{
+ struct network_context *context = NULL;
dbus_bool_t cdma_cm_powered;
dbus_message_iter_get_basic(value, &cdma_cm_powered);
@@ -1975,13 +1978,15 @@ static void cdma_cm_update_powered(struct modem_data
*modem,
DBG("%s CDMA cm Powered %d", modem->path, modem->cdma_cm_powered);
- if (!modem->context)
+ if (!modem->context_list)
return;
+ /* In case of CDMA, there is only one context */
+ context = g_slist_nth_data(modem->context_list, 0);
if (modem->cdma_cm_powered)
- set_connected(modem, modem->context);
+ set_connected(modem, context);
else
- set_disconnected(modem->context);
+ set_disconnected(context);
}
static void cdma_cm_update_settings(struct modem_data *modem,
@@ -1989,7 +1994,7 @@ static void cdma_cm_update_settings(struct modem_data
*modem,
{
DBG("%s Settings", modem->path);
- extract_ipv4_settings(value, modem->context);
+ extract_ipv4_settings(value, g_slist_nth_data(modem->context_list, 0));
}
static gboolean cdma_cm_changed(DBusConnection *conn,
@@ -2004,7 +2009,7 @@ static gboolean cdma_cm_changed(DBusConnection *conn,
if (!modem)
return TRUE;
- if (modem->online && !modem->context)
+ if (modem->online && !modem->context_list)
cdma_netreg_get_properties(modem);
if (!dbus_message_iter_init(message, &iter))
--
2.1.4
------------------------------
Message: 3
Date: Fri, 27 Nov 2015 19:37:10 +0100
From: Mylene JOSSERAND <[email protected]>
To: [email protected]
Subject: [RFC v2 6/8] ofono: implementation of simultaneous APNS
Message-ID:
<7382805b5f723e9cc44ce9afee59ae06108fbbed.1448627165.git.josserand.myl...@gmail.com>
This patch implements the use of simultaneous APNS (and so internet contexts).
It removes the restriction about one Internet context per modem and
inverts the logic of the GetContexts function reply (which exited on first
context).
---
plugins/ofono.c | 10 +---------
1 file changed, 1 insertion(+), 9 deletions(-)
diff --git a/plugins/ofono.c b/plugins/ofono.c
index e4a6c55..f157436 100644
--- a/plugins/ofono.c
+++ b/plugins/ofono.c
@@ -1178,14 +1178,6 @@ static int add_cm_context(struct modem_data *modem,
const char *context_path,
DBG("%s context path %s", modem->path, context_path);
- if (modem->context) {
- /*
- * We have already assigned a context to this modem
- * and we do only support one Internet context.
- */
- return -EALREADY;
- }
-
context = network_context_alloc(context_path);
if (!context)
return -ENOMEM;
@@ -1441,7 +1433,7 @@ static void cm_get_contexts_reply(DBusPendingCall *call,
void *user_data)
dbus_message_iter_next(&entry);
dbus_message_iter_recurse(&entry, &value);
- if (add_cm_context(modem, context_path, &value) == 0)
+ if (add_cm_context(modem, context_path, &value) != 0)
break;
dbus_message_iter_next(&dict);
--
2.1.4
------------------------------
Message: 4
Date: Fri, 27 Nov 2015 19:37:11 +0100
From: Mylene JOSSERAND <[email protected]>
To: [email protected]
Subject: [RFC v2 7/8] ofono: add array parsing when contexts are added
Message-ID:
<4a51dc348d9f7ae3f2a792b5d62f228255562d24.1448627165.git.josserand.myl...@gmail.com>
In the case there are more than one context saved by ofono, the signal
sent is an array and not a dictionary.
This commit implements this case by recursing it of one step.
---
plugins/ofono.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/plugins/ofono.c b/plugins/ofono.c
index f157436..fcc1aa0 100644
--- a/plugins/ofono.c
+++ b/plugins/ofono.c
@@ -1488,7 +1488,7 @@ static gboolean cm_context_added(DBusConnection *conn,
const char *path = dbus_message_get_path(message);
char *context_path;
struct modem_data *modem;
- DBusMessageIter iter, properties;
+ DBusMessageIter iter, properties, dict;
DBG("%s", path);
@@ -1504,6 +1504,13 @@ static gboolean cm_context_added(DBusConnection *conn,
dbus_message_iter_next(&iter);
dbus_message_iter_recurse(&iter, &properties);
+ /* Sometimes, we get an array instead of dict */
+ if (dbus_message_iter_get_arg_type(&properties) == DBUS_TYPE_ARRAY) {
+ /* Must recurse again */
+ dbus_message_iter_recurse(&properties, &dict);
+ if (add_cm_context(modem, context_path, &dict) != 0)
+ return TRUE;
+ }
if (add_cm_context(modem, context_path, &properties) != 0)
return TRUE;
--
2.1.4
------------------------------
Message: 5
Date: Fri, 27 Nov 2015 19:37:12 +0100
From: Mylene JOSSERAND <[email protected]>
To: [email protected]
Subject: [RFC v2 8/8] ofono: set "powered" property according to value
Message-ID:
<74b6295d9f94dacacb8a3a77da9e341e89f6044b.1448627165.git.josserand.myl...@gmail.com>
The "powered" modem property is set according to new value.
Otherwise, connman force the modem to always be powered.
---
plugins/ofono.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/plugins/ofono.c b/plugins/ofono.c
index fcc1aa0..35e6e66 100644
--- a/plugins/ofono.c
+++ b/plugins/ofono.c
@@ -2316,8 +2316,8 @@ static gboolean modem_changed(DBusConnection *conn,
DBusMessage *message,
DBG("%s Powered %d", modem->path, modem->powered);
- if (!modem->powered)
- modem_set_powered(modem, TRUE);
+ /* Set the powered according to the value */
+ modem_set_powered(modem, powered);
} else if (g_str_equal(key, "Online")) {
dbus_bool_t online;
--
2.1.4
------------------------------
Subject: Digest Footer
_______________________________________________
connman mailing list
[email protected]
https://lists.01.org/mailman/listinfo/connman
------------------------------
End of connman Digest, Vol 1, Issue 10
**************************************