* provisioning APN using mbpi plugin
[not found] <d9dfde3c-2b28-197f-f257-a7451d9871ed@kerlink.fr>
@ 2017-02-08 12:24 ` Christophe Ronco
2017-02-08 16:54 ` Denis Kenzior
0 siblings, 1 reply; 8+ messages in thread
From: Christophe Ronco @ 2017-02-08 12:24 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1262 bytes --]
Hello,
I used to set APN manually (using DBUS interface) on my modems.
I am now trying to provision APNs using default values (depending on
operator).
I have installed mobile-broadband-provider-info package and tried to use
ofono mbpi plugin.
This fail on my current operator:
Feb 8 10:42:16 klk-lpbs-040070 daemon.err ofonod[3750]:
/usr/share/mobile-broadband-provider-info/serviceproviders.xml:4614
Duplicate context detected
Feb 8 10:42:16 klk-lpbs-040070 daemon.warn ofonod[3750]: Provisioning
failed
Indeed, my operator (Orange, in France) has several APN of type
"internet" declared in mobile-broadband-provider-info database. This is
why it fails. And looking at the database, this is quite common.
Allowing duplicates or not is just a parameter in function
mbpi_lookup_apn. So I changed that in provision_get_settings function
(plugins/provision.c).
With this change, provisionning using plugins provision.c and mbpi.c
works. It creates 9 contexts for my SIM, 4 of them are internet type
contexts.
In connman (I use connman above ofono), I see 4 services and I am able
to connect at least 2 of them. So I wonder why duplicate context is
considered an error by these plugins. Does anybody know ?
Christophe
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: provisioning APN using mbpi plugin
2017-02-08 12:24 ` provisioning APN using mbpi plugin Christophe Ronco
@ 2017-02-08 16:54 ` Denis Kenzior
2017-02-16 16:46 ` Christophe Ronco
0 siblings, 1 reply; 8+ messages in thread
From: Denis Kenzior @ 2017-02-08 16:54 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1175 bytes --]
Hi Christophe,
> With this change, provisionning using plugins provision.c and mbpi.c
> works. It creates 9 contexts for my SIM, 4 of them are internet type
> contexts.
> In connman (I use connman above ofono), I see 4 services and I am able
> to connect at least 2 of them. So I wonder why duplicate context is
> considered an error by these plugins. Does anybody know ?
This is done on purpose. oFono & ConnMan are designed with the
assumption that the user will see what is being exposed by the D-Bus
API. The UI is just a thin client which simply renders the state of
ConnMan / oFono. Think of the D-Bus API as being user-visible. Thus it
makes no sense for us to expose services that the user cannot use.
There are a couple of ways to get around this:
- Use a more up-to-date database
- Have a provisioning UI that detects that provisioning has failed, and
guides the user through picking the right combination of operator / plan
/ etc and configures the context settings accordingly
There really should only be a single internet context configured for a
given SIM for the vast majority of users in the world.
Regards,
-Denis
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: provisioning APN using mbpi plugin
2017-02-08 16:54 ` Denis Kenzior
@ 2017-02-16 16:46 ` Christophe Ronco
2017-02-16 18:02 ` Denis Kenzior
0 siblings, 1 reply; 8+ messages in thread
From: Christophe Ronco @ 2017-02-16 16:46 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 2319 bytes --]
Hello Denis,
On 02/08/2017 05:54 PM, Denis Kenzior wrote:
> Hi Christophe,
>
>> With this change, provisionning using plugins provision.c and mbpi.c
>> works. It creates 9 contexts for my SIM, 4 of them are internet type
>> contexts.
>> In connman (I use connman above ofono), I see 4 services and I am able
>> to connect at least 2 of them. So I wonder why duplicate context is
>> considered an error by these plugins. Does anybody know ?
>
> This is done on purpose. oFono & ConnMan are designed with the
> assumption that the user will see what is being exposed by the D-Bus
> API. The UI is just a thin client which simply renders the state of
> ConnMan / oFono. Think of the D-Bus API as being user-visible. Thus
> it makes no sense for us to expose services that the user cannot use.
>
> There are a couple of ways to get around this:
>
> - Use a more up-to-date database
> - Have a provisioning UI that detects that provisioning has failed,
> and guides the user through picking the right combination of operator
> / plan / etc and configures the context settings accordingly
>
> There really should only be a single internet context configured for a
> given SIM for the vast majority of users in the world.
>
I am using private APNs. They should never be in mbpi database. And if
they were, for sure, there would be more than one APN for this operator
in database. So mbpi database is not something I can use on my board.
My board does not have a UI, not even a user. It should leave factory
configured to work with SIM(s) from this or that operator (with a
private APN).
I can handle that with a configuration file, a daemon waiting for ofono
DBUS interface to show up and reading file when it sees a context with
an empty APN. But that's far more complicated than a plugin with a
configuration file inside ofono.
So I have developed another provisioning plugin based on a configuration
file. Patches are attached to this mail and plugin details are explained
in commit message. Let me know if you think this can be useful for
ofono. I'll rework patches in this case (plugin name maybe,
documentation needed maybe, can I use storage.c functions in a
plugin?....) and send them cleanly using git send-email.
Best Regards,
Christophe
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0005-provision-add-plugin-to-provision-from-config-file.patch --]
[-- Type: text/x-patch, Size: 5980 bytes --]
>From 167ab49e14566bcd63b4ceb737b0f5f12a6f3516 Mon Sep 17 00:00:00 2001
From: Christophe Ronco <c.ronco@kerlink.fr>
Date: Thu, 16 Feb 2017 16:41:30 +0100
Subject: [PATCH 1/2] provision: add plugin to provision from config file
This plugin allows to provision gprs-context data based on MCC and MNC.
This is useful when provisioning using mbpi fails (either because you
are using a private APN or because there are multiple internet type context
for your operator in mbpi database).
Config file is STORAGEDIR/provisioning.
Config file should look like that:
[MCC1,MNC1]
internet.AccessPointName=apn1
internet.Username=myUsername
internet.Password=myPassword
internet.AuthenticationMethod=pap
internet.Protocol=ipv6
[MCC2,MNC2]
internet.AccessPointName=apn2
The only mandatory parameter for each operator is internet.AccessPointName.
Parameter description:
internet.AccessPointName: APN
internet.Username: Username
internet.Password: Password
internet.AuthenticationMethod: authentication method.
Possible values are:
- pap
- chap
Default is chap if unset.
internet.Protocol: protocol
Possible values are:
- ip: ipv4
- ipv6
- dual
Default is ip if not set.
All parameters are prefixed with internet to be able to extend this plugin
to other type of contexts (MMS, ...).
---
plugins/file-provision.c | 170 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 170 insertions(+)
create mode 100644 plugins/file-provision.c
diff --git a/plugins/file-provision.c b/plugins/file-provision.c
new file mode 100644
index 00000000..0fc5acb9
--- /dev/null
+++ b/plugins/file-provision.c
@@ -0,0 +1,170 @@
+/*
+ *
+ * oFono - Open Source Telephony
+ *
+ * Copyright (C) 2017 Kerlink SA.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <glib.h>
+
+#define OFONO_API_SUBJECT_TO_CHANGE
+#include <storage.h>
+#include <ofono/modem.h>
+#include <ofono/gprs-provision.h>
+#include <ofono/log.h>
+#include <ofono/plugin.h>
+
+#define SETTINGS_STORE "provisioning"
+
+static int config_file_provision_get_settings(const char *mcc,
+ const char *mnc, const char *spn,
+ struct ofono_gprs_provision_data **settings,
+ int *count)
+{
+ int result = 0;
+ GKeyFile *key_file = NULL;
+ char *setting_group = NULL;
+ char *value;
+
+ DBG("Finding settings for MCC %s, MNC %s, SPN '%s'", mcc, mnc, spn);
+
+ *count = 0;
+ *settings = NULL;
+
+ key_file = storage_open(NULL, SETTINGS_STORE);
+
+ if (key_file == NULL) {
+ result = -ENOENT;
+ goto error;
+ }
+
+ setting_group = g_try_malloc(strlen(mcc) + strlen(mnc) + 2);
+ if (setting_group == NULL) {
+ result = -ENOMEM;
+ goto error;
+ }
+
+ sprintf(setting_group, "%s,%s", mcc, mnc);
+
+ value = g_key_file_get_string(key_file, setting_group,
+ "internet.AccessPointName", NULL);
+
+ if (value == NULL)
+ goto error;
+
+ *settings = g_try_new0(struct ofono_gprs_provision_data, 1);
+ if (*settings == NULL) {
+ result = -ENOMEM;
+ goto error;
+ }
+
+ *count = 1;
+
+ (*settings)[0].type = OFONO_GPRS_CONTEXT_TYPE_INTERNET;
+ (*settings)[0].apn = value;
+
+ value = g_key_file_get_string(key_file, setting_group,
+ "internet.Username", NULL);
+
+ if (value != NULL)
+ (*settings)[0].username = value;
+
+ value = g_key_file_get_string(key_file, setting_group,
+ "internet.Password", NULL);
+
+ if (value != NULL)
+ (*settings)[0].password = value;
+
+ (*settings)[0].auth_method = OFONO_GPRS_AUTH_METHOD_CHAP;
+ value = g_key_file_get_string(key_file, setting_group,
+ "internet.AuthenticationMethod", NULL);
+
+ if (value != NULL) {
+ if (g_strcmp0(value, "chap") == 0)
+ (*settings)[0].auth_method =
+ OFONO_GPRS_AUTH_METHOD_CHAP;
+ else if (g_strcmp0(value, "pap") == 0)
+ (*settings)[0].auth_method =
+ OFONO_GPRS_AUTH_METHOD_PAP;
+ else
+ DBG("Unknown auth method: %s", value);
+
+ g_free(value);
+ }
+
+ (*settings)[0].proto = OFONO_GPRS_PROTO_IP;
+ value = g_key_file_get_string(key_file, setting_group,
+ "internet.Protocol", NULL);
+
+ if (value != NULL) {
+ DBG("CRO value:%s", value);
+ if (g_strcmp0(value, "ip") == 0) {
+ DBG("CRO value=ip");
+ (*settings)[0].proto = OFONO_GPRS_PROTO_IP;
+ } else if (g_strcmp0(value, "ipv6") == 0) {
+ DBG("CRO value=ipv6");
+ (*settings)[0].proto = OFONO_GPRS_PROTO_IPV6;
+ } else if (g_strcmp0(value, "dual") == 0)
+ (*settings)[0].proto = OFONO_GPRS_PROTO_IPV4V6;
+ else
+ DBG("Unknown protocol: %s", value);
+
+ g_free(value);
+ }
+
+error:
+ if (key_file != NULL)
+ storage_close(NULL, SETTINGS_STORE, key_file, FALSE);
+
+ if (setting_group != NULL)
+ g_free(setting_group);
+
+ if (result == 0 && *count > 0)
+ DBG("Found. APN:%s, proto:%d, auth_method:%d",
+ (*settings)[0].apn, (*settings)[0].proto,
+ (*settings)[0].auth_method);
+ else
+ DBG("Not found. Result:%d", result);
+
+ return result;
+}
+
+static struct ofono_gprs_provision_driver config_file_provision_driver = {
+ .name = "GPRS context provisioning",
+ .get_settings = config_file_provision_get_settings,
+};
+
+static int config_file_provision_init(void)
+{
+ return ofono_gprs_provision_driver_register(
+ &config_file_provision_driver);
+}
+
+static void config_file_provision_exit(void)
+{
+ ofono_gprs_provision_driver_unregister(
+ &config_file_provision_driver);
+}
+
+OFONO_PLUGIN_DEFINE(file_provision, "Gprs Provisioning Plugin",
+ VERSION, OFONO_PLUGIN_PRIORITY_HIGH,
+ config_file_provision_init,
+ config_file_provision_exit)
--
2.11.0
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0006-plugins-support-for-provisioning-from-config-file.patch --]
[-- Type: text/x-patch, Size: 661 bytes --]
>From 3949f19fba4c4615ff42853dae5b0858b8add675 Mon Sep 17 00:00:00 2001
From: Christophe Ronco <c.ronco@kerlink.fr>
Date: Thu, 16 Feb 2017 16:43:48 +0100
Subject: [PATCH 2/2] plugins: support for provisioning from config file
---
Makefile.am | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/Makefile.am b/Makefile.am
index e1579745..d9f9b086 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -555,6 +555,10 @@ builtin_sources += plugins/provision.c
builtin_modules += cdma_provision
builtin_sources += plugins/cdma-provision.c
+
+builtin_modules += file_provision
+builtin_sources += plugins/file-provision.c
+
endif
if MAINTAINER_MODE
--
2.11.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: provisioning APN using mbpi plugin
2017-02-16 16:46 ` Christophe Ronco
@ 2017-02-16 18:02 ` Denis Kenzior
2017-02-17 14:44 ` [PATCH 0/2] Add provisioning plugin from configuration file Christophe Ronco
0 siblings, 1 reply; 8+ messages in thread
From: Denis Kenzior @ 2017-02-16 18:02 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 928 bytes --]
Hi Christophe,
> So I have developed another provisioning plugin based on a configuration
> file. Patches are attached to this mail and plugin details are explained
> in commit message. Let me know if you think this can be useful for
> ofono. I'll rework patches in this case (plugin name maybe,
What you have done is exactly why we have provisioning plugins. mbpi is
not the best database in the world. Especially if you're shipping a
niche device and know your settings / operators ahead of time.
> documentation needed maybe, can I use storage.c functions in a
> plugin?....) and send them cleanly using git send-email.
I'm fine carrying this upstream if you want. Generally storage is not
meant to be used outside the core. Nor is there a big advantage for you
to use these functions anyway. So maybe convert storage_open/close to
simple open/close calls would be enough.
Regards,
-Denis
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 0/2] Add provisioning plugin from configuration file
2017-02-16 18:02 ` Denis Kenzior
@ 2017-02-17 14:44 ` Christophe Ronco
2017-02-17 14:44 ` [PATCH 1/2] provision: add plugin to provision from config file Christophe Ronco
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Christophe Ronco @ 2017-02-17 14:44 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 631 bytes --]
The goal of this plugin is to provision APN and other internet context details
from a configuration file.
The modification from what I sent yesterday:
- do not use storage functions anymore
- changed section names to be able to add other type of sections in the future
Christophe Ronco (2):
provision: add plugin to provision from config file
plugins: support for provisioning from config file
Makefile.am | 4 ++
plugins/file-provision.c | 170 +++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 174 insertions(+)
create mode 100644 plugins/file-provision.c
--
2.11.0
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/2] provision: add plugin to provision from config file
2017-02-17 14:44 ` [PATCH 0/2] Add provisioning plugin from configuration file Christophe Ronco
@ 2017-02-17 14:44 ` Christophe Ronco
2017-02-17 14:44 ` [PATCH 2/2] plugins: support for provisioning " Christophe Ronco
2017-02-21 17:12 ` [PATCH 0/2] Add provisioning plugin from configuration file Denis Kenzior
2 siblings, 0 replies; 8+ messages in thread
From: Christophe Ronco @ 2017-02-17 14:44 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 6012 bytes --]
This plugin allows to provision gprs-context data based on MCC and MNC.
This is useful when provisioning using mbpi fails (either because you
are using a private APN or because there are multiple internet type context
for your operator in mbpi database).
Config file is STORAGEDIR/provisioning.
Config file should look like that:
[operator:MCC1,MNC1]
internet.AccessPointName=apn1
internet.Username=myUsername
internet.Password=myPassword
internet.AuthenticationMethod=pap
internet.Protocol=ipv6
[operator:MCC2,MNC2]
internet.AccessPointName=apn2
The only mandatory parameter for each operator is internet.AccessPointName.
Parameter description:
internet.AccessPointName: APN
internet.Username: Username
internet.Password: Password
internet.AuthenticationMethod: authentication method.
Possible values are:
- pap
- chap
Default is chap if unset.
internet.Protocol: protocol
Possible values are:
- ip: ipv4
- ipv6
- dual
Default is ip if not set.
All parameters are prefixed with internet to be able to extend this plugin
to other type of contexts (MMS, ...).
---
plugins/file-provision.c | 170 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 170 insertions(+)
create mode 100644 plugins/file-provision.c
diff --git a/plugins/file-provision.c b/plugins/file-provision.c
new file mode 100644
index 00000000..d4846a65
--- /dev/null
+++ b/plugins/file-provision.c
@@ -0,0 +1,170 @@
+/*
+ *
+ * oFono - Open Source Telephony
+ *
+ * Copyright (C) 2017 Kerlink SA.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <glib.h>
+
+#define OFONO_API_SUBJECT_TO_CHANGE
+#include <ofono/modem.h>
+#include <ofono/gprs-provision.h>
+#include <ofono/log.h>
+#include <ofono/plugin.h>
+
+#define CONFIG_FILE STORAGEDIR "/provisioning"
+
+static int config_file_provision_get_settings(const char *mcc,
+ const char *mnc, const char *spn,
+ struct ofono_gprs_provision_data **settings,
+ int *count)
+{
+ int result = 0;
+ GKeyFile *key_file = NULL;
+ char *setting_group = NULL;
+ char *value;
+
+ DBG("Finding settings for MCC %s, MNC %s, SPN '%s'", mcc, mnc, spn);
+
+ *count = 0;
+ *settings = NULL;
+
+ key_file = g_key_file_new();
+
+ if (!g_key_file_load_from_file(key_file, CONFIG_FILE, 0, NULL)) {
+ result = -ENOENT;
+ goto error;
+ }
+
+ setting_group = g_try_malloc(strlen("operator:") + strlen(mcc) +
+ strlen(mnc) + 2);
+ if (setting_group == NULL) {
+ result = -ENOMEM;
+ goto error;
+ }
+
+ sprintf(setting_group, "operator:%s,%s", mcc, mnc);
+
+ value = g_key_file_get_string(key_file, setting_group,
+ "internet.AccessPointName", NULL);
+
+ if (value == NULL)
+ goto error;
+
+ *settings = g_try_new0(struct ofono_gprs_provision_data, 1);
+ if (*settings == NULL) {
+ result = -ENOMEM;
+ goto error;
+ }
+
+ *count = 1;
+
+ (*settings)[0].type = OFONO_GPRS_CONTEXT_TYPE_INTERNET;
+ (*settings)[0].apn = value;
+
+ value = g_key_file_get_string(key_file, setting_group,
+ "internet.Username", NULL);
+
+ if (value != NULL)
+ (*settings)[0].username = value;
+
+ value = g_key_file_get_string(key_file, setting_group,
+ "internet.Password", NULL);
+
+ if (value != NULL)
+ (*settings)[0].password = value;
+
+ (*settings)[0].auth_method = OFONO_GPRS_AUTH_METHOD_CHAP;
+ value = g_key_file_get_string(key_file, setting_group,
+ "internet.AuthenticationMethod", NULL);
+
+ if (value != NULL) {
+ if (g_strcmp0(value, "chap") == 0)
+ (*settings)[0].auth_method =
+ OFONO_GPRS_AUTH_METHOD_CHAP;
+ else if (g_strcmp0(value, "pap") == 0)
+ (*settings)[0].auth_method =
+ OFONO_GPRS_AUTH_METHOD_PAP;
+ else
+ DBG("Unknown auth method: %s", value);
+
+ g_free(value);
+ }
+
+ (*settings)[0].proto = OFONO_GPRS_PROTO_IP;
+ value = g_key_file_get_string(key_file, setting_group,
+ "internet.Protocol", NULL);
+
+ if (value != NULL) {
+ DBG("CRO value:%s", value);
+ if (g_strcmp0(value, "ip") == 0) {
+ DBG("CRO value=ip");
+ (*settings)[0].proto = OFONO_GPRS_PROTO_IP;
+ } else if (g_strcmp0(value, "ipv6") == 0) {
+ DBG("CRO value=ipv6");
+ (*settings)[0].proto = OFONO_GPRS_PROTO_IPV6;
+ } else if (g_strcmp0(value, "dual") == 0)
+ (*settings)[0].proto = OFONO_GPRS_PROTO_IPV4V6;
+ else
+ DBG("Unknown protocol: %s", value);
+
+ g_free(value);
+ }
+
+error:
+ if (key_file != NULL)
+ g_key_file_free(key_file);
+
+ if (setting_group != NULL)
+ g_free(setting_group);
+
+ if (result == 0 && *count > 0)
+ DBG("Found. APN:%s, proto:%d, auth_method:%d",
+ (*settings)[0].apn, (*settings)[0].proto,
+ (*settings)[0].auth_method);
+ else
+ DBG("Not found. Result:%d", result);
+
+ return result;
+}
+
+static struct ofono_gprs_provision_driver config_file_provision_driver = {
+ .name = "GPRS context provisioning",
+ .get_settings = config_file_provision_get_settings,
+};
+
+static int config_file_provision_init(void)
+{
+ return ofono_gprs_provision_driver_register(
+ &config_file_provision_driver);
+}
+
+static void config_file_provision_exit(void)
+{
+ ofono_gprs_provision_driver_unregister(
+ &config_file_provision_driver);
+}
+
+OFONO_PLUGIN_DEFINE(file_provision, "Gprs Provisioning Plugin",
+ VERSION, OFONO_PLUGIN_PRIORITY_HIGH,
+ config_file_provision_init,
+ config_file_provision_exit)
--
2.11.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/2] plugins: support for provisioning from config file
2017-02-17 14:44 ` [PATCH 0/2] Add provisioning plugin from configuration file Christophe Ronco
2017-02-17 14:44 ` [PATCH 1/2] provision: add plugin to provision from config file Christophe Ronco
@ 2017-02-17 14:44 ` Christophe Ronco
2017-02-21 17:12 ` [PATCH 0/2] Add provisioning plugin from configuration file Denis Kenzior
2 siblings, 0 replies; 8+ messages in thread
From: Christophe Ronco @ 2017-02-17 14:44 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 456 bytes --]
---
Makefile.am | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/Makefile.am b/Makefile.am
index e1579745..d9f9b086 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -555,6 +555,10 @@ builtin_sources += plugins/provision.c
builtin_modules += cdma_provision
builtin_sources += plugins/cdma-provision.c
+
+builtin_modules += file_provision
+builtin_sources += plugins/file-provision.c
+
endif
if MAINTAINER_MODE
--
2.11.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 0/2] Add provisioning plugin from configuration file
2017-02-17 14:44 ` [PATCH 0/2] Add provisioning plugin from configuration file Christophe Ronco
2017-02-17 14:44 ` [PATCH 1/2] provision: add plugin to provision from config file Christophe Ronco
2017-02-17 14:44 ` [PATCH 2/2] plugins: support for provisioning " Christophe Ronco
@ 2017-02-21 17:12 ` Denis Kenzior
2 siblings, 0 replies; 8+ messages in thread
From: Denis Kenzior @ 2017-02-21 17:12 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1015 bytes --]
Hi Christophe,
On 02/17/2017 08:44 AM, Christophe Ronco wrote:
> The goal of this plugin is to provision APN and other internet context details
> from a configuration file.
>
> The modification from what I sent yesterday:
> - do not use storage functions anymore
> - changed section names to be able to add other type of sections in the future
>
> Christophe Ronco (2):
> provision: add plugin to provision from config file
> plugins: support for provisioning from config file
>
> Makefile.am | 4 ++
> plugins/file-provision.c | 170 +++++++++++++++++++++++++++++++++++++++++++++++
Strictly speaking there was no need to separate these into two patches.
If you're adding a new plugin, then build system changes belong together
with the code additions. Just for future reference.
> 2 files changed, 174 insertions(+)
> create mode 100644 plugins/file-provision.c
>
I squished together patch 1 & 2 into a single commit and applied. Thanks!
Regards,
-Denis
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2017-02-21 17:12 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <d9dfde3c-2b28-197f-f257-a7451d9871ed@kerlink.fr>
2017-02-08 12:24 ` provisioning APN using mbpi plugin Christophe Ronco
2017-02-08 16:54 ` Denis Kenzior
2017-02-16 16:46 ` Christophe Ronco
2017-02-16 18:02 ` Denis Kenzior
2017-02-17 14:44 ` [PATCH 0/2] Add provisioning plugin from configuration file Christophe Ronco
2017-02-17 14:44 ` [PATCH 1/2] provision: add plugin to provision from config file Christophe Ronco
2017-02-17 14:44 ` [PATCH 2/2] plugins: support for provisioning " Christophe Ronco
2017-02-21 17:12 ` [PATCH 0/2] Add provisioning plugin from configuration file Denis Kenzior
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.