From: Pasi Sjöholm <pasi.sjoh...@jollamobile.com> 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 8233656..e8b7955 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 connman@connman.net https://lists.connman.net/mailman/listinfo/connman