const char *name;
int priority;
enum connman_device_type device_type;
+ int (*device_init) (void);
int (*device_load) (struct connman_device *device);
int (*device_save) (struct connman_device *device);
enum connman_network_type network_type;
+ int (*network_init) (struct connman_device *device);
int (*network_load) (struct connman_network *network);
int (*network_save) (struct connman_network *network);
};
int __connman_storage_init(void);
void __connman_storage_cleanup(void);
+int __connman_storage_init_device();
int __connman_storage_load_device(struct connman_device *device);
int __connman_storage_save_device(struct connman_device *device);
+int __connman_storage_init_network();
int __connman_storage_load_network(struct connman_network *network);
int __connman_storage_save_network(struct connman_network *network);
{
__connman_storage_load_device(device);
+ switch (device->mode) {
+ case CONNMAN_DEVICE_MODE_UNKNOWN:
+ case CONNMAN_DEVICE_MODE_TRANSPORT_IP:
+ break;
+ case CONNMAN_DEVICE_MODE_NETWORK_SINGLE:
+ case CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE:
+ __connman_storage_init_network(device);
+ break;
+ }
+
return connman_element_register(&device->element, NULL);
}
started = TRUE;
+ __connman_storage_init_device();
+
__connman_connection_init();
__connman_ipv4_init();
__connman_detect_init();
.remove = network_remove,
};
+static int network_init(struct connman_device *device)
+{
+ DBG("device %p", device);
+
+ return 0;
+}
+
static int network_load(struct connman_network *network)
{
GKeyFile *keyfile;
static struct connman_storage network_storage = {
.name = "network",
.priority = CONNMAN_STORAGE_PRIORITY_LOW,
+ .network_init = network_init,
.network_load = network_load,
.network_save = network_save,
};
storage_list = g_slist_remove(storage_list, storage);
}
+int __connman_storage_init_device(void)
+{
+ GSList *list;
+
+ DBG("");
+
+ for (list = storage_list; list; list = list->next) {
+ struct connman_storage *storage = list->data;
+
+ if (storage->device_init) {
+ if (storage->device_init() == 0)
+ return 0;
+ }
+ }
+
+ return -ENOENT;
+}
+
int __connman_storage_load_device(struct connman_device *device)
{
GSList *list;
return -ENOENT;
}
+int __connman_storage_init_network(struct connman_device *device)
+{
+ GSList *list;
+
+ DBG("device %p", device);
+
+ for (list = storage_list; list; list = list->next) {
+ struct connman_storage *storage = list->data;
+
+ if (storage->network_init) {
+ if (storage->network_init(device) == 0)
+ return 0;
+ }
+ }
+
+ return -ENOENT;
+}
+
int __connman_storage_load_network(struct connman_network *network)
{
GSList *list;