This patch also fixes a potential crash: #0 connman_network_set_ipaddress (network=0x1aade90, ipaddress=0x0) at src/network.c:1744 #1 0x000302a4 in set_connected (modem=0x1aa30e0) at plugins/ofono.c:306 #2 0x000321a0 in context_changed (conn=<optimized out>, message=0x1aae7e0, user_data=<optimized out>) at plugins/ofono.c:1294 #3 0x00083ed0 in signal_filter (connection=0x1a71448, message=0x1aae7e0, user_data=0x1aa5458) at gdbus/watch.c:407 #4 0x00083d24 in message_filter (connection=0x1a71448, message=0x1aae7e0, user_data=<optimized out>) at gdbus/watch.c:556 #5 0x4038ff50 in dbus_connection_dispatch (connection=0x1a71448) at dbus-connection.c:4658 #6 0x00082be4 in message_dispatch (data=0x1a71448) at gdbus/mainloop.c:72 #7 0x4028ba8c in g_idle_dispatch (source=<optimized out>, callback=0x82bd4 <message_dispatch>, user_data=<optimized out>) at gmain.c:5251 #8 0x4028fb20 in g_main_dispatch (context=0x1a70500) at gmain.c:3066 #9 g_main_context_dispatch (context=0x1a70500) at gmain.c:3642 #10 0x4028fe24 in g_main_context_iterate (context=0x1a70500, block=1, dispatch=1, self=<optimized out>) at gmain.c:3713 #11 0x4029048c in g_main_loop_run (loop=0x1a6f208) at gmain.c:3906 #12 0x00014b5c in main (argc=563596, argv=0x906b8) at src/main.c:740
Br, Pasi ________________________________________ From: connman [connman-boun...@connman.net] on behalf of pasi.sjoh...@jolla.com [pasi.sjoh...@jolla.com] Sent: Thursday, December 18, 2014 16:02 To: connman@connman.net Subject: [PATCH 6/6] ofono: make sure valid addresses/methods are used in set_connected 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 94c6536..5afaa50 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 _______________________________________________ connman mailing list connman@connman.net https://lists.connman.net/mailman/listinfo/connman