Revert "Revise driver load routine"
[platform/core/connectivity/net-config.git] / src / main.c
1 /*
2  * Network Configuration Module
3  *
4  * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  */
19
20 #include <stdio.h>
21 #include <errno.h>
22 #include <unistd.h>
23 #include <sys/stat.h>
24 #include <system_info.h>
25
26 #include "log.h"
27 #include "util.h"
28 #include "wifi.h"
29 #include "netdbus.h"
30 #include "emulator.h"
31 #include "neterror.h"
32 #include "wifi-agent.h"
33 #include "wifi-power.h"
34 #include "vpnsvc.h"
35 #include "mptcp.h"
36 #include "network-clock.h"
37 #include "network-dpm.h"
38 #include "network-state.h"
39 #include "network-monitor.h"
40 #include "signal-handler.h"
41 #include "network-statistics.h"
42 #include "network-dump.h"
43
44 static GMainLoop *main_loop = NULL;
45
46 /*Poll the ethernet Cable Plug-in /Plug-out status at every 1000 ms*/
47 #define ETH_POLLING_TIME       1000
48
49 /* Callback to Poll the Ethernet Status*/
50 gboolean __net_ethernet_cable_status_polling_callback(gpointer data)
51 {
52         netconfig_ethernet_cable_plugin_status_check();
53         return TRUE;
54 }
55
56 void _got_name_cb(void)
57 {
58         wifi_object_create_and_init();
59         state_object_create_and_init();
60         statistics_object_create_and_init();
61         vpnsvc_create_and_init();
62         mptcp_object_create_and_init();
63
64         register_gdbus_signal();
65         connman_register_agent();
66
67         if (TIZEN_TV)
68                 __netconfig_set_ether_macaddr();
69 }
70
71 static void _objects_deinit(void)
72 {
73         cleanup_gdbus();
74         wifi_object_deinit();
75         state_object_deinit();
76         statistics_object_deinit();
77         vpnsvc_destroy_deinit();
78         mptcp_object_deinit();
79 }
80
81 int main(int argc, char *argv[])
82 {
83         int ret;
84         int check_ethernet_monitor_timer = 0;
85
86         umask(0077);
87
88         DBG("Network Configuration service");
89         if (daemon(0, 0) != 0)
90                 DBG("Cannot start daemon");
91
92         if (mkdir(WIFI_STORAGEDIR, S_IRUSR | S_IWUSR | S_IXUSR |
93                         S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) < 0) {
94                 if (errno != EEXIST)
95                         ERR("Failed to create Wi-Fi directory");
96         }
97
98         if (mkdir(WIFI_CERT_STORAGEDIR, S_IRUSR | S_IWUSR | S_IXUSR |
99                         S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) < 0) {
100                 if (errno != EEXIST)
101                         ERR("Failed to create cert directory");
102         }
103
104 #if !GLIB_CHECK_VERSION(2, 36, 0)
105         g_type_init();
106 #endif
107
108         main_loop = g_main_loop_new(NULL, FALSE);
109         if (main_loop == NULL) {
110                 ERR("Couldn't create GMainLoop\n");
111                 return 0;
112         }
113
114         ret = setup_gdbus(_got_name_cb);
115         if (ret > 0) {
116                 ERR("_netconfig_setup_gdbus is failed\n");
117                 return 0;
118         }
119
120         netconfig_error_init();
121
122         if (TIZEN_NTP_ENABLE)
123                 netconfig_clock_init();
124
125         /* If its environment uses Emulator, network configuration is set by emulator default */
126         emulator_test_and_start();
127
128         /* For device policy manager */
129         netconfig_dpm_init();
130
131         /* Start tcpdump if dump state is on */
132         check_dump_state_and_start();
133
134         if (TIZEN_WLAN_BOARD_SPRD)
135                 wifi_firmware_download();
136
137         /*In case no emulator, set the ETH0 Mac address*/
138         if (TIZEN_TV && emulator_is_emulated() == FALSE)
139                 __netconfig_set_ether_macaddr();
140
141         if (netconfig_check_feature_supported(NETCONFIG_SUPPORTED_FEATURE_ETHERNET)) {
142                 /* Register the callback to check the ethernet Plug-in /Plug-out Status */
143                 check_ethernet_monitor_timer = g_timeout_add(ETH_POLLING_TIME,
144                                 __net_ethernet_cable_status_polling_callback,
145                                 &check_ethernet_monitor_timer);
146         }
147
148         netconfig_plugin_init();
149
150         g_main_loop_run(main_loop);
151
152         netconfig_plugin_deinit();
153
154         _objects_deinit();
155
156         log_cleanup();
157
158         deregister_gdbus_signal();
159
160         netconfig_dpm_deinit();
161
162         if (TIZEN_NTP_ENABLE)
163                 netconfig_clock_deinit();
164
165
166         /*remove the Timer*/
167         if (check_ethernet_monitor_timer > 0)
168                 g_source_remove(check_ethernet_monitor_timer);
169
170         wifi_state_notifier_cleanup();
171
172         /* Unregistering the agent */
173         connman_unregister_agent();
174
175         return 0;
176 }