5 * Copyright (C) 2007-2013 Intel Corporation. All rights reserved.
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
32 #include <sys/signalfd.h>
38 #include <sys/resource.h>
44 #define CONF_ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]) - 1)
46 #define DEFAULT_INPUT_REQUEST_TIMEOUT (120 * 1000)
47 #define DEFAULT_BROWSER_LAUNCH_TIMEOUT (300 * 1000)
49 #define DEFAULT_ONLINE_CHECK_IPV4_URL "http://ipv4.connman.net/online/status.html"
50 #define DEFAULT_ONLINE_CHECK_IPV6_URL "http://ipv6.connman.net/online/status.html"
53 * We set the integer to 1 sec so that we have a chance to get
54 * necessary IPv6 router advertisement messages that might have
57 #define DEFAULT_ONLINE_CHECK_INITIAL_INTERVAL 1
58 #define DEFAULT_ONLINE_CHECK_MAX_INTERVAL 12
61 #define DEFAULT_WIFI_INTERFACE "wlan0"
62 #define CONTAINER_FILE "/run/systemd/container"
65 #define MAINFILE "main.conf"
66 #define CONFIGMAINFILE CONFIGDIR "/" MAINFILE
68 static char *default_auto_connect[] = {
75 static char *default_favorite_techs[] = {
80 static char *default_blacklist[] = {
92 char **pref_timeservers;
93 unsigned int *auto_connect;
94 unsigned int *favorite_techs;
95 unsigned int *preferred_techs;
96 unsigned int *always_connected_techs;
97 char **fallback_nameservers;
98 unsigned int timeout_inputreq;
99 unsigned int timeout_browserlaunch;
100 char **blacklisted_interfaces;
101 bool allow_hostname_updates;
102 bool allow_domainname_updates;
104 char **tethering_technologies;
105 bool persistent_tethering_mode;
107 char *vendor_class_id;
108 bool enable_online_check;
109 bool enable_online_to_ready_transition;
110 char *online_check_ipv4_url;
111 char *online_check_ipv6_url;
112 unsigned int online_check_initial_interval;
113 unsigned int online_check_max_interval;
114 bool auto_connect_roaming_services;
116 bool use_gateways_as_timeservers;
117 #if defined TIZEN_EXT
118 char **cellular_interfaces;
119 bool tizen_tv_extension;
121 char *global_nameserver;
122 bool supplicant_debug;
123 char *def_wifi_ifname;
130 } connman_settings = {
132 .pref_timeservers = NULL,
133 .auto_connect = NULL,
134 .favorite_techs = NULL,
135 .preferred_techs = NULL,
136 .always_connected_techs = NULL,
137 .fallback_nameservers = NULL,
138 .timeout_inputreq = DEFAULT_INPUT_REQUEST_TIMEOUT,
139 .timeout_browserlaunch = DEFAULT_BROWSER_LAUNCH_TIMEOUT,
140 .blacklisted_interfaces = NULL,
141 .allow_hostname_updates = true,
142 .allow_domainname_updates = true,
143 .single_tech = false,
144 .tethering_technologies = NULL,
145 .persistent_tethering_mode = false,
146 .enable_6to4 = false,
147 .vendor_class_id = NULL,
148 .enable_online_check = true,
149 .enable_online_to_ready_transition = false,
150 .online_check_ipv4_url = NULL,
151 .online_check_ipv6_url = NULL,
152 .online_check_initial_interval = DEFAULT_ONLINE_CHECK_INITIAL_INTERVAL,
153 .online_check_max_interval = DEFAULT_ONLINE_CHECK_MAX_INTERVAL,
154 .auto_connect_roaming_services = false,
156 .use_gateways_as_timeservers = false,
157 #if defined TIZEN_EXT
158 .cellular_interfaces = NULL,
159 .tizen_tv_extension = false,
161 .global_nameserver = NULL,
162 .supplicant_debug = false,
163 .def_wifi_ifname = DEFAULT_WIFI_INTERFACE,
167 .wifi_roam_scan = false,
172 #if defined TIZEN_EXT
175 char *ins_preferred_freq_bssid;
176 bool ins_last_connected_bssid;
177 bool ins_assoc_reject;
178 bool ins_signal_bssid;
179 unsigned int ins_preferred_freq_bssid_score;
180 unsigned int ins_last_connected_bssid_score;
181 unsigned int ins_assoc_reject_score;
183 bool ins_last_user_selection;
184 unsigned int ins_last_user_selection_time;
185 bool ins_last_connected;
186 char *ins_preferred_freq;
187 char **ins_security_priority;
188 unsigned int ins_security_priority_count;
191 unsigned int ins_last_user_selection_score;
192 unsigned int ins_last_connected_score;
193 unsigned int ins_preferred_freq_score;
194 unsigned int ins_security_priority_score;
195 unsigned int ins_internet_score;
197 int ins_signal_level3_5ghz;
198 int ins_signal_level3_24ghz;
199 } connman_ins_settings = {
201 .ins_preferred_freq_bssid = NULL,
202 .ins_last_connected_bssid = true,
203 .ins_assoc_reject = true,
204 .ins_signal_bssid = true,
205 .ins_preferred_freq_bssid_score = 20,
206 .ins_last_connected_bssid_score = 20,
207 .ins_assoc_reject_score = 10,
209 .ins_last_user_selection = true,
210 .ins_last_user_selection_time = 480,
211 .ins_last_connected = true,
212 .ins_preferred_freq = NULL,
213 .ins_security_priority = NULL,
214 .ins_security_priority_count = 0,
216 .ins_internet = true,
217 .ins_last_user_selection_score = 30,
218 .ins_last_connected_score = 30,
219 .ins_preferred_freq_score = 60,
220 .ins_security_priority_score = 5,
221 .ins_internet_score = 30,
223 .ins_signal_level3_5ghz = -76,
224 .ins_signal_level3_24ghz = -74,
228 #define CONF_BG_SCAN "BackgroundScanning"
229 #define CONF_PREF_TIMESERVERS "FallbackTimeservers"
230 #define CONF_AUTO_CONNECT_TECHS "DefaultAutoConnectTechnologies"
231 #define CONF_FAVORITE_TECHS "DefaultFavoriteTechnologies"
232 #define CONF_ALWAYS_CONNECTED_TECHS "AlwaysConnectedTechnologies"
233 #define CONF_PREFERRED_TECHS "PreferredTechnologies"
234 #define CONF_FALLBACK_NAMESERVERS "FallbackNameservers"
235 #define CONF_TIMEOUT_INPUTREQ "InputRequestTimeout"
236 #define CONF_TIMEOUT_BROWSERLAUNCH "BrowserLaunchTimeout"
237 #define CONF_BLACKLISTED_INTERFACES "NetworkInterfaceBlacklist"
238 #define CONF_ALLOW_HOSTNAME_UPDATES "AllowHostnameUpdates"
239 #define CONF_ALLOW_DOMAINNAME_UPDATES "AllowDomainnameUpdates"
240 #define CONF_SINGLE_TECH "SingleConnectedTechnology"
241 #define CONF_TETHERING_TECHNOLOGIES "TetheringTechnologies"
242 #define CONF_PERSISTENT_TETHERING_MODE "PersistentTetheringMode"
243 #define CONF_ENABLE_6TO4 "Enable6to4"
244 #define CONF_VENDOR_CLASS_ID "VendorClassID"
245 #define CONF_ENABLE_ONLINE_CHECK "EnableOnlineCheck"
246 #define CONF_ENABLE_ONLINE_TO_READY_TRANSITION "EnableOnlineToReadyTransition"
247 #define CONF_ONLINE_CHECK_IPV4_URL "OnlineCheckIPv4URL"
248 #define CONF_ONLINE_CHECK_IPV6_URL "OnlineCheckIPv6URL"
249 #define CONF_ONLINE_CHECK_INITIAL_INTERVAL "OnlineCheckInitialInterval"
250 #define CONF_ONLINE_CHECK_MAX_INTERVAL "OnlineCheckMaxInterval"
251 #define CONF_AUTO_CONNECT_ROAMING_SERVICES "AutoConnectRoamingServices"
252 #define CONF_ACD "AddressConflictDetection"
253 #define CONF_USE_GATEWAYS_AS_TIMESERVERS "UseGatewaysAsTimeservers"
254 #if defined TIZEN_EXT
255 #define CONF_CELLULAR_INTERFACE "NetworkCellularInterfaceList"
256 #define CONF_TIZEN_TV_EXT "TizenTVExtension"
257 #define CONF_ENABLE_AUTO_IP "EnableAutoIp"
258 #define CONF_GLOBAL_NAMESERVER "GlobalNameserver"
259 #define CONF_CONNMAN_SUPPLICANT_DEBUG "ConnmanSupplicantDebug"
260 #define CONF_CONNMAN_WIFI_DEF_IFNAME "DefaultWifiInterface"
261 #define CONF_CONNMAN_FILE_LOG "FileLogging"
262 #define CONF_CONNMAN_DLOG_LOG "DlogLogging"
263 #define CONF_CONNMAN_SIMPLIFIED_LOG "SimplifiedLog"
264 #define CONF_CONNMAN_WIFI_ROAM_SCAN "WifiRoamingScan"
265 #define CONF_CONNMAN_WIFI_ROAM "WifiRoaming"
268 #if defined TIZEN_EXT
270 #define CONF_INS_PREFERRED_FREQ_BSSID "INSPreferredFreqBSSID"
271 #define CONF_INS_PREFERRED_FREQ_BSSID_SCORE "INSPreferredFreqBSSIDScore"
272 #define CONF_INS_LAST_CONNECTED_BSSID "INSLastConnectedBSSID"
273 #define CONF_INS_LAST_CONNECTED_BSSID_SCORE "INSLastConnectedBSSIDScore"
274 #define CONF_INS_ASSOC_REJECT "INSAssocReject"
275 #define CONF_INS_ASSOC_REJECT_SCORE "INSAssocRejectScore"
276 #define CONF_INS_SIGNAL_BSSID "INSSignalBSSID"
278 #define CONF_INS_LAST_USER_SELECTION "INSLastUserSelection"
279 #define CONF_INS_LAST_USER_SELECTION_TIME "INSLastUserSelectionTime"
280 #define CONF_INS_LAST_USER_SELECTION_SCORE "INSLastUserSelectionScore"
281 #define CONF_INS_LAST_CONNECTED "INSLastConnected"
282 #define CONF_INS_LAST_CONNECTED_SCORE "INSLastConnectedScore"
283 #define CONF_INS_PREFERRED_FREQ "INSPreferredFreq"
284 #define CONF_INS_PREFERRED_FREQ_SCORE "INSPreferredFreqScore"
285 #define CONF_INS_SECURITY_PRIORITY "INSSecurityPriority"
286 #define CONF_INS_SECURITY_PRIORITY_COUNT "INSSecurityPriorityCount"
287 #define CONF_INS_SECURITY_PRIORITY_SCORE "INSSecurityPriorityScore"
288 #define CONF_INS_SIGNAL "INSSignal"
289 #define CONF_INS_INTERNET "INSInternet"
290 #define CONF_INS_INTERNET_SCORE "INSInternetScore"
292 #define CONF_INS_SIGNAL_LEVEL3_5GHZ "INSSignalLevel3_5GHz"
293 #define CONF_INS_SIGNAL_LEVEL3_24GHZ "INSSignalLevel3_24GHz"
296 static const char *supported_options[] = {
298 CONF_PREF_TIMESERVERS,
299 CONF_AUTO_CONNECT_TECHS,
301 CONF_ALWAYS_CONNECTED_TECHS,
302 CONF_PREFERRED_TECHS,
303 CONF_FALLBACK_NAMESERVERS,
304 CONF_TIMEOUT_INPUTREQ,
305 CONF_TIMEOUT_BROWSERLAUNCH,
306 CONF_BLACKLISTED_INTERFACES,
307 CONF_ALLOW_HOSTNAME_UPDATES,
308 CONF_ALLOW_DOMAINNAME_UPDATES,
310 CONF_TETHERING_TECHNOLOGIES,
311 CONF_PERSISTENT_TETHERING_MODE,
313 CONF_VENDOR_CLASS_ID,
314 CONF_ENABLE_ONLINE_CHECK,
315 CONF_ENABLE_ONLINE_TO_READY_TRANSITION,
316 CONF_ONLINE_CHECK_IPV4_URL,
317 CONF_ONLINE_CHECK_IPV6_URL,
318 CONF_ONLINE_CHECK_INITIAL_INTERVAL,
319 CONF_ONLINE_CHECK_MAX_INTERVAL,
320 CONF_AUTO_CONNECT_ROAMING_SERVICES,
322 CONF_USE_GATEWAYS_AS_TIMESERVERS,
323 #if defined TIZEN_EXT
324 CONF_CELLULAR_INTERFACE,
327 CONF_GLOBAL_NAMESERVER,
328 CONF_CONNMAN_SUPPLICANT_DEBUG,
329 CONF_CONNMAN_WIFI_DEF_IFNAME,
330 CONF_CONNMAN_FILE_LOG,
331 CONF_CONNMAN_DLOG_LOG,
332 CONF_CONNMAN_SIMPLIFIED_LOG,
333 CONF_CONNMAN_WIFI_ROAM_SCAN,
334 CONF_CONNMAN_WIFI_ROAM,
339 #if defined TIZEN_EXT
340 static const char *supported_ins_options[] = {
342 CONF_INS_PREFERRED_FREQ_BSSID,
343 CONF_INS_PREFERRED_FREQ_BSSID_SCORE,
344 CONF_INS_LAST_CONNECTED_BSSID,
345 CONF_INS_LAST_CONNECTED_BSSID_SCORE,
346 CONF_INS_ASSOC_REJECT,
347 CONF_INS_ASSOC_REJECT_SCORE,
348 CONF_INS_SIGNAL_BSSID,
350 CONF_INS_LAST_USER_SELECTION,
351 CONF_INS_LAST_USER_SELECTION_TIME,
352 CONF_INS_LAST_USER_SELECTION_SCORE,
353 CONF_INS_LAST_CONNECTED,
354 CONF_INS_LAST_CONNECTED_SCORE,
355 CONF_INS_PREFERRED_FREQ,
356 CONF_INS_PREFERRED_FREQ_SCORE,
357 CONF_INS_SECURITY_PRIORITY,
358 CONF_INS_SECURITY_PRIORITY_COUNT,
359 CONF_INS_SECURITY_PRIORITY_SCORE,
362 CONF_INS_INTERNET_SCORE,
364 CONF_INS_SIGNAL_LEVEL3_5GHZ,
365 CONF_INS_SIGNAL_LEVEL3_24GHZ,
370 static GKeyFile *load_config(const char *file)
375 keyfile = g_key_file_new();
377 g_key_file_set_list_separator(keyfile, ',');
379 if (!g_key_file_load_from_file(keyfile, file, 0, &err)) {
380 if (err->code != G_FILE_ERROR_NOENT) {
381 connman_error("Parsing %s failed: %s", file,
386 g_key_file_free(keyfile);
393 static uint *parse_service_types(char **str_list, gsize len)
395 unsigned int *type_list;
397 enum connman_service_type type;
399 type_list = g_try_new0(unsigned int, len + 1);
405 while (str_list[i]) {
406 type = __connman_service_string2type(str_list[i]);
408 if (type != CONNMAN_SERVICE_TYPE_UNKNOWN) {
415 type_list[j] = CONNMAN_SERVICE_TYPE_UNKNOWN;
420 static char **parse_fallback_nameservers(char **nameservers, gsize len)
425 servers = g_try_new0(char *, len + 1);
431 while (nameservers[i]) {
432 if (connman_inet_check_ipaddress(nameservers[i]) > 0) {
433 servers[j] = g_strdup(nameservers[i]);
442 static void check_config(GKeyFile *config)
450 keys = g_key_file_get_groups(config, NULL);
452 for (j = 0; keys && keys[j]; j++) {
453 #if defined TIZEN_EXT
454 if (g_strcmp0(keys[j], "General") != 0 &&
455 g_strcmp0(keys[j], "INS") != 0)
457 if (g_strcmp0(keys[j], "General") != 0)
459 connman_warn("Unknown group %s in %s",
465 keys = g_key_file_get_keys(config, "General", NULL, NULL);
467 for (j = 0; keys && keys[j]; j++) {
472 for (i = 0; supported_options[i]; i++) {
473 if (g_strcmp0(keys[j], supported_options[i]) == 0) {
478 if (!found && !supported_options[i])
479 connman_warn("Unknown option %s in %s",
485 #if defined TIZEN_EXT
486 keys = g_key_file_get_keys(config, "INS", NULL, NULL);
488 for (j = 0; keys && keys[j]; j++) {
493 for (i = 0; supported_ins_options[i]; i++) {
494 if (g_strcmp0(keys[j], supported_ins_options[i]) == 0) {
499 if (!found && !supported_ins_options[i])
500 connman_warn("Unknown option %s in %s",
508 #if defined TIZEN_EXT
509 static void check_Tizen_INS_configuration(GKeyFile *config)
511 GError *error = NULL;
512 char *ins_preferred_freq_bssid;
513 char *ins_preferred_freq;
514 char **ins_security_priority;
519 ins_preferred_freq_bssid = __connman_config_get_string(config, "INS",
520 CONF_INS_PREFERRED_FREQ_BSSID, &error);
522 connman_ins_settings.ins_preferred_freq_bssid = ins_preferred_freq_bssid;
524 g_clear_error(&error);
526 integer = g_key_file_get_integer(config, "INS",
527 CONF_INS_PREFERRED_FREQ_BSSID_SCORE, &error);
528 if (!error && integer >= 0)
529 connman_ins_settings.ins_preferred_freq_bssid_score = integer;
531 g_clear_error(&error);
533 boolean = __connman_config_get_bool(config, "INS",
534 CONF_INS_LAST_CONNECTED_BSSID, &error);
536 connman_ins_settings.ins_last_connected_bssid = boolean;
538 g_clear_error(&error);
540 integer = g_key_file_get_integer(config, "INS",
541 CONF_INS_LAST_CONNECTED_BSSID_SCORE, &error);
542 if (!error && integer >= 0)
543 connman_ins_settings.ins_last_connected_bssid_score = integer;
545 g_clear_error(&error);
547 boolean = __connman_config_get_bool(config, "INS",
548 CONF_INS_ASSOC_REJECT, &error);
550 connman_ins_settings.ins_assoc_reject = boolean;
552 g_clear_error(&error);
554 integer = g_key_file_get_integer(config, "INS",
555 CONF_INS_ASSOC_REJECT_SCORE, &error);
556 if (!error && integer >= 0)
557 connman_ins_settings.ins_assoc_reject_score = integer;
559 g_clear_error(&error);
561 boolean = __connman_config_get_bool(config, "INS",
562 CONF_INS_SIGNAL_BSSID, &error);
564 connman_ins_settings.ins_signal_bssid = boolean;
566 g_clear_error(&error);
568 boolean = __connman_config_get_bool(config, "INS",
569 CONF_INS_LAST_USER_SELECTION, &error);
571 connman_ins_settings.ins_last_user_selection = boolean;
573 g_clear_error(&error);
575 integer = g_key_file_get_integer(config, "INS",
576 CONF_INS_LAST_USER_SELECTION_TIME, &error);
577 if (!error && integer >= 0)
578 connman_ins_settings.ins_last_user_selection_time = integer;
580 g_clear_error(&error);
582 integer = g_key_file_get_integer(config, "INS",
583 CONF_INS_LAST_USER_SELECTION_SCORE, &error);
584 if (!error && integer >= 0)
585 connman_ins_settings.ins_last_user_selection_score = integer;
587 g_clear_error(&error);
589 boolean = __connman_config_get_bool(config, "INS",
590 CONF_INS_LAST_CONNECTED, &error);
592 connman_ins_settings.ins_last_connected = boolean;
594 g_clear_error(&error);
596 integer = g_key_file_get_integer(config, "INS",
597 CONF_INS_LAST_CONNECTED_SCORE, &error);
598 if (!error && integer >= 0)
599 connman_ins_settings.ins_last_connected_score = integer;
601 g_clear_error(&error);
603 ins_preferred_freq = __connman_config_get_string(config, "INS",
604 CONF_INS_PREFERRED_FREQ, &error);
606 connman_ins_settings.ins_preferred_freq = ins_preferred_freq;
608 g_clear_error(&error);
610 integer = g_key_file_get_integer(config, "INS",
611 CONF_INS_PREFERRED_FREQ_SCORE, &error);
612 if (!error && integer >= 0)
613 connman_ins_settings.ins_preferred_freq_score = integer;
615 g_clear_error(&error);
617 ins_security_priority = g_key_file_get_string_list(config, "INS",
618 CONF_INS_SECURITY_PRIORITY, &len, &error);
621 connman_ins_settings.ins_security_priority = ins_security_priority;
622 connman_ins_settings.ins_security_priority_count = len;
625 g_clear_error(&error);
627 integer = g_key_file_get_integer(config, "INS",
628 CONF_INS_SECURITY_PRIORITY_SCORE, &error);
629 if (!error && integer >= 0)
630 connman_ins_settings.ins_security_priority_score = integer;
632 g_clear_error(&error);
634 boolean = __connman_config_get_bool(config, "INS",
635 CONF_INS_SIGNAL, &error);
637 connman_ins_settings.ins_signal = boolean;
639 g_clear_error(&error);
641 boolean = __connman_config_get_bool(config, "INS",
642 CONF_INS_INTERNET, &error);
644 connman_ins_settings.ins_internet = boolean;
646 g_clear_error(&error);
648 integer = g_key_file_get_integer(config, "INS",
649 CONF_INS_INTERNET_SCORE, &error);
650 if (!error && integer >= 0)
651 connman_ins_settings.ins_internet_score = integer;
653 g_clear_error(&error);
655 integer = g_key_file_get_integer(config, "INS",
656 CONF_INS_SIGNAL_LEVEL3_5GHZ, &error);
658 connman_ins_settings.ins_signal_level3_5ghz = integer;
660 g_clear_error(&error);
662 integer = g_key_file_get_integer(config, "INS",
663 CONF_INS_SIGNAL_LEVEL3_24GHZ, &error);
665 connman_ins_settings.ins_signal_level3_24ghz = integer;
667 g_clear_error(&error);
670 static void check_Tizen_configuration(GKeyFile *config)
672 GError *error = NULL;
673 char **cellular_interfaces;
674 char *global_nameserver;
675 char *default_wifi_ifname;
679 cellular_interfaces = g_key_file_get_string_list(config, "General",
680 CONF_CELLULAR_INTERFACE, &len, &error);
683 connman_settings.cellular_interfaces = cellular_interfaces;
685 g_clear_error(&error);
687 boolean = __connman_config_get_bool(config, "General",
688 CONF_TIZEN_TV_EXT, &error);
690 connman_settings.tizen_tv_extension = boolean;
692 g_clear_error(&error);
694 boolean = __connman_config_get_bool(config, "General",
695 CONF_ENABLE_AUTO_IP, &error);
697 connman_settings.auto_ip = boolean;
699 g_clear_error(&error);
701 global_nameserver = __connman_config_get_string(config, "General",
702 CONF_GLOBAL_NAMESERVER, &error);
704 connman_settings.global_nameserver = global_nameserver;
706 g_clear_error(&error);
708 boolean = __connman_config_get_bool(config, "General",
709 CONF_CONNMAN_SUPPLICANT_DEBUG, &error);
711 connman_settings.supplicant_debug = boolean;
713 g_clear_error(&error);
715 default_wifi_ifname = __connman_config_get_string(config, "General",
716 CONF_CONNMAN_WIFI_DEF_IFNAME, &error);
718 connman_settings.def_wifi_ifname = default_wifi_ifname;
720 g_clear_error(&error);
722 boolean = __connman_config_get_bool(config, "General",
723 CONF_CONNMAN_FILE_LOG, &error);
725 connman_settings.file_log = boolean;
727 g_clear_error(&error);
729 boolean = __connman_config_get_bool(config, "General",
730 CONF_CONNMAN_DLOG_LOG, &error);
732 connman_settings.dlog_log = boolean;
734 g_clear_error(&error);
736 boolean = __connman_config_get_bool(config, "General",
737 CONF_CONNMAN_SIMPLIFIED_LOG, &error);
739 connman_settings.simple_log = boolean;
741 boolean = __connman_config_get_bool(config, "General",
742 CONF_CONNMAN_WIFI_ROAM_SCAN, &error);
744 connman_settings.wifi_roam_scan = boolean;
746 boolean = __connman_config_get_bool(config, "General",
747 CONF_CONNMAN_WIFI_ROAM, &error);
749 connman_settings.wifi_roam = boolean;
751 g_clear_error(&error);
753 check_Tizen_INS_configuration(config);
756 static void set_nofile_inc(void)
761 rlim.rlim_cur = 8192;
762 rlim.rlim_max = 8192;
764 err = setrlimit(RLIMIT_NOFILE, &rlim);
766 DBG("fail to increase FILENO err(%d)", err);
772 static void parse_config(GKeyFile *config)
774 GError *error = NULL;
785 connman_settings.auto_connect =
786 parse_service_types(default_auto_connect, CONF_ARRAY_SIZE(default_auto_connect));
787 connman_settings.favorite_techs =
788 parse_service_types(default_favorite_techs, CONF_ARRAY_SIZE(default_favorite_techs));
789 connman_settings.blacklisted_interfaces =
790 g_strdupv(default_blacklist);
794 DBG("parsing %s", MAINFILE);
796 boolean = g_key_file_get_boolean(config, "General",
797 CONF_BG_SCAN, &error);
799 connman_settings.bg_scan = boolean;
801 g_clear_error(&error);
803 timeservers = __connman_config_get_string_list(config, "General",
804 CONF_PREF_TIMESERVERS, NULL, &error);
806 connman_settings.pref_timeservers = timeservers;
808 g_clear_error(&error);
810 str_list = __connman_config_get_string_list(config, "General",
811 CONF_AUTO_CONNECT_TECHS, &len, &error);
814 connman_settings.auto_connect =
815 parse_service_types(str_list, len);
817 connman_settings.auto_connect =
818 parse_service_types(default_auto_connect, CONF_ARRAY_SIZE(default_auto_connect));
820 g_strfreev(str_list);
822 g_clear_error(&error);
824 str_list = __connman_config_get_string_list(config, "General",
825 CONF_FAVORITE_TECHS, &len, &error);
828 connman_settings.favorite_techs =
829 parse_service_types(str_list, len);
831 connman_settings.favorite_techs =
832 parse_service_types(default_favorite_techs, CONF_ARRAY_SIZE(default_favorite_techs));
834 g_strfreev(str_list);
836 g_clear_error(&error);
838 str_list = __connman_config_get_string_list(config, "General",
839 CONF_PREFERRED_TECHS, &len, &error);
842 connman_settings.preferred_techs =
843 parse_service_types(str_list, len);
845 g_strfreev(str_list);
847 g_clear_error(&error);
849 str_list = __connman_config_get_string_list(config, "General",
850 CONF_ALWAYS_CONNECTED_TECHS, &len, &error);
853 connman_settings.always_connected_techs =
854 parse_service_types(str_list, len);
856 g_strfreev(str_list);
858 g_clear_error(&error);
860 str_list = __connman_config_get_string_list(config, "General",
861 CONF_FALLBACK_NAMESERVERS, &len, &error);
864 connman_settings.fallback_nameservers =
865 parse_fallback_nameservers(str_list, len);
867 g_strfreev(str_list);
869 g_clear_error(&error);
871 integer = g_key_file_get_integer(config, "General",
872 CONF_TIMEOUT_INPUTREQ, &error);
873 if (!error && integer >= 0)
874 connman_settings.timeout_inputreq = integer * 1000;
876 g_clear_error(&error);
878 integer = g_key_file_get_integer(config, "General",
879 CONF_TIMEOUT_BROWSERLAUNCH, &error);
880 if (!error && integer >= 0)
881 connman_settings.timeout_browserlaunch = integer * 1000;
883 g_clear_error(&error);
885 interfaces = __connman_config_get_string_list(config, "General",
886 CONF_BLACKLISTED_INTERFACES, &len, &error);
889 connman_settings.blacklisted_interfaces = interfaces;
891 connman_settings.blacklisted_interfaces =
892 g_strdupv(default_blacklist);
894 g_clear_error(&error);
896 boolean = __connman_config_get_bool(config, "General",
897 CONF_ALLOW_HOSTNAME_UPDATES,
900 connman_settings.allow_hostname_updates = boolean;
902 g_clear_error(&error);
904 boolean = __connman_config_get_bool(config, "General",
905 CONF_ALLOW_DOMAINNAME_UPDATES,
908 connman_settings.allow_domainname_updates = boolean;
910 g_clear_error(&error);
912 boolean = __connman_config_get_bool(config, "General",
913 CONF_SINGLE_TECH, &error);
915 connman_settings.single_tech = boolean;
917 g_clear_error(&error);
919 tethering = __connman_config_get_string_list(config, "General",
920 CONF_TETHERING_TECHNOLOGIES, &len, &error);
923 connman_settings.tethering_technologies = tethering;
925 g_clear_error(&error);
927 boolean = __connman_config_get_bool(config, "General",
928 CONF_PERSISTENT_TETHERING_MODE,
931 connman_settings.persistent_tethering_mode = boolean;
933 g_clear_error(&error);
935 boolean = __connman_config_get_bool(config, "General",
936 CONF_ENABLE_6TO4, &error);
938 connman_settings.enable_6to4 = boolean;
940 g_clear_error(&error);
942 string = __connman_config_get_string(config, "General",
943 CONF_VENDOR_CLASS_ID, &error);
945 connman_settings.vendor_class_id = string;
947 g_clear_error(&error);
949 boolean = __connman_config_get_bool(config, "General",
950 CONF_ENABLE_ONLINE_CHECK, &error);
952 connman_settings.enable_online_check = boolean;
954 connman_info("Online check disabled by main config.");
957 g_clear_error(&error);
959 boolean = __connman_config_get_bool(config, "General",
960 CONF_ENABLE_ONLINE_TO_READY_TRANSITION, &error);
962 connman_settings.enable_online_to_ready_transition = boolean;
965 g_clear_error(&error);
967 string = __connman_config_get_string(config, "General",
968 CONF_ONLINE_CHECK_IPV4_URL, &error);
970 connman_settings.online_check_ipv4_url = string;
972 connman_settings.online_check_ipv4_url =
973 g_strdup(DEFAULT_ONLINE_CHECK_IPV4_URL);
975 g_clear_error(&error);
977 string = __connman_config_get_string(config, "General",
978 CONF_ONLINE_CHECK_IPV6_URL, &error);
980 connman_settings.online_check_ipv6_url = string;
982 connman_settings.online_check_ipv6_url =
983 g_strdup(DEFAULT_ONLINE_CHECK_IPV6_URL);
986 g_clear_error(&error);
988 integer = g_key_file_get_integer(config, "General",
989 CONF_ONLINE_CHECK_INITIAL_INTERVAL, &error);
990 if (!error && integer >= 0)
991 connman_settings.online_check_initial_interval = integer;
993 g_clear_error(&error);
995 integer = g_key_file_get_integer(config, "General",
996 CONF_ONLINE_CHECK_MAX_INTERVAL, &error);
997 if (!error && integer >= 0)
998 connman_settings.online_check_max_interval = integer;
1000 g_clear_error(&error);
1002 if (connman_settings.online_check_initial_interval < 1 ||
1003 connman_settings.online_check_initial_interval >
1004 connman_settings.online_check_max_interval) {
1005 connman_warn("Incorrect online check intervals [%u, %u]",
1006 connman_settings.online_check_initial_interval,
1007 connman_settings.online_check_max_interval);
1008 connman_settings.online_check_initial_interval =
1009 DEFAULT_ONLINE_CHECK_INITIAL_INTERVAL;
1010 connman_settings.online_check_max_interval =
1011 DEFAULT_ONLINE_CHECK_MAX_INTERVAL;
1014 boolean = __connman_config_get_bool(config, "General",
1015 CONF_AUTO_CONNECT_ROAMING_SERVICES, &error);
1017 connman_settings.auto_connect_roaming_services = boolean;
1019 g_clear_error(&error);
1021 boolean = __connman_config_get_bool(config, "General", CONF_ACD, &error);
1023 connman_settings.acd = boolean;
1025 g_clear_error(&error);
1027 boolean = __connman_config_get_bool(config, "General",
1028 CONF_USE_GATEWAYS_AS_TIMESERVERS, &error);
1030 connman_settings.use_gateways_as_timeservers = boolean;
1032 g_clear_error(&error);
1034 #if defined TIZEN_EXT
1035 check_Tizen_configuration(config);
1039 static int config_init(const char *file)
1043 #if defined TIZEN_EXT
1046 config = load_config(file);
1047 check_config(config);
1048 parse_config(config);
1050 g_key_file_free(config);
1052 #if defined TIZEN_EXT
1053 set_simple_log_option(connman_settings.simple_log);
1054 set_dlog_logging_option(connman_settings.dlog_log);
1055 set_file_logging_option(connman_settings.file_log);
1060 static GMainLoop *main_loop = NULL;
1062 static unsigned int __terminated = 0;
1064 static gboolean signal_handler(GIOChannel *channel, GIOCondition cond,
1067 struct signalfd_siginfo si;
1071 if (cond & (G_IO_NVAL | G_IO_ERR | G_IO_HUP))
1074 fd = g_io_channel_unix_get_fd(channel);
1076 result = read(fd, &si, sizeof(si));
1077 if (result != sizeof(si))
1080 switch (si.ssi_signo) {
1083 if (__terminated == 0) {
1084 connman_info("Terminating");
1085 g_main_loop_quit(main_loop);
1095 static guint setup_signalfd(void)
1097 GIOChannel *channel;
1103 sigaddset(&mask, SIGINT);
1104 sigaddset(&mask, SIGTERM);
1106 if (sigprocmask(SIG_BLOCK, &mask, NULL) < 0) {
1107 perror("Failed to set signal mask");
1111 fd = signalfd(-1, &mask, 0);
1113 perror("Failed to create signal descriptor");
1117 channel = g_io_channel_unix_new(fd);
1119 g_io_channel_set_close_on_unref(channel, TRUE);
1120 g_io_channel_set_encoding(channel, NULL, NULL);
1121 g_io_channel_set_buffered(channel, FALSE);
1123 source = g_io_add_watch(channel,
1124 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL,
1125 signal_handler, NULL);
1127 g_io_channel_unref(channel);
1132 static void disconnect_callback(DBusConnection *conn, void *user_data)
1134 connman_error("D-Bus disconnect");
1136 g_main_loop_quit(main_loop);
1139 static gchar *option_config = NULL;
1140 static gchar *option_debug = NULL;
1141 static gchar *option_device = NULL;
1142 static gchar *option_plugin = NULL;
1143 static gchar *option_nodevice = NULL;
1144 static gchar *option_noplugin = NULL;
1145 static gchar *option_wifi = NULL;
1146 static gboolean option_detach = TRUE;
1147 static gboolean option_dnsproxy = TRUE;
1148 static gboolean option_backtrace = TRUE;
1149 static gboolean option_version = FALSE;
1151 static bool parse_debug(const char *key, const char *value,
1152 gpointer user_data, GError **error)
1156 char *prev = option_debug;
1158 option_debug = g_strconcat(prev, ",", value, NULL);
1161 option_debug = g_strdup(value);
1164 g_free(option_debug);
1165 option_debug = g_strdup("*");
1171 static bool parse_noplugin(const char *key, const char *value,
1172 gpointer user_data, GError **error)
1174 if (option_noplugin) {
1175 char *prev = option_noplugin;
1177 option_noplugin = g_strconcat(prev, ",", value, NULL);
1180 option_noplugin = g_strdup(value);
1186 static GOptionEntry options[] = {
1187 { "config", 'c', 0, G_OPTION_ARG_STRING, &option_config,
1188 "Load the specified configuration file "
1189 "instead of " CONFIGMAINFILE, "FILE" },
1190 { "debug", 'd', G_OPTION_FLAG_OPTIONAL_ARG,
1191 G_OPTION_ARG_CALLBACK, parse_debug,
1192 "Specify debug options to enable", "DEBUG" },
1193 { "device", 'i', 0, G_OPTION_ARG_STRING, &option_device,
1194 "Specify networking devices or interfaces", "DEV,..." },
1195 { "nodevice", 'I', 0, G_OPTION_ARG_STRING, &option_nodevice,
1196 "Specify networking interfaces to ignore", "DEV,..." },
1197 { "plugin", 'p', 0, G_OPTION_ARG_STRING, &option_plugin,
1198 "Specify plugins to load", "NAME,..." },
1199 { "noplugin", 'P', 0, G_OPTION_ARG_CALLBACK, &parse_noplugin,
1200 "Specify plugins not to load", "NAME,..." },
1201 { "wifi", 'W', 0, G_OPTION_ARG_STRING, &option_wifi,
1202 "Specify driver for WiFi/Supplicant", "NAME" },
1203 { "nodaemon", 'n', G_OPTION_FLAG_REVERSE,
1204 G_OPTION_ARG_NONE, &option_detach,
1205 "Don't fork daemon to background" },
1206 { "nodnsproxy", 'r', G_OPTION_FLAG_REVERSE,
1207 G_OPTION_ARG_NONE, &option_dnsproxy,
1208 "Don't support DNS resolving" },
1209 { "nobacktrace", 0, G_OPTION_FLAG_REVERSE,
1210 G_OPTION_ARG_NONE, &option_backtrace,
1211 "Don't print out backtrace information" },
1212 { "version", 'v', 0, G_OPTION_ARG_NONE, &option_version,
1213 "Show version information and exit" },
1217 char *connman_setting_get_string(const char *key)
1219 if (g_str_equal(key, CONF_VENDOR_CLASS_ID))
1220 return connman_settings.vendor_class_id;
1222 if (g_str_equal(key, CONF_ONLINE_CHECK_IPV4_URL))
1223 return connman_settings.online_check_ipv4_url;
1225 if (g_str_equal(key, CONF_ONLINE_CHECK_IPV6_URL))
1226 return connman_settings.online_check_ipv6_url;
1228 if (g_strcmp0(key, "wifi") == 0) {
1230 return "nl80211,wext";
1235 #if defined TIZEN_EXT
1236 if (g_str_equal(key, CONF_GLOBAL_NAMESERVER))
1237 return connman_settings.global_nameserver;
1239 if (g_str_equal(key, CONF_INS_PREFERRED_FREQ_BSSID))
1240 return connman_ins_settings.ins_preferred_freq_bssid;
1242 if (g_str_equal(key, CONF_INS_PREFERRED_FREQ))
1243 return connman_ins_settings.ins_preferred_freq;
1245 if (g_str_equal(key, CONF_CONNMAN_WIFI_DEF_IFNAME))
1246 return connman_settings.def_wifi_ifname;
1251 bool connman_setting_get_bool(const char *key)
1253 if (g_str_equal(key, CONF_BG_SCAN))
1254 return connman_settings.bg_scan;
1256 if (g_str_equal(key, CONF_ALLOW_HOSTNAME_UPDATES))
1257 return connman_settings.allow_hostname_updates;
1259 if (g_str_equal(key, CONF_ALLOW_DOMAINNAME_UPDATES))
1260 return connman_settings.allow_domainname_updates;
1262 if (g_str_equal(key, CONF_SINGLE_TECH))
1263 return connman_settings.single_tech;
1265 if (g_str_equal(key, CONF_PERSISTENT_TETHERING_MODE))
1266 return connman_settings.persistent_tethering_mode;
1268 if (g_str_equal(key, CONF_ENABLE_6TO4))
1269 return connman_settings.enable_6to4;
1271 if (g_str_equal(key, CONF_ENABLE_ONLINE_CHECK))
1272 return connman_settings.enable_online_check;
1274 if (g_str_equal(key, CONF_ENABLE_ONLINE_TO_READY_TRANSITION))
1275 return connman_settings.enable_online_to_ready_transition;
1277 if (g_str_equal(key, CONF_AUTO_CONNECT_ROAMING_SERVICES))
1278 return connman_settings.auto_connect_roaming_services;
1280 if (g_str_equal(key, CONF_ACD))
1281 return connman_settings.acd;
1283 if (g_str_equal(key, CONF_USE_GATEWAYS_AS_TIMESERVERS))
1284 return connman_settings.use_gateways_as_timeservers;
1286 #if defined TIZEN_EXT
1287 if (g_str_equal(key, CONF_ENABLE_AUTO_IP))
1288 return connman_settings.auto_ip;
1290 if (g_str_equal(key, CONF_CONNMAN_SUPPLICANT_DEBUG))
1291 return connman_settings.supplicant_debug;
1293 if (g_str_equal(key, CONF_CONNMAN_FILE_LOG))
1294 return connman_settings.file_log;
1296 if (g_str_equal(key, CONF_CONNMAN_DLOG_LOG))
1297 return connman_settings.dlog_log;
1299 if (g_str_equal(key, CONF_CONNMAN_SIMPLIFIED_LOG))
1300 return connman_settings.simple_log;
1302 if (g_str_equal(key, CONF_CONNMAN_WIFI_ROAM_SCAN))
1303 return connman_settings.wifi_roam_scan;
1305 if (g_str_equal(key, CONF_CONNMAN_WIFI_ROAM))
1306 return connman_settings.wifi_roam;
1308 if (g_str_equal(key, CONF_INS_LAST_CONNECTED_BSSID))
1309 return connman_ins_settings.ins_last_connected_bssid;
1311 if (g_str_equal(key, CONF_INS_ASSOC_REJECT))
1312 return connman_ins_settings.ins_assoc_reject;
1314 if (g_str_equal(key, CONF_INS_SIGNAL_BSSID))
1315 return connman_ins_settings.ins_signal_bssid;
1317 if (g_str_equal(key, CONF_INS_LAST_USER_SELECTION))
1318 return connman_ins_settings.ins_last_user_selection;
1320 if (g_str_equal(key, CONF_INS_LAST_CONNECTED))
1321 return connman_ins_settings.ins_last_connected;
1323 if (g_str_equal(key, CONF_INS_SIGNAL))
1324 return connman_ins_settings.ins_signal;
1326 if (g_str_equal(key, CONF_INS_INTERNET))
1327 return connman_ins_settings.ins_internet;
1333 unsigned int connman_setting_get_uint(const char *key)
1335 if (g_str_equal(key, CONF_ONLINE_CHECK_INITIAL_INTERVAL))
1336 return connman_settings.online_check_initial_interval;
1338 if (g_str_equal(key, CONF_ONLINE_CHECK_MAX_INTERVAL))
1339 return connman_settings.online_check_max_interval;
1341 #if defined TIZEN_EXT
1342 if (g_str_equal(key, CONF_INS_PREFERRED_FREQ_BSSID_SCORE))
1343 return connman_ins_settings.ins_preferred_freq_bssid_score;
1345 if (g_str_equal(key, CONF_INS_LAST_CONNECTED_BSSID_SCORE))
1346 return connman_ins_settings.ins_last_connected_bssid_score;
1348 if (g_str_equal(key, CONF_INS_ASSOC_REJECT_SCORE))
1349 return connman_ins_settings.ins_assoc_reject_score;
1351 if (g_str_equal(key, CONF_INS_LAST_USER_SELECTION_TIME))
1352 return connman_ins_settings.ins_last_user_selection_time;
1354 if (g_str_equal(key, CONF_INS_SECURITY_PRIORITY_COUNT))
1355 return connman_ins_settings.ins_security_priority_count;
1357 if (g_str_equal(key, CONF_INS_LAST_USER_SELECTION_SCORE))
1358 return connman_ins_settings.ins_last_user_selection_score;
1360 if (g_str_equal(key, CONF_INS_LAST_CONNECTED_SCORE))
1361 return connman_ins_settings.ins_last_connected_score;
1363 if (g_str_equal(key, CONF_INS_PREFERRED_FREQ_SCORE))
1364 return connman_ins_settings.ins_preferred_freq_score;
1366 if (g_str_equal(key, CONF_INS_SECURITY_PRIORITY_SCORE))
1367 return connman_ins_settings.ins_security_priority_score;
1369 if (g_str_equal(key, CONF_INS_INTERNET_SCORE))
1370 return connman_ins_settings.ins_internet_score;
1375 #if defined TIZEN_EXT
1376 int connman_setting_get_int(const char *key)
1378 if (g_str_equal(key, CONF_INS_SIGNAL_LEVEL3_5GHZ))
1379 return connman_ins_settings.ins_signal_level3_5ghz;
1381 if (g_str_equal(key, CONF_INS_SIGNAL_LEVEL3_24GHZ))
1382 return connman_ins_settings.ins_signal_level3_24ghz;
1388 char **connman_setting_get_string_list(const char *key)
1390 if (g_str_equal(key, CONF_PREF_TIMESERVERS))
1391 return connman_settings.pref_timeservers;
1393 if (g_str_equal(key, CONF_FALLBACK_NAMESERVERS))
1394 return connman_settings.fallback_nameservers;
1396 if (g_str_equal(key, CONF_BLACKLISTED_INTERFACES))
1397 return connman_settings.blacklisted_interfaces;
1399 if (g_str_equal(key, CONF_TETHERING_TECHNOLOGIES))
1400 return connman_settings.tethering_technologies;
1402 #if defined TIZEN_EXT
1403 if (g_str_equal(key, CONF_CELLULAR_INTERFACE))
1404 return connman_settings.cellular_interfaces;
1407 #if defined TIZEN_EXT
1408 if (g_str_equal(key, CONF_INS_SECURITY_PRIORITY))
1409 return connman_ins_settings.ins_security_priority;
1415 unsigned int *connman_setting_get_uint_list(const char *key)
1417 if (g_str_equal(key, CONF_AUTO_CONNECT_TECHS))
1418 return connman_settings.auto_connect;
1420 if (g_str_equal(key, CONF_FAVORITE_TECHS))
1421 return connman_settings.favorite_techs;
1423 if (g_str_equal(key, CONF_PREFERRED_TECHS))
1424 return connman_settings.preferred_techs;
1426 if (g_str_equal(key, CONF_ALWAYS_CONNECTED_TECHS))
1427 return connman_settings.always_connected_techs;
1432 unsigned int connman_timeout_input_request(void)
1434 return connman_settings.timeout_inputreq;
1437 unsigned int connman_timeout_browser_launch(void)
1439 return connman_settings.timeout_browserlaunch;
1442 int main(int argc, char *argv[])
1444 GOptionContext *context;
1445 GError *error = NULL;
1446 DBusConnection *conn;
1450 context = g_option_context_new(NULL);
1451 g_option_context_add_main_entries(context, options, NULL);
1453 if (!g_option_context_parse(context, &argc, &argv, &error)) {
1455 g_printerr("%s\n", error->message);
1456 g_error_free(error);
1458 g_printerr("An unknown error occurred\n");
1462 g_option_context_free(context);
1464 if (option_version) {
1465 printf("%s\n", VERSION);
1469 if (option_detach) {
1471 perror("Can't start daemon");
1476 if (mkdir(STORAGEDIR, S_IRUSR | S_IWUSR | S_IXUSR |
1477 S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) < 0) {
1478 if (errno != EEXIST)
1479 perror("Failed to create storage directory");
1484 main_loop = g_main_loop_new(NULL, FALSE);
1486 signal = setup_signalfd();
1488 dbus_error_init(&err);
1490 conn = g_dbus_setup_bus(DBUS_BUS_SYSTEM, CONNMAN_SERVICE, &err);
1492 if (dbus_error_is_set(&err)) {
1493 fprintf(stderr, "%s\n", err.message);
1494 dbus_error_free(&err);
1496 fprintf(stderr, "Can't register with system bus\n");
1500 g_dbus_set_disconnect_function(conn, disconnect_callback, NULL, NULL);
1502 __connman_log_init(argv[0], option_debug, option_detach,
1503 option_backtrace, "Connection Manager", VERSION);
1505 __connman_dbus_init(conn);
1507 #if defined TIZEN_EXT
1508 if (access(CONTAINER_FILE, F_OK) == 0) {
1509 g_main_loop_run(main_loop);
1511 g_source_remove(signal);
1512 dbus_connection_unref(conn);
1513 g_main_loop_unref(main_loop);
1515 __connman_dbus_cleanup();
1516 __connman_log_cleanup(option_backtrace);
1523 config_init(CONFIGMAINFILE);
1525 config_init(option_config);
1527 __connman_util_init();
1528 __connman_inotify_init();
1529 __connman_technology_init();
1530 __connman_notifier_init();
1531 __connman_agent_init();
1532 __connman_service_init();
1533 __connman_peer_service_init();
1534 __connman_peer_init();
1535 #if defined TIZEN_EXT_WIFI_MESH
1536 __connman_mesh_init();
1537 #endif /* TIZEN_EXT_WIFI_MESH */
1538 __connman_provider_init();
1539 __connman_network_init();
1540 __connman_config_init();
1541 __connman_device_init(option_device, option_nodevice);
1543 __connman_ippool_init();
1544 __connman_firewall_init();
1545 __connman_nat_init();
1546 __connman_tethering_init();
1547 __connman_counter_init();
1548 __connman_manager_init();
1549 __connman_stats_init();
1550 __connman_clock_init();
1552 __connman_ipconfig_init();
1553 #if defined TIZEN_EXT
1554 __connman_rtnl_init(GIO_SOCKET_RETRY_COUNT);
1555 #else /* TIZEN_EXT */
1556 __connman_rtnl_init();
1557 #endif /* TIZEN_EXT */
1558 __connman_task_init();
1559 __connman_proxy_init();
1560 __connman_detect_init();
1561 __connman_session_init();
1562 __connman_timeserver_init();
1563 __connman_connection_init();
1565 __connman_plugin_init(option_plugin, option_noplugin);
1567 __connman_resolver_init(option_dnsproxy);
1568 __connman_rtnl_start();
1569 __connman_dhcp_init();
1570 __connman_dhcpv6_init();
1571 __connman_wpad_init();
1572 __connman_wispr_init();
1573 #if !defined TIZEN_EXT
1574 __connman_rfkill_init();
1575 __connman_machine_init();
1578 g_free(option_config);
1579 g_free(option_device);
1580 g_free(option_plugin);
1581 g_free(option_nodevice);
1582 g_free(option_noplugin);
1584 g_main_loop_run(main_loop);
1586 g_source_remove(signal);
1588 #if !defined TIZEN_EXT
1589 __connman_machine_cleanup();
1590 __connman_rfkill_cleanup();
1592 __connman_wispr_cleanup();
1593 __connman_wpad_cleanup();
1594 __connman_dhcpv6_cleanup();
1595 __connman_session_cleanup();
1596 __connman_plugin_cleanup();
1597 __connman_provider_cleanup();
1598 __connman_connection_cleanup();
1599 __connman_timeserver_cleanup();
1600 __connman_detect_cleanup();
1601 __connman_proxy_cleanup();
1602 __connman_task_cleanup();
1603 __connman_rtnl_cleanup();
1604 __connman_resolver_cleanup();
1606 __connman_clock_cleanup();
1607 __connman_stats_cleanup();
1608 __connman_config_cleanup();
1609 __connman_manager_cleanup();
1610 __connman_counter_cleanup();
1611 __connman_tethering_cleanup();
1612 __connman_nat_cleanup();
1613 __connman_firewall_cleanup();
1614 __connman_peer_service_cleanup();
1615 __connman_peer_cleanup();
1616 #if defined TIZEN_EXT_WIFI_MESH
1617 __connman_mesh_cleanup();
1618 #endif /* TIZEN_EXT_WIFI_MESH */
1619 __connman_ippool_cleanup();
1620 __connman_device_cleanup();
1621 __connman_network_cleanup();
1622 __connman_dhcp_cleanup();
1623 __connman_service_cleanup();
1624 __connman_agent_cleanup();
1625 __connman_ipconfig_cleanup();
1626 __connman_notifier_cleanup();
1627 __connman_technology_cleanup();
1628 __connman_inotify_cleanup();
1630 __connman_util_cleanup();
1631 __connman_dbus_cleanup();
1633 __connman_log_cleanup(option_backtrace);
1635 dbus_connection_unref(conn);
1637 g_main_loop_unref(main_loop);
1639 if (connman_settings.pref_timeservers)
1640 g_strfreev(connman_settings.pref_timeservers);
1642 g_free(connman_settings.auto_connect);
1643 g_free(connman_settings.favorite_techs);
1644 g_free(connman_settings.preferred_techs);
1645 g_strfreev(connman_settings.fallback_nameservers);
1646 g_strfreev(connman_settings.blacklisted_interfaces);
1647 g_strfreev(connman_settings.tethering_technologies);
1648 g_free(connman_settings.vendor_class_id);
1649 g_free(connman_settings.online_check_ipv4_url);
1650 g_free(connman_settings.online_check_ipv6_url);
1652 #if defined TIZEN_EXT
1653 g_free(connman_ins_settings.ins_preferred_freq_bssid);
1654 g_free(connman_ins_settings.ins_preferred_freq);
1655 if (connman_ins_settings.ins_security_priority)
1656 g_strfreev(connman_ins_settings.ins_security_priority);
1659 g_free(option_debug);
1660 g_free(option_wifi);