inet: Cleanup router solicitation callback properly after error
[framework/connectivity/connman.git] / plugins / iwmx.c
index ccbd1d2..e79c1af 100644 (file)
@@ -2,7 +2,7 @@
  *
  *  Connection Manager
  *
- *  Copyright (C) 2007-2009  Intel Corporation. All rights reserved.
+ *  Copyright (C) 2007-2010  Intel Corporation. All rights reserved.
  *
  *  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
@@ -119,7 +119,6 @@ static struct connman_network_driver iwmx_cm_network_driver = {
  */
 struct connman_network *__iwmx_cm_network_available(
                        struct wmxsdk *wmxsdk, const char *station_name,
-                       const char *station_type,
                        const void *sdk_nspname, size_t sdk_nspname_size,
                                                                int strength)
 {
@@ -133,8 +132,8 @@ struct connman_network *__iwmx_cm_network_available(
                DBG("new network %s", station_name);
                nw = connman_network_create(station_name,
                                            CONNMAN_NETWORK_TYPE_WIMAX);
+               connman_network_register(nw);
                connman_network_set_index(nw, connman_device_get_index(dev));
-               connman_network_set_protocol(nw, CONNMAN_NETWORK_PROTOCOL_IP);
                connman_network_set_name(nw, station_name);
                connman_network_set_blob(nw, "WiMAX.NSP.name",
                                         sdk_nspname, sdk_nspname_size);
@@ -150,6 +149,7 @@ struct connman_network *__iwmx_cm_network_available(
                group[3 * cnt + 1] = 0;
                connman_network_set_group(nw, station_name);
                if (connman_device_add_network(dev, nw) < 0) {
+                       connman_network_unregister(nw);
                        connman_network_unref(nw);
                        goto error_add;
                }
@@ -157,7 +157,6 @@ struct connman_network *__iwmx_cm_network_available(
                DBG("updating network %s nw %p\n", station_name, nw);
        connman_network_set_available(nw, TRUE);
        connman_network_set_strength(nw, strength);
-       connman_network_set_string(nw, "WiMAX Network Type", station_type);
 error_add:
        return nw;
 }
@@ -169,14 +168,13 @@ error_add:
  */
 struct connman_network *iwmx_cm_network_available(
                        struct wmxsdk *wmxsdk, const char *station_name,
-                       const char *station_type,
                        const void *sdk_nspname, size_t sdk_nspname_size,
                                                                int strength)
 {
        struct connman_network *nw;
 
        g_static_mutex_lock(&wmxsdk->network_mutex);
-       nw = __iwmx_cm_network_available(wmxsdk, station_name, station_type,
+       nw = __iwmx_cm_network_available(wmxsdk, station_name,
                                        sdk_nspname, sdk_nspname_size,
                                        strength);
        g_static_mutex_unlock(&wmxsdk->network_mutex);
@@ -234,6 +232,7 @@ static void iwmx_cm_dev_connected(struct wmxsdk *wmxsdk)
        }
        wmxsdk->nw = connman_network_ref(nw);
        wmxsdk->connecting_nw = NULL;
+       connman_network_set_ipv4_method(nw, CONNMAN_IPCONFIG_METHOD_DHCP);
        connman_network_set_connected(nw, TRUE);
        DBG("connected to network %s\n",
            connman_network_get_identifier(nw));
@@ -258,6 +257,7 @@ static void __iwmx_cm_dev_disconnected(struct wmxsdk *wmxsdk)
                DBG("disconnected from network %s\n",
                                        connman_network_get_identifier(nw));
                connman_network_set_connected(nw, FALSE);
+               connman_network_unregister(nw);
                connman_network_unref(nw);
                wmxsdk->nw = NULL;
        } else
@@ -299,6 +299,7 @@ void __iwmx_cm_state_change(struct wmxsdk *wmxsdk,
         * For practical effects, some states are the same
         */
 
+#if HAVE_IWMXSDK_STATUS_IDLE
        /* Conection_Idle is the same as Data_Connected */
        if (__old_status == WIMAX_API_DEVICE_STATUS_Connection_Idle)
                old_status = WIMAX_API_DEVICE_STATUS_Data_Connected;
@@ -308,7 +309,7 @@ void __iwmx_cm_state_change(struct wmxsdk *wmxsdk,
                new_status = WIMAX_API_DEVICE_STATUS_Data_Connected;
        else
                new_status = __new_status;
-
+#endif /* #if HAVE_IWMXSDK_STATUS_IDLE */
        /* Radio off: all are just RF_OFF_SW (the highest) */
        switch (__old_status) {
        case WIMAX_API_DEVICE_STATUS_RF_OFF_HW_SW: