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;
129 int wifi_roam_min_snr;
130 int wifi_roam_min_rssi_2_4GHz;
131 int wifi_roam_min_rssi_5GHz;
132 int wifi_roam_min_rssi_6GHz;
133 int wifi_ap_selection_method;
135 } connman_settings = {
137 .pref_timeservers = NULL,
138 .auto_connect = NULL,
139 .favorite_techs = NULL,
140 .preferred_techs = NULL,
141 .always_connected_techs = NULL,
142 .fallback_nameservers = NULL,
143 .timeout_inputreq = DEFAULT_INPUT_REQUEST_TIMEOUT,
144 .timeout_browserlaunch = DEFAULT_BROWSER_LAUNCH_TIMEOUT,
145 .blacklisted_interfaces = NULL,
146 .allow_hostname_updates = true,
147 .allow_domainname_updates = true,
148 .single_tech = false,
149 .tethering_technologies = NULL,
150 .persistent_tethering_mode = false,
151 .enable_6to4 = false,
152 .vendor_class_id = NULL,
153 .enable_online_check = true,
154 .enable_online_to_ready_transition = false,
155 .online_check_ipv4_url = NULL,
156 .online_check_ipv6_url = NULL,
157 .online_check_initial_interval = DEFAULT_ONLINE_CHECK_INITIAL_INTERVAL,
158 .online_check_max_interval = DEFAULT_ONLINE_CHECK_MAX_INTERVAL,
159 .auto_connect_roaming_services = false,
161 .use_gateways_as_timeservers = false,
162 #if defined TIZEN_EXT
163 .cellular_interfaces = NULL,
164 .tizen_tv_extension = false,
166 .global_nameserver = NULL,
167 .supplicant_debug = false,
168 .def_wifi_ifname = DEFAULT_WIFI_INTERFACE,
172 .wifi_roam_scan = false,
174 .wifi_roam_min_snr = 0,
175 .wifi_roam_min_rssi_2_4GHz = 0,
176 .wifi_roam_min_rssi_5GHz = 0,
177 .wifi_roam_min_rssi_6GHz = 0,
178 .wifi_ap_selection_method = AP_SELECTION_METHOD_NORMAL,
182 #if defined TIZEN_EXT
185 char *ins_preferred_freq_bssid;
186 bool ins_last_connected_bssid;
187 bool ins_assoc_reject;
188 bool ins_signal_bssid;
189 unsigned int ins_preferred_freq_bssid_score;
190 unsigned int ins_last_connected_bssid_score;
191 unsigned int ins_assoc_reject_score;
193 bool ins_last_user_selection;
194 unsigned int ins_last_user_selection_time;
195 bool ins_last_connected;
196 char *ins_preferred_freq;
197 char **ins_security_priority;
198 unsigned int ins_security_priority_count;
201 unsigned int ins_last_user_selection_score;
202 unsigned int ins_last_connected_score;
203 unsigned int ins_preferred_freq_score;
204 unsigned int ins_security_priority_score;
205 unsigned int ins_internet_score;
207 int ins_signal_level3_5ghz;
208 int ins_signal_level3_24ghz;
209 } connman_ins_settings = {
211 .ins_preferred_freq_bssid = NULL,
212 .ins_last_connected_bssid = true,
213 .ins_assoc_reject = true,
214 .ins_signal_bssid = true,
215 .ins_preferred_freq_bssid_score = 20,
216 .ins_last_connected_bssid_score = 20,
217 .ins_assoc_reject_score = 10,
219 .ins_last_user_selection = true,
220 .ins_last_user_selection_time = 480,
221 .ins_last_connected = true,
222 .ins_preferred_freq = NULL,
223 .ins_security_priority = NULL,
224 .ins_security_priority_count = 0,
226 .ins_internet = true,
227 .ins_last_user_selection_score = 30,
228 .ins_last_connected_score = 30,
229 .ins_preferred_freq_score = 60,
230 .ins_security_priority_score = 5,
231 .ins_internet_score = 30,
233 .ins_signal_level3_5ghz = -76,
234 .ins_signal_level3_24ghz = -74,
238 #define CONF_BG_SCAN "BackgroundScanning"
239 #define CONF_PREF_TIMESERVERS "FallbackTimeservers"
240 #define CONF_AUTO_CONNECT_TECHS "DefaultAutoConnectTechnologies"
241 #define CONF_FAVORITE_TECHS "DefaultFavoriteTechnologies"
242 #define CONF_ALWAYS_CONNECTED_TECHS "AlwaysConnectedTechnologies"
243 #define CONF_PREFERRED_TECHS "PreferredTechnologies"
244 #define CONF_FALLBACK_NAMESERVERS "FallbackNameservers"
245 #define CONF_TIMEOUT_INPUTREQ "InputRequestTimeout"
246 #define CONF_TIMEOUT_BROWSERLAUNCH "BrowserLaunchTimeout"
247 #define CONF_BLACKLISTED_INTERFACES "NetworkInterfaceBlacklist"
248 #define CONF_ALLOW_HOSTNAME_UPDATES "AllowHostnameUpdates"
249 #define CONF_ALLOW_DOMAINNAME_UPDATES "AllowDomainnameUpdates"
250 #define CONF_SINGLE_TECH "SingleConnectedTechnology"
251 #define CONF_TETHERING_TECHNOLOGIES "TetheringTechnologies"
252 #define CONF_PERSISTENT_TETHERING_MODE "PersistentTetheringMode"
253 #define CONF_ENABLE_6TO4 "Enable6to4"
254 #define CONF_VENDOR_CLASS_ID "VendorClassID"
255 #define CONF_ENABLE_ONLINE_CHECK "EnableOnlineCheck"
256 #define CONF_ENABLE_ONLINE_TO_READY_TRANSITION "EnableOnlineToReadyTransition"
257 #define CONF_ONLINE_CHECK_IPV4_URL "OnlineCheckIPv4URL"
258 #define CONF_ONLINE_CHECK_IPV6_URL "OnlineCheckIPv6URL"
259 #define CONF_ONLINE_CHECK_INITIAL_INTERVAL "OnlineCheckInitialInterval"
260 #define CONF_ONLINE_CHECK_MAX_INTERVAL "OnlineCheckMaxInterval"
261 #define CONF_AUTO_CONNECT_ROAMING_SERVICES "AutoConnectRoamingServices"
262 #define CONF_ACD "AddressConflictDetection"
263 #define CONF_USE_GATEWAYS_AS_TIMESERVERS "UseGatewaysAsTimeservers"
264 #if defined TIZEN_EXT
265 #define CONF_CELLULAR_INTERFACE "NetworkCellularInterfaceList"
266 #define CONF_TIZEN_TV_EXT "TizenTVExtension"
267 #define CONF_ENABLE_AUTO_IP "EnableAutoIp"
268 #define CONF_GLOBAL_NAMESERVER "GlobalNameserver"
269 #define CONF_SUPPLICANT_DEBUG "ConnmanSupplicantDebug"
270 #define CONF_WIFI_DEF_IFNAME "DefaultWifiInterface"
271 #define CONF_FILE_LOG "FileLogging"
272 #define CONF_DLOG_LOG "DlogLogging"
273 #define CONF_SIMPLIFIED_LOG "SimplifiedLog"
274 #define CONF_WIFI_ROAM_SCAN "WifiRoamingScan"
275 #define CONF_WIFI_ROAM "WifiRoaming"
276 #define CONF_WIFI_ROAM_MIN_SNR "WifiRoamingMinSNR"
277 #define CONF_WIFI_ROAM_MIN_RSSI_2_4 "WifiRoamingMinRSSI_2_4GHz"
278 #define CONF_WIFI_ROAM_MIN_RSSI_5 "WifiRoamingMinRSSI_5GHz"
279 #define CONF_WIFI_ROAM_MIN_RSSI_6 "WifiRoamingMinRSSI_6GHz"
280 #define CONF_WIFI_AP_SELECTION_METHOD "ApSelectionMethod"
283 #if defined TIZEN_EXT
285 #define CONF_INS_PREFERRED_FREQ_BSSID "INSPreferredFreqBSSID"
286 #define CONF_INS_PREFERRED_FREQ_BSSID_SCORE "INSPreferredFreqBSSIDScore"
287 #define CONF_INS_LAST_CONNECTED_BSSID "INSLastConnectedBSSID"
288 #define CONF_INS_LAST_CONNECTED_BSSID_SCORE "INSLastConnectedBSSIDScore"
289 #define CONF_INS_ASSOC_REJECT "INSAssocReject"
290 #define CONF_INS_ASSOC_REJECT_SCORE "INSAssocRejectScore"
291 #define CONF_INS_SIGNAL_BSSID "INSSignalBSSID"
293 #define CONF_INS_LAST_USER_SELECTION "INSLastUserSelection"
294 #define CONF_INS_LAST_USER_SELECTION_TIME "INSLastUserSelectionTime"
295 #define CONF_INS_LAST_USER_SELECTION_SCORE "INSLastUserSelectionScore"
296 #define CONF_INS_LAST_CONNECTED "INSLastConnected"
297 #define CONF_INS_LAST_CONNECTED_SCORE "INSLastConnectedScore"
298 #define CONF_INS_PREFERRED_FREQ "INSPreferredFreq"
299 #define CONF_INS_PREFERRED_FREQ_SCORE "INSPreferredFreqScore"
300 #define CONF_INS_SECURITY_PRIORITY "INSSecurityPriority"
301 #define CONF_INS_SECURITY_PRIORITY_COUNT "INSSecurityPriorityCount"
302 #define CONF_INS_SECURITY_PRIORITY_SCORE "INSSecurityPriorityScore"
303 #define CONF_INS_SIGNAL "INSSignal"
304 #define CONF_INS_INTERNET "INSInternet"
305 #define CONF_INS_INTERNET_SCORE "INSInternetScore"
307 #define CONF_INS_SIGNAL_LEVEL3_5GHZ "INSSignalLevel3_5GHz"
308 #define CONF_INS_SIGNAL_LEVEL3_2_4GHZ "INSSignalLevel3_2_4GHz"
311 static const char *supported_options[] = {
313 CONF_PREF_TIMESERVERS,
314 CONF_AUTO_CONNECT_TECHS,
316 CONF_ALWAYS_CONNECTED_TECHS,
317 CONF_PREFERRED_TECHS,
318 CONF_FALLBACK_NAMESERVERS,
319 CONF_TIMEOUT_INPUTREQ,
320 CONF_TIMEOUT_BROWSERLAUNCH,
321 CONF_BLACKLISTED_INTERFACES,
322 CONF_ALLOW_HOSTNAME_UPDATES,
323 CONF_ALLOW_DOMAINNAME_UPDATES,
325 CONF_TETHERING_TECHNOLOGIES,
326 CONF_PERSISTENT_TETHERING_MODE,
328 CONF_VENDOR_CLASS_ID,
329 CONF_ENABLE_ONLINE_CHECK,
330 CONF_ENABLE_ONLINE_TO_READY_TRANSITION,
331 CONF_ONLINE_CHECK_IPV4_URL,
332 CONF_ONLINE_CHECK_IPV6_URL,
333 CONF_ONLINE_CHECK_INITIAL_INTERVAL,
334 CONF_ONLINE_CHECK_MAX_INTERVAL,
335 CONF_AUTO_CONNECT_ROAMING_SERVICES,
337 CONF_USE_GATEWAYS_AS_TIMESERVERS,
338 #if defined TIZEN_EXT
339 CONF_CELLULAR_INTERFACE,
342 CONF_GLOBAL_NAMESERVER,
343 CONF_SUPPLICANT_DEBUG,
344 CONF_WIFI_DEF_IFNAME,
350 CONF_WIFI_ROAM_MIN_SNR,
351 CONF_WIFI_ROAM_MIN_RSSI_2_4,
352 CONF_WIFI_ROAM_MIN_RSSI_5,
353 CONF_WIFI_ROAM_MIN_RSSI_6,
354 CONF_WIFI_AP_SELECTION_METHOD,
359 #if defined TIZEN_EXT
360 static const char *supported_ins_options[] = {
362 CONF_INS_PREFERRED_FREQ_BSSID,
363 CONF_INS_PREFERRED_FREQ_BSSID_SCORE,
364 CONF_INS_LAST_CONNECTED_BSSID,
365 CONF_INS_LAST_CONNECTED_BSSID_SCORE,
366 CONF_INS_ASSOC_REJECT,
367 CONF_INS_ASSOC_REJECT_SCORE,
368 CONF_INS_SIGNAL_BSSID,
370 CONF_INS_LAST_USER_SELECTION,
371 CONF_INS_LAST_USER_SELECTION_TIME,
372 CONF_INS_LAST_USER_SELECTION_SCORE,
373 CONF_INS_LAST_CONNECTED,
374 CONF_INS_LAST_CONNECTED_SCORE,
375 CONF_INS_PREFERRED_FREQ,
376 CONF_INS_PREFERRED_FREQ_SCORE,
377 CONF_INS_SECURITY_PRIORITY,
378 CONF_INS_SECURITY_PRIORITY_COUNT,
379 CONF_INS_SECURITY_PRIORITY_SCORE,
382 CONF_INS_INTERNET_SCORE,
384 CONF_INS_SIGNAL_LEVEL3_5GHZ,
385 CONF_INS_SIGNAL_LEVEL3_2_4GHZ,
390 static GKeyFile *load_config(const char *file)
395 keyfile = g_key_file_new();
397 g_key_file_set_list_separator(keyfile, ',');
399 if (!g_key_file_load_from_file(keyfile, file, 0, &err)) {
400 if (err->code != G_FILE_ERROR_NOENT) {
401 connman_error("Parsing %s failed: %s", file,
406 g_key_file_free(keyfile);
413 static uint *parse_service_types(char **str_list, gsize len)
415 unsigned int *type_list;
417 enum connman_service_type type;
419 type_list = g_try_new0(unsigned int, len + 1);
425 while (str_list[i]) {
426 type = __connman_service_string2type(str_list[i]);
428 if (type != CONNMAN_SERVICE_TYPE_UNKNOWN) {
435 type_list[j] = CONNMAN_SERVICE_TYPE_UNKNOWN;
440 static char **parse_fallback_nameservers(char **nameservers, gsize len)
445 servers = g_try_new0(char *, len + 1);
451 while (nameservers[i]) {
452 if (connman_inet_check_ipaddress(nameservers[i]) > 0) {
453 servers[j] = g_strdup(nameservers[i]);
462 static void check_config(GKeyFile *config)
470 keys = g_key_file_get_groups(config, NULL);
472 for (j = 0; keys && keys[j]; j++) {
473 #if defined TIZEN_EXT
474 if (g_strcmp0(keys[j], "General") != 0 &&
475 g_strcmp0(keys[j], "INS") != 0)
477 if (g_strcmp0(keys[j], "General") != 0)
479 connman_warn("Unknown group %s in %s",
485 keys = g_key_file_get_keys(config, "General", NULL, NULL);
487 for (j = 0; keys && keys[j]; j++) {
492 for (i = 0; supported_options[i]; i++) {
493 if (g_strcmp0(keys[j], supported_options[i]) == 0) {
498 if (!found && !supported_options[i])
499 connman_warn("Unknown option %s in %s",
505 #if defined TIZEN_EXT
506 keys = g_key_file_get_keys(config, "INS", NULL, NULL);
508 for (j = 0; keys && keys[j]; j++) {
513 for (i = 0; supported_ins_options[i]; i++) {
514 if (g_strcmp0(keys[j], supported_ins_options[i]) == 0) {
519 if (!found && !supported_ins_options[i])
520 connman_warn("Unknown option %s in %s",
528 #if defined TIZEN_EXT
529 static void check_tizen_ins_configuration(GKeyFile *config)
531 GError *error = NULL;
532 char *ins_preferred_freq_bssid;
533 char *ins_preferred_freq;
534 char **ins_security_priority;
539 ins_preferred_freq_bssid = __connman_config_get_string(config, "INS",
540 CONF_INS_PREFERRED_FREQ_BSSID, &error);
542 connman_ins_settings.ins_preferred_freq_bssid = ins_preferred_freq_bssid;
544 g_clear_error(&error);
546 integer = g_key_file_get_integer(config, "INS",
547 CONF_INS_PREFERRED_FREQ_BSSID_SCORE, &error);
548 if (!error && integer >= 0)
549 connman_ins_settings.ins_preferred_freq_bssid_score = integer;
551 g_clear_error(&error);
553 boolean = __connman_config_get_bool(config, "INS",
554 CONF_INS_LAST_CONNECTED_BSSID, &error);
556 connman_ins_settings.ins_last_connected_bssid = boolean;
558 g_clear_error(&error);
560 integer = g_key_file_get_integer(config, "INS",
561 CONF_INS_LAST_CONNECTED_BSSID_SCORE, &error);
562 if (!error && integer >= 0)
563 connman_ins_settings.ins_last_connected_bssid_score = integer;
565 g_clear_error(&error);
567 boolean = __connman_config_get_bool(config, "INS",
568 CONF_INS_ASSOC_REJECT, &error);
570 connman_ins_settings.ins_assoc_reject = boolean;
572 g_clear_error(&error);
574 integer = g_key_file_get_integer(config, "INS",
575 CONF_INS_ASSOC_REJECT_SCORE, &error);
576 if (!error && integer >= 0)
577 connman_ins_settings.ins_assoc_reject_score = integer;
579 g_clear_error(&error);
581 boolean = __connman_config_get_bool(config, "INS",
582 CONF_INS_SIGNAL_BSSID, &error);
584 connman_ins_settings.ins_signal_bssid = boolean;
586 g_clear_error(&error);
588 boolean = __connman_config_get_bool(config, "INS",
589 CONF_INS_LAST_USER_SELECTION, &error);
591 connman_ins_settings.ins_last_user_selection = boolean;
593 g_clear_error(&error);
595 integer = g_key_file_get_integer(config, "INS",
596 CONF_INS_LAST_USER_SELECTION_TIME, &error);
597 if (!error && integer >= 0)
598 connman_ins_settings.ins_last_user_selection_time = integer;
600 g_clear_error(&error);
602 integer = g_key_file_get_integer(config, "INS",
603 CONF_INS_LAST_USER_SELECTION_SCORE, &error);
604 if (!error && integer >= 0)
605 connman_ins_settings.ins_last_user_selection_score = integer;
607 g_clear_error(&error);
609 boolean = __connman_config_get_bool(config, "INS",
610 CONF_INS_LAST_CONNECTED, &error);
612 connman_ins_settings.ins_last_connected = boolean;
614 g_clear_error(&error);
616 integer = g_key_file_get_integer(config, "INS",
617 CONF_INS_LAST_CONNECTED_SCORE, &error);
618 if (!error && integer >= 0)
619 connman_ins_settings.ins_last_connected_score = integer;
621 g_clear_error(&error);
623 ins_preferred_freq = __connman_config_get_string(config, "INS",
624 CONF_INS_PREFERRED_FREQ, &error);
626 connman_ins_settings.ins_preferred_freq = ins_preferred_freq;
628 g_clear_error(&error);
630 integer = g_key_file_get_integer(config, "INS",
631 CONF_INS_PREFERRED_FREQ_SCORE, &error);
632 if (!error && integer >= 0)
633 connman_ins_settings.ins_preferred_freq_score = integer;
635 g_clear_error(&error);
637 ins_security_priority = g_key_file_get_string_list(config, "INS",
638 CONF_INS_SECURITY_PRIORITY, &len, &error);
641 connman_ins_settings.ins_security_priority = ins_security_priority;
642 connman_ins_settings.ins_security_priority_count = len;
645 g_clear_error(&error);
647 integer = g_key_file_get_integer(config, "INS",
648 CONF_INS_SECURITY_PRIORITY_SCORE, &error);
649 if (!error && integer >= 0)
650 connman_ins_settings.ins_security_priority_score = integer;
652 g_clear_error(&error);
654 boolean = __connman_config_get_bool(config, "INS",
655 CONF_INS_SIGNAL, &error);
657 connman_ins_settings.ins_signal = boolean;
659 g_clear_error(&error);
661 boolean = __connman_config_get_bool(config, "INS",
662 CONF_INS_INTERNET, &error);
664 connman_ins_settings.ins_internet = boolean;
666 g_clear_error(&error);
668 integer = g_key_file_get_integer(config, "INS",
669 CONF_INS_INTERNET_SCORE, &error);
670 if (!error && integer >= 0)
671 connman_ins_settings.ins_internet_score = integer;
673 g_clear_error(&error);
675 integer = g_key_file_get_integer(config, "INS",
676 CONF_INS_SIGNAL_LEVEL3_5GHZ, &error);
678 connman_ins_settings.ins_signal_level3_5ghz = integer;
680 g_clear_error(&error);
682 integer = g_key_file_get_integer(config, "INS",
683 CONF_INS_SIGNAL_LEVEL3_2_4GHZ, &error);
685 connman_ins_settings.ins_signal_level3_24ghz = integer;
687 g_clear_error(&error);
690 static void check_tizen_configuration(GKeyFile *config)
692 GError *error = NULL;
693 char **cellular_interfaces;
694 char *global_nameserver;
695 char *default_wifi_ifname;
700 cellular_interfaces = g_key_file_get_string_list(config, "General",
701 CONF_CELLULAR_INTERFACE, &len, &error);
704 connman_settings.cellular_interfaces = cellular_interfaces;
706 g_clear_error(&error);
708 boolean = __connman_config_get_bool(config, "General",
709 CONF_TIZEN_TV_EXT, &error);
711 connman_settings.tizen_tv_extension = boolean;
713 g_clear_error(&error);
715 boolean = __connman_config_get_bool(config, "General",
716 CONF_ENABLE_AUTO_IP, &error);
718 connman_settings.auto_ip = boolean;
720 g_clear_error(&error);
722 global_nameserver = __connman_config_get_string(config, "General",
723 CONF_GLOBAL_NAMESERVER, &error);
725 connman_settings.global_nameserver = global_nameserver;
727 g_clear_error(&error);
729 boolean = __connman_config_get_bool(config, "General",
730 CONF_SUPPLICANT_DEBUG, &error);
732 connman_settings.supplicant_debug = boolean;
734 g_clear_error(&error);
736 default_wifi_ifname = __connman_config_get_string(config, "General",
737 CONF_WIFI_DEF_IFNAME, &error);
739 connman_settings.def_wifi_ifname = default_wifi_ifname;
741 g_clear_error(&error);
743 boolean = __connman_config_get_bool(config, "General",
744 CONF_FILE_LOG, &error);
746 connman_settings.file_log = boolean;
748 g_clear_error(&error);
750 boolean = __connman_config_get_bool(config, "General",
751 CONF_DLOG_LOG, &error);
753 connman_settings.dlog_log = boolean;
755 g_clear_error(&error);
757 boolean = __connman_config_get_bool(config, "General",
758 CONF_SIMPLIFIED_LOG, &error);
760 connman_settings.simple_log = boolean;
762 g_clear_error(&error);
764 boolean = __connman_config_get_bool(config, "General",
765 CONF_WIFI_ROAM_SCAN, &error);
767 connman_settings.wifi_roam_scan = boolean;
769 g_clear_error(&error);
771 boolean = __connman_config_get_bool(config, "General",
772 CONF_WIFI_ROAM, &error);
774 connman_settings.wifi_roam = boolean;
776 g_clear_error(&error);
778 integer = g_key_file_get_integer(config, "General",
779 CONF_WIFI_ROAM_MIN_SNR, &error);
780 if (!error && integer >= 0)
781 connman_settings.wifi_roam_min_snr = integer;
783 g_clear_error(&error);
785 integer = g_key_file_get_integer(config, "General",
786 CONF_WIFI_ROAM_MIN_RSSI_2_4, &error);
788 connman_settings.wifi_roam_min_rssi_2_4GHz = integer;
790 g_clear_error(&error);
792 integer = g_key_file_get_integer(config, "General",
793 CONF_WIFI_ROAM_MIN_RSSI_5, &error);
795 connman_settings.wifi_roam_min_rssi_5GHz = integer;
797 g_clear_error(&error);
799 integer = g_key_file_get_integer(config, "General",
800 CONF_WIFI_ROAM_MIN_RSSI_6, &error);
802 connman_settings.wifi_roam_min_rssi_6GHz = integer;
804 g_clear_error(&error);
806 integer = g_key_file_get_integer(config, "General",
807 CONF_WIFI_AP_SELECTION_METHOD, &error);
809 connman_settings.wifi_ap_selection_method = integer;
811 g_clear_error(&error);
813 check_tizen_ins_configuration(config);
816 static void set_nofile_inc(void)
821 rlim.rlim_cur = 8192;
822 rlim.rlim_max = 8192;
824 err = setrlimit(RLIMIT_NOFILE, &rlim);
826 DBG("fail to increase FILENO err(%d)", err);
832 static void parse_config(GKeyFile *config)
834 GError *error = NULL;
845 connman_settings.auto_connect =
846 parse_service_types(default_auto_connect, CONF_ARRAY_SIZE(default_auto_connect));
847 connman_settings.favorite_techs =
848 parse_service_types(default_favorite_techs, CONF_ARRAY_SIZE(default_favorite_techs));
849 connman_settings.blacklisted_interfaces =
850 g_strdupv(default_blacklist);
854 DBG("parsing %s", MAINFILE);
856 boolean = g_key_file_get_boolean(config, "General",
857 CONF_BG_SCAN, &error);
859 connman_settings.bg_scan = boolean;
861 g_clear_error(&error);
863 timeservers = __connman_config_get_string_list(config, "General",
864 CONF_PREF_TIMESERVERS, NULL, &error);
866 connman_settings.pref_timeservers = timeservers;
868 g_clear_error(&error);
870 str_list = __connman_config_get_string_list(config, "General",
871 CONF_AUTO_CONNECT_TECHS, &len, &error);
874 connman_settings.auto_connect =
875 parse_service_types(str_list, len);
877 connman_settings.auto_connect =
878 parse_service_types(default_auto_connect, CONF_ARRAY_SIZE(default_auto_connect));
880 g_strfreev(str_list);
882 g_clear_error(&error);
884 str_list = __connman_config_get_string_list(config, "General",
885 CONF_FAVORITE_TECHS, &len, &error);
888 connman_settings.favorite_techs =
889 parse_service_types(str_list, len);
891 connman_settings.favorite_techs =
892 parse_service_types(default_favorite_techs, CONF_ARRAY_SIZE(default_favorite_techs));
894 g_strfreev(str_list);
896 g_clear_error(&error);
898 str_list = __connman_config_get_string_list(config, "General",
899 CONF_PREFERRED_TECHS, &len, &error);
902 connman_settings.preferred_techs =
903 parse_service_types(str_list, len);
905 g_strfreev(str_list);
907 g_clear_error(&error);
909 str_list = __connman_config_get_string_list(config, "General",
910 CONF_ALWAYS_CONNECTED_TECHS, &len, &error);
913 connman_settings.always_connected_techs =
914 parse_service_types(str_list, len);
916 g_strfreev(str_list);
918 g_clear_error(&error);
920 str_list = __connman_config_get_string_list(config, "General",
921 CONF_FALLBACK_NAMESERVERS, &len, &error);
924 connman_settings.fallback_nameservers =
925 parse_fallback_nameservers(str_list, len);
927 g_strfreev(str_list);
929 g_clear_error(&error);
931 integer = g_key_file_get_integer(config, "General",
932 CONF_TIMEOUT_INPUTREQ, &error);
933 if (!error && integer >= 0)
934 connman_settings.timeout_inputreq = integer * 1000;
936 g_clear_error(&error);
938 integer = g_key_file_get_integer(config, "General",
939 CONF_TIMEOUT_BROWSERLAUNCH, &error);
940 if (!error && integer >= 0)
941 connman_settings.timeout_browserlaunch = integer * 1000;
943 g_clear_error(&error);
945 interfaces = __connman_config_get_string_list(config, "General",
946 CONF_BLACKLISTED_INTERFACES, &len, &error);
949 connman_settings.blacklisted_interfaces = interfaces;
951 connman_settings.blacklisted_interfaces =
952 g_strdupv(default_blacklist);
954 g_clear_error(&error);
956 boolean = __connman_config_get_bool(config, "General",
957 CONF_ALLOW_HOSTNAME_UPDATES,
960 connman_settings.allow_hostname_updates = boolean;
962 g_clear_error(&error);
964 boolean = __connman_config_get_bool(config, "General",
965 CONF_ALLOW_DOMAINNAME_UPDATES,
968 connman_settings.allow_domainname_updates = boolean;
970 g_clear_error(&error);
972 boolean = __connman_config_get_bool(config, "General",
973 CONF_SINGLE_TECH, &error);
975 connman_settings.single_tech = boolean;
977 g_clear_error(&error);
979 tethering = __connman_config_get_string_list(config, "General",
980 CONF_TETHERING_TECHNOLOGIES, &len, &error);
983 connman_settings.tethering_technologies = tethering;
985 g_clear_error(&error);
987 boolean = __connman_config_get_bool(config, "General",
988 CONF_PERSISTENT_TETHERING_MODE,
991 connman_settings.persistent_tethering_mode = boolean;
993 g_clear_error(&error);
995 boolean = __connman_config_get_bool(config, "General",
996 CONF_ENABLE_6TO4, &error);
998 connman_settings.enable_6to4 = boolean;
1000 g_clear_error(&error);
1002 string = __connman_config_get_string(config, "General",
1003 CONF_VENDOR_CLASS_ID, &error);
1005 connman_settings.vendor_class_id = string;
1007 g_clear_error(&error);
1009 boolean = __connman_config_get_bool(config, "General",
1010 CONF_ENABLE_ONLINE_CHECK, &error);
1012 connman_settings.enable_online_check = boolean;
1014 connman_info("Online check disabled by main config.");
1017 g_clear_error(&error);
1019 boolean = __connman_config_get_bool(config, "General",
1020 CONF_ENABLE_ONLINE_TO_READY_TRANSITION, &error);
1022 connman_settings.enable_online_to_ready_transition = boolean;
1025 g_clear_error(&error);
1027 string = __connman_config_get_string(config, "General",
1028 CONF_ONLINE_CHECK_IPV4_URL, &error);
1030 connman_settings.online_check_ipv4_url = string;
1032 connman_settings.online_check_ipv4_url =
1033 g_strdup(DEFAULT_ONLINE_CHECK_IPV4_URL);
1035 g_clear_error(&error);
1037 string = __connman_config_get_string(config, "General",
1038 CONF_ONLINE_CHECK_IPV6_URL, &error);
1040 connman_settings.online_check_ipv6_url = string;
1042 connman_settings.online_check_ipv6_url =
1043 g_strdup(DEFAULT_ONLINE_CHECK_IPV6_URL);
1046 g_clear_error(&error);
1048 integer = g_key_file_get_integer(config, "General",
1049 CONF_ONLINE_CHECK_INITIAL_INTERVAL, &error);
1050 if (!error && integer >= 0)
1051 connman_settings.online_check_initial_interval = integer;
1053 g_clear_error(&error);
1055 integer = g_key_file_get_integer(config, "General",
1056 CONF_ONLINE_CHECK_MAX_INTERVAL, &error);
1057 if (!error && integer >= 0)
1058 connman_settings.online_check_max_interval = integer;
1060 g_clear_error(&error);
1062 if (connman_settings.online_check_initial_interval < 1 ||
1063 connman_settings.online_check_initial_interval >
1064 connman_settings.online_check_max_interval) {
1065 connman_warn("Incorrect online check intervals [%u, %u]",
1066 connman_settings.online_check_initial_interval,
1067 connman_settings.online_check_max_interval);
1068 connman_settings.online_check_initial_interval =
1069 DEFAULT_ONLINE_CHECK_INITIAL_INTERVAL;
1070 connman_settings.online_check_max_interval =
1071 DEFAULT_ONLINE_CHECK_MAX_INTERVAL;
1074 boolean = __connman_config_get_bool(config, "General",
1075 CONF_AUTO_CONNECT_ROAMING_SERVICES, &error);
1077 connman_settings.auto_connect_roaming_services = boolean;
1079 g_clear_error(&error);
1081 boolean = __connman_config_get_bool(config, "General", CONF_ACD, &error);
1083 connman_settings.acd = boolean;
1085 g_clear_error(&error);
1087 boolean = __connman_config_get_bool(config, "General",
1088 CONF_USE_GATEWAYS_AS_TIMESERVERS, &error);
1090 connman_settings.use_gateways_as_timeservers = boolean;
1092 g_clear_error(&error);
1094 #if defined TIZEN_EXT
1095 check_tizen_configuration(config);
1099 static int config_init(const char *file)
1103 #if defined TIZEN_EXT
1106 config = load_config(file);
1107 check_config(config);
1108 parse_config(config);
1110 g_key_file_free(config);
1112 #if defined TIZEN_EXT
1113 set_simple_log_option(connman_settings.simple_log);
1114 set_dlog_logging_option(connman_settings.dlog_log);
1115 set_file_logging_option(connman_settings.file_log);
1120 static GMainLoop *main_loop = NULL;
1122 static unsigned int __terminated = 0;
1124 static gboolean signal_handler(GIOChannel *channel, GIOCondition cond,
1127 struct signalfd_siginfo si;
1131 if (cond & (G_IO_NVAL | G_IO_ERR | G_IO_HUP))
1134 fd = g_io_channel_unix_get_fd(channel);
1136 result = read(fd, &si, sizeof(si));
1137 if (result != sizeof(si))
1140 switch (si.ssi_signo) {
1143 if (__terminated == 0) {
1144 connman_info("Terminating");
1145 g_main_loop_quit(main_loop);
1155 static guint setup_signalfd(void)
1157 GIOChannel *channel;
1163 sigaddset(&mask, SIGINT);
1164 sigaddset(&mask, SIGTERM);
1166 if (sigprocmask(SIG_BLOCK, &mask, NULL) < 0) {
1167 perror("Failed to set signal mask");
1171 fd = signalfd(-1, &mask, 0);
1173 perror("Failed to create signal descriptor");
1177 channel = g_io_channel_unix_new(fd);
1179 g_io_channel_set_close_on_unref(channel, TRUE);
1180 g_io_channel_set_encoding(channel, NULL, NULL);
1181 g_io_channel_set_buffered(channel, FALSE);
1183 source = g_io_add_watch(channel,
1184 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL,
1185 signal_handler, NULL);
1187 g_io_channel_unref(channel);
1192 static void disconnect_callback(DBusConnection *conn, void *user_data)
1194 connman_error("D-Bus disconnect");
1196 g_main_loop_quit(main_loop);
1199 static gchar *option_config = NULL;
1200 static gchar *option_debug = NULL;
1201 static gchar *option_device = NULL;
1202 static gchar *option_plugin = NULL;
1203 static gchar *option_nodevice = NULL;
1204 static gchar *option_noplugin = NULL;
1205 static gchar *option_wifi = NULL;
1206 static gboolean option_detach = TRUE;
1207 static gboolean option_dnsproxy = TRUE;
1208 static gboolean option_backtrace = TRUE;
1209 static gboolean option_version = FALSE;
1211 static bool parse_debug(const char *key, const char *value,
1212 gpointer user_data, GError **error)
1216 char *prev = option_debug;
1218 option_debug = g_strconcat(prev, ",", value, NULL);
1221 option_debug = g_strdup(value);
1224 g_free(option_debug);
1225 option_debug = g_strdup("*");
1231 static bool parse_noplugin(const char *key, const char *value,
1232 gpointer user_data, GError **error)
1234 if (option_noplugin) {
1235 char *prev = option_noplugin;
1237 option_noplugin = g_strconcat(prev, ",", value, NULL);
1240 option_noplugin = g_strdup(value);
1246 static GOptionEntry options[] = {
1247 { "config", 'c', 0, G_OPTION_ARG_STRING, &option_config,
1248 "Load the specified configuration file "
1249 "instead of " CONFIGMAINFILE, "FILE" },
1250 { "debug", 'd', G_OPTION_FLAG_OPTIONAL_ARG,
1251 G_OPTION_ARG_CALLBACK, parse_debug,
1252 "Specify debug options to enable", "DEBUG" },
1253 { "device", 'i', 0, G_OPTION_ARG_STRING, &option_device,
1254 "Specify networking devices or interfaces", "DEV,..." },
1255 { "nodevice", 'I', 0, G_OPTION_ARG_STRING, &option_nodevice,
1256 "Specify networking interfaces to ignore", "DEV,..." },
1257 { "plugin", 'p', 0, G_OPTION_ARG_STRING, &option_plugin,
1258 "Specify plugins to load", "NAME,..." },
1259 { "noplugin", 'P', 0, G_OPTION_ARG_CALLBACK, &parse_noplugin,
1260 "Specify plugins not to load", "NAME,..." },
1261 { "wifi", 'W', 0, G_OPTION_ARG_STRING, &option_wifi,
1262 "Specify driver for WiFi/Supplicant", "NAME" },
1263 { "nodaemon", 'n', G_OPTION_FLAG_REVERSE,
1264 G_OPTION_ARG_NONE, &option_detach,
1265 "Don't fork daemon to background" },
1266 { "nodnsproxy", 'r', G_OPTION_FLAG_REVERSE,
1267 G_OPTION_ARG_NONE, &option_dnsproxy,
1268 "Don't support DNS resolving" },
1269 { "nobacktrace", 0, G_OPTION_FLAG_REVERSE,
1270 G_OPTION_ARG_NONE, &option_backtrace,
1271 "Don't print out backtrace information" },
1272 { "version", 'v', 0, G_OPTION_ARG_NONE, &option_version,
1273 "Show version information and exit" },
1277 char *connman_setting_get_string(const char *key)
1279 if (g_str_equal(key, CONF_VENDOR_CLASS_ID))
1280 return connman_settings.vendor_class_id;
1282 if (g_str_equal(key, CONF_ONLINE_CHECK_IPV4_URL))
1283 return connman_settings.online_check_ipv4_url;
1285 if (g_str_equal(key, CONF_ONLINE_CHECK_IPV6_URL))
1286 return connman_settings.online_check_ipv6_url;
1288 if (g_strcmp0(key, "wifi") == 0) {
1290 return "nl80211,wext";
1295 #if defined TIZEN_EXT
1296 if (g_str_equal(key, CONF_GLOBAL_NAMESERVER))
1297 return connman_settings.global_nameserver;
1299 if (g_str_equal(key, CONF_INS_PREFERRED_FREQ_BSSID))
1300 return connman_ins_settings.ins_preferred_freq_bssid;
1302 if (g_str_equal(key, CONF_INS_PREFERRED_FREQ))
1303 return connman_ins_settings.ins_preferred_freq;
1305 if (g_str_equal(key, CONF_WIFI_DEF_IFNAME))
1306 return connman_settings.def_wifi_ifname;
1311 bool connman_setting_get_bool(const char *key)
1313 if (g_str_equal(key, CONF_BG_SCAN))
1314 return connman_settings.bg_scan;
1316 if (g_str_equal(key, CONF_ALLOW_HOSTNAME_UPDATES))
1317 return connman_settings.allow_hostname_updates;
1319 if (g_str_equal(key, CONF_ALLOW_DOMAINNAME_UPDATES))
1320 return connman_settings.allow_domainname_updates;
1322 if (g_str_equal(key, CONF_SINGLE_TECH))
1323 return connman_settings.single_tech;
1325 if (g_str_equal(key, CONF_PERSISTENT_TETHERING_MODE))
1326 return connman_settings.persistent_tethering_mode;
1328 if (g_str_equal(key, CONF_ENABLE_6TO4))
1329 return connman_settings.enable_6to4;
1331 if (g_str_equal(key, CONF_ENABLE_ONLINE_CHECK))
1332 return connman_settings.enable_online_check;
1334 if (g_str_equal(key, CONF_ENABLE_ONLINE_TO_READY_TRANSITION))
1335 return connman_settings.enable_online_to_ready_transition;
1337 if (g_str_equal(key, CONF_AUTO_CONNECT_ROAMING_SERVICES))
1338 return connman_settings.auto_connect_roaming_services;
1340 if (g_str_equal(key, CONF_ACD))
1341 return connman_settings.acd;
1343 if (g_str_equal(key, CONF_USE_GATEWAYS_AS_TIMESERVERS))
1344 return connman_settings.use_gateways_as_timeservers;
1346 #if defined TIZEN_EXT
1347 if (g_str_equal(key, CONF_ENABLE_AUTO_IP))
1348 return connman_settings.auto_ip;
1350 if (g_str_equal(key, CONF_SUPPLICANT_DEBUG))
1351 return connman_settings.supplicant_debug;
1353 if (g_str_equal(key, CONF_FILE_LOG))
1354 return connman_settings.file_log;
1356 if (g_str_equal(key, CONF_DLOG_LOG))
1357 return connman_settings.dlog_log;
1359 if (g_str_equal(key, CONF_SIMPLIFIED_LOG))
1360 return connman_settings.simple_log;
1362 if (g_str_equal(key, CONF_WIFI_ROAM_SCAN))
1363 return connman_settings.wifi_roam_scan;
1365 if (g_str_equal(key, CONF_WIFI_ROAM))
1366 return connman_settings.wifi_roam;
1368 if (g_str_equal(key, CONF_INS_LAST_CONNECTED_BSSID))
1369 return connman_ins_settings.ins_last_connected_bssid;
1371 if (g_str_equal(key, CONF_INS_ASSOC_REJECT))
1372 return connman_ins_settings.ins_assoc_reject;
1374 if (g_str_equal(key, CONF_INS_SIGNAL_BSSID))
1375 return connman_ins_settings.ins_signal_bssid;
1377 if (g_str_equal(key, CONF_INS_LAST_USER_SELECTION))
1378 return connman_ins_settings.ins_last_user_selection;
1380 if (g_str_equal(key, CONF_INS_LAST_CONNECTED))
1381 return connman_ins_settings.ins_last_connected;
1383 if (g_str_equal(key, CONF_INS_SIGNAL))
1384 return connman_ins_settings.ins_signal;
1386 if (g_str_equal(key, CONF_INS_INTERNET))
1387 return connman_ins_settings.ins_internet;
1393 unsigned int connman_setting_get_uint(const char *key)
1395 if (g_str_equal(key, CONF_ONLINE_CHECK_INITIAL_INTERVAL))
1396 return connman_settings.online_check_initial_interval;
1398 if (g_str_equal(key, CONF_ONLINE_CHECK_MAX_INTERVAL))
1399 return connman_settings.online_check_max_interval;
1401 #if defined TIZEN_EXT
1402 if (g_str_equal(key, CONF_INS_PREFERRED_FREQ_BSSID_SCORE))
1403 return connman_ins_settings.ins_preferred_freq_bssid_score;
1405 if (g_str_equal(key, CONF_INS_LAST_CONNECTED_BSSID_SCORE))
1406 return connman_ins_settings.ins_last_connected_bssid_score;
1408 if (g_str_equal(key, CONF_INS_ASSOC_REJECT_SCORE))
1409 return connman_ins_settings.ins_assoc_reject_score;
1411 if (g_str_equal(key, CONF_INS_LAST_USER_SELECTION_TIME))
1412 return connman_ins_settings.ins_last_user_selection_time;
1414 if (g_str_equal(key, CONF_INS_SECURITY_PRIORITY_COUNT))
1415 return connman_ins_settings.ins_security_priority_count;
1417 if (g_str_equal(key, CONF_INS_LAST_USER_SELECTION_SCORE))
1418 return connman_ins_settings.ins_last_user_selection_score;
1420 if (g_str_equal(key, CONF_INS_LAST_CONNECTED_SCORE))
1421 return connman_ins_settings.ins_last_connected_score;
1423 if (g_str_equal(key, CONF_INS_PREFERRED_FREQ_SCORE))
1424 return connman_ins_settings.ins_preferred_freq_score;
1426 if (g_str_equal(key, CONF_INS_SECURITY_PRIORITY_SCORE))
1427 return connman_ins_settings.ins_security_priority_score;
1429 if (g_str_equal(key, CONF_INS_INTERNET_SCORE))
1430 return connman_ins_settings.ins_internet_score;
1435 #if defined TIZEN_EXT
1436 int connman_setting_get_int(const char *key)
1438 if (g_str_equal(key, CONF_WIFI_AP_SELECTION_METHOD))
1439 return connman_settings.wifi_ap_selection_method;
1441 if (g_str_equal(key, CONF_INS_SIGNAL_LEVEL3_5GHZ))
1442 return connman_ins_settings.ins_signal_level3_5ghz;
1444 if (g_str_equal(key, CONF_INS_SIGNAL_LEVEL3_2_4GHZ))
1445 return connman_ins_settings.ins_signal_level3_24ghz;
1447 if (g_str_equal(key, CONF_WIFI_ROAM_MIN_SNR))
1448 return connman_settings.wifi_roam_min_snr;
1450 if (g_str_equal(key, CONF_WIFI_ROAM_MIN_RSSI_2_4))
1451 return connman_settings.wifi_roam_min_rssi_2_4GHz;
1453 if (g_str_equal(key, CONF_WIFI_ROAM_MIN_RSSI_5))
1454 return connman_settings.wifi_roam_min_rssi_5GHz;
1456 if (g_str_equal(key, CONF_WIFI_ROAM_MIN_RSSI_6))
1457 return connman_settings.wifi_roam_min_rssi_6GHz;
1463 char **connman_setting_get_string_list(const char *key)
1465 if (g_str_equal(key, CONF_PREF_TIMESERVERS))
1466 return connman_settings.pref_timeservers;
1468 if (g_str_equal(key, CONF_FALLBACK_NAMESERVERS))
1469 return connman_settings.fallback_nameservers;
1471 if (g_str_equal(key, CONF_BLACKLISTED_INTERFACES))
1472 return connman_settings.blacklisted_interfaces;
1474 if (g_str_equal(key, CONF_TETHERING_TECHNOLOGIES))
1475 return connman_settings.tethering_technologies;
1477 #if defined TIZEN_EXT
1478 if (g_str_equal(key, CONF_CELLULAR_INTERFACE))
1479 return connman_settings.cellular_interfaces;
1482 #if defined TIZEN_EXT
1483 if (g_str_equal(key, CONF_INS_SECURITY_PRIORITY))
1484 return connman_ins_settings.ins_security_priority;
1490 unsigned int *connman_setting_get_uint_list(const char *key)
1492 if (g_str_equal(key, CONF_AUTO_CONNECT_TECHS))
1493 return connman_settings.auto_connect;
1495 if (g_str_equal(key, CONF_FAVORITE_TECHS))
1496 return connman_settings.favorite_techs;
1498 if (g_str_equal(key, CONF_PREFERRED_TECHS))
1499 return connman_settings.preferred_techs;
1501 if (g_str_equal(key, CONF_ALWAYS_CONNECTED_TECHS))
1502 return connman_settings.always_connected_techs;
1507 unsigned int connman_timeout_input_request(void)
1509 return connman_settings.timeout_inputreq;
1512 unsigned int connman_timeout_browser_launch(void)
1514 return connman_settings.timeout_browserlaunch;
1517 int main(int argc, char *argv[])
1519 GOptionContext *context;
1520 GError *error = NULL;
1521 DBusConnection *conn;
1525 context = g_option_context_new(NULL);
1526 g_option_context_add_main_entries(context, options, NULL);
1528 if (!g_option_context_parse(context, &argc, &argv, &error)) {
1530 g_printerr("%s\n", error->message);
1531 g_error_free(error);
1533 g_printerr("An unknown error occurred\n");
1537 g_option_context_free(context);
1539 if (option_version) {
1540 printf("%s\n", VERSION);
1544 if (option_detach) {
1546 perror("Can't start daemon");
1551 if (mkdir(STORAGEDIR, S_IRUSR | S_IWUSR | S_IXUSR |
1552 S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) < 0) {
1553 if (errno != EEXIST)
1554 perror("Failed to create storage directory");
1559 main_loop = g_main_loop_new(NULL, FALSE);
1561 signal = setup_signalfd();
1563 dbus_error_init(&err);
1565 conn = g_dbus_setup_bus(DBUS_BUS_SYSTEM, CONNMAN_SERVICE, &err);
1567 if (dbus_error_is_set(&err)) {
1568 fprintf(stderr, "%s\n", err.message);
1569 dbus_error_free(&err);
1571 fprintf(stderr, "Can't register with system bus\n");
1575 g_dbus_set_disconnect_function(conn, disconnect_callback, NULL, NULL);
1577 __connman_log_init(argv[0], option_debug, option_detach,
1578 option_backtrace, "Connection Manager", VERSION);
1580 __connman_dbus_init(conn);
1582 #if defined TIZEN_EXT
1583 if (access(CONTAINER_FILE, F_OK) == 0) {
1584 g_main_loop_run(main_loop);
1586 g_source_remove(signal);
1587 dbus_connection_unref(conn);
1588 g_main_loop_unref(main_loop);
1590 __connman_dbus_cleanup();
1591 __connman_log_cleanup(option_backtrace);
1598 config_init(CONFIGMAINFILE);
1600 config_init(option_config);
1602 __connman_util_init();
1603 __connman_inotify_init();
1604 __connman_technology_init();
1605 __connman_notifier_init();
1606 __connman_agent_init();
1607 __connman_service_init();
1608 __connman_peer_service_init();
1609 __connman_peer_init();
1610 #if defined TIZEN_EXT_WIFI_MESH
1611 __connman_mesh_init();
1612 #endif /* TIZEN_EXT_WIFI_MESH */
1613 __connman_provider_init();
1614 __connman_network_init();
1615 __connman_config_init();
1616 __connman_device_init(option_device, option_nodevice);
1618 __connman_ippool_init();
1619 __connman_firewall_init();
1620 __connman_nat_init();
1621 __connman_tethering_init();
1622 __connman_counter_init();
1623 __connman_manager_init();
1624 __connman_stats_init();
1625 __connman_clock_init();
1627 __connman_ipconfig_init();
1628 #if defined TIZEN_EXT
1629 __connman_rtnl_init(GIO_SOCKET_RETRY_COUNT);
1630 #else /* TIZEN_EXT */
1631 __connman_rtnl_init();
1632 #endif /* TIZEN_EXT */
1633 __connman_task_init();
1634 __connman_proxy_init();
1635 __connman_detect_init();
1636 __connman_session_init();
1637 __connman_timeserver_init();
1638 __connman_connection_init();
1640 __connman_plugin_init(option_plugin, option_noplugin);
1642 __connman_resolver_init(option_dnsproxy);
1643 __connman_rtnl_start();
1644 __connman_dhcp_init();
1645 __connman_dhcpv6_init();
1646 __connman_wpad_init();
1647 __connman_wispr_init();
1648 #if !defined TIZEN_EXT
1649 __connman_rfkill_init();
1650 __connman_machine_init();
1653 g_free(option_config);
1654 g_free(option_device);
1655 g_free(option_plugin);
1656 g_free(option_nodevice);
1657 g_free(option_noplugin);
1659 g_main_loop_run(main_loop);
1661 g_source_remove(signal);
1663 #if !defined TIZEN_EXT
1664 __connman_machine_cleanup();
1665 __connman_rfkill_cleanup();
1667 __connman_wispr_cleanup();
1668 __connman_wpad_cleanup();
1669 __connman_dhcpv6_cleanup();
1670 __connman_session_cleanup();
1671 __connman_plugin_cleanup();
1672 __connman_provider_cleanup();
1673 __connman_connection_cleanup();
1674 __connman_timeserver_cleanup();
1675 __connman_detect_cleanup();
1676 __connman_proxy_cleanup();
1677 __connman_task_cleanup();
1678 __connman_rtnl_cleanup();
1679 __connman_resolver_cleanup();
1681 __connman_clock_cleanup();
1682 __connman_stats_cleanup();
1683 __connman_config_cleanup();
1684 __connman_manager_cleanup();
1685 __connman_counter_cleanup();
1686 __connman_tethering_cleanup();
1687 __connman_nat_cleanup();
1688 __connman_firewall_cleanup();
1689 __connman_peer_service_cleanup();
1690 __connman_peer_cleanup();
1691 #if defined TIZEN_EXT_WIFI_MESH
1692 __connman_mesh_cleanup();
1693 #endif /* TIZEN_EXT_WIFI_MESH */
1694 __connman_ippool_cleanup();
1695 __connman_device_cleanup();
1696 __connman_network_cleanup();
1697 __connman_dhcp_cleanup();
1698 __connman_service_cleanup();
1699 __connman_agent_cleanup();
1700 __connman_ipconfig_cleanup();
1701 __connman_notifier_cleanup();
1702 __connman_technology_cleanup();
1703 __connman_inotify_cleanup();
1705 __connman_util_cleanup();
1706 __connman_dbus_cleanup();
1708 __connman_log_cleanup(option_backtrace);
1710 dbus_connection_unref(conn);
1712 g_main_loop_unref(main_loop);
1714 if (connman_settings.pref_timeservers)
1715 g_strfreev(connman_settings.pref_timeservers);
1717 g_free(connman_settings.auto_connect);
1718 g_free(connman_settings.favorite_techs);
1719 g_free(connman_settings.preferred_techs);
1720 g_strfreev(connman_settings.fallback_nameservers);
1721 g_strfreev(connman_settings.blacklisted_interfaces);
1722 g_strfreev(connman_settings.tethering_technologies);
1723 g_free(connman_settings.vendor_class_id);
1724 g_free(connman_settings.online_check_ipv4_url);
1725 g_free(connman_settings.online_check_ipv6_url);
1727 #if defined TIZEN_EXT
1728 g_free(connman_ins_settings.ins_preferred_freq_bssid);
1729 g_free(connman_ins_settings.ins_preferred_freq);
1730 if (connman_ins_settings.ins_security_priority)
1731 g_strfreev(connman_ins_settings.ins_security_priority);
1734 g_free(option_debug);
1735 g_free(option_wifi);