From: Pasi Sjöholm <[email protected]>
When connection is set connected, method needs to be set
CONNMAN_IPCONFIG_METHOD_UNKNOWN so that no old configuration
is used in case only ipv4/ipv6-configuration is set.
IPv6 can be also CONNMAN_IPCONFIG_METHOD_AUTO with dual/ipv4v6.
---
plugins/ofono.c | 55 +++++++++++++++++++++++++++++++++++++++----------------
1 file changed, 39 insertions(+), 16 deletions(-)
diff --git a/plugins/ofono.c b/plugins/ofono.c
index 789690c..bcccfe4 100644
--- a/plugins/ofono.c
+++ b/plugins/ofono.c
@@ -266,10 +266,8 @@ static void set_connected(struct modem_data *modem)
index = modem->context->index;
- method = modem->context->ipv4_method;
- if (index < 0 || (!modem->context->ipv4_address &&
- method == CONNMAN_IPCONFIG_METHOD_FIXED)) {
- connman_error("Invalid index and/or address");
+ if (index < 0 ) {
+ connman_error("Invalid index");
return;
}
@@ -277,28 +275,48 @@ static void set_connected(struct modem_data *modem)
if (!service)
return;
- if (method == CONNMAN_IPCONFIG_METHOD_FIXED ||
- method == CONNMAN_IPCONFIG_METHOD_DHCP) {
+ method = modem->context->ipv4_method;
+ if (method == CONNMAN_IPCONFIG_METHOD_DHCP) {
connman_service_create_ip4config(service, index);
- connman_network_set_index(modem->network, index);
-
connman_network_set_ipv4_method(modem->network, method);
setip = true;
- }
-
- if (method == CONNMAN_IPCONFIG_METHOD_FIXED) {
- connman_network_set_ipaddress(modem->network,
+ } else if (method == CONNMAN_IPCONFIG_METHOD_FIXED) {
+ if (modem->context->ipv4_address) {
+ connman_service_create_ip4config(service, index);
+ connman_network_set_ipv4_method(modem->network, method);
+ connman_network_set_ipaddress(modem->network,
modem->context->ipv4_address);
+ setip = true;
+ } else {
+ connman_error("Invalid ipv4-address");
+ return;
+ }
+ } else {
+ connman_service_create_ip4config(service, index);
+ connman_network_set_ipv4_method(modem->network,
CONNMAN_IPCONFIG_METHOD_UNKNOWN);
}
method = modem->context->ipv6_method;
- if (method == CONNMAN_IPCONFIG_METHOD_FIXED) {
+ if (method == CONNMAN_IPCONFIG_METHOD_AUTO) {
connman_service_create_ip6config(service, index);
connman_network_set_ipv6_method(modem->network, method);
- connman_network_set_ipaddress(modem->network,
- modem->context->ipv6_address);
+
setip = true;
+ } else if (method == CONNMAN_IPCONFIG_METHOD_FIXED) {
+ if (modem->context->ipv6_address) {
+ connman_service_create_ip6config(service, index);
+ connman_network_set_ipv6_method(modem->network, method);
+ connman_network_set_ipaddress(modem->network,
+ modem->context->ipv6_address);
+ setip = true;
+ } else {
+ connman_error("Invalid ipv6-address");
+ return;
+ }
+ } else {
+ connman_service_create_ip6config(service, index);
+ connman_network_set_ipv6_method(modem->network,
CONNMAN_IPCONFIG_METHOD_UNKNOWN);
}
/* Set the nameservers */
@@ -317,8 +335,13 @@ static void set_connected(struct modem_data *modem)
modem->context->ipv6_nameservers);
}
- if (setip)
+ if (setip) {
+ connman_network_set_index(modem->network, index);
connman_network_set_connected(modem->network, true);
+ } else {
+ connman_error("Invalid address(es)");
+ }
+
}
static void set_disconnected(struct modem_data *modem)
--
2.1.0
_______________________________________________
connman mailing list
[email protected]
https://lists.connman.net/mailman/listinfo/connman