X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fmain.c;h=ac7e7f86fa60f67cd63aab762d8315727151e34e;hb=44ecadfc11389e5280fa9005c84efebb3262d765;hp=65cc9d4a5bca706cf0616c806948f2f0f7d492a6;hpb=e44c851c368936f756d1c6b9aa20d3607a4af33c;p=connman diff --git a/src/main.c b/src/main.c index 65cc9d4..ac7e7f8 100644 --- a/src/main.c +++ b/src/main.c @@ -43,6 +43,11 @@ static void sig_term(int sig) g_main_loop_quit(main_loop); } +static void sig_debug(int sig) +{ + __connman_toggle_debug(); +} + static void disconnect_callback(DBusConnection *conn, void *user_data) { DBG("D-Bus disconnect"); @@ -51,26 +56,53 @@ static void disconnect_callback(DBusConnection *conn, void *user_data) } static gchar *option_device = NULL; +static gchar *option_plugin = NULL; +static gchar *option_nodevice = NULL; +static gchar *option_noplugin = NULL; +static gchar *option_wifi = NULL; static gboolean option_detach = TRUE; -static gboolean option_selftest = FALSE; static gboolean option_compat = FALSE; static gboolean option_debug = FALSE; +static gboolean option_selftest = FALSE; +static gboolean option_version = FALSE; static GOptionEntry options[] = { { "device", 'i', 0, G_OPTION_ARG_STRING, &option_device, - "Specify network device/interface", "DEV" }, + "Specify networking device or interface", "DEV" }, + { "nodevice", 'I', 0, G_OPTION_ARG_STRING, &option_nodevice, + "Specify networking interface to ignore", "DEV" }, + { "plugin", 'p', 0, G_OPTION_ARG_STRING, &option_plugin, + "Specify plugins to load", "NAME" }, + { "noplugin", 'P', 0, G_OPTION_ARG_STRING, &option_noplugin, + "Specify plugins not to load", "NAME" }, + { "wifi", 'W', 0, G_OPTION_ARG_STRING, &option_wifi, + "Specify driver for WiFi/Supplicant", "NAME" }, { "nodaemon", 'n', G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE, &option_detach, "Don't fork daemon to background" }, - { "selftest", 't', 0, G_OPTION_ARG_NONE, &option_selftest, - "Run self testing routines" }, { "compat", 'c', 0, G_OPTION_ARG_NONE, &option_compat, "Enable Network Manager compatibility" }, { "debug", 'd', 0, G_OPTION_ARG_NONE, &option_debug, "Enable debug information output" }, + { "selftest", 't', 0, G_OPTION_ARG_NONE, &option_selftest, + "Run self testing routines" }, + { "version", 'v', 0, G_OPTION_ARG_NONE, &option_version, + "Show version information and exit" }, { NULL }, }; +const char *connman_option_get_string(const char *key) +{ + if (g_strcmp0(key, "wifi") == 0) { + if (option_wifi == NULL) + return "wext,nl80211"; + else + return option_wifi; + } + + return NULL; +} + int main(int argc, char *argv[]) { GOptionContext *context; @@ -98,6 +130,11 @@ int main(int argc, char *argv[]) g_option_context_free(context); + if (option_version == TRUE) { + printf("%s\n", VERSION); + exit(0); + } + if (option_detach == TRUE) { if (daemon(0, 0)) { perror("Can't start daemon"); @@ -105,11 +142,17 @@ int main(int argc, char *argv[]) } } - mkdir(STATEDIR, S_IRUSR | S_IWUSR | S_IXUSR | - S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH); + if (mkdir(STATEDIR, S_IRUSR | S_IWUSR | S_IXUSR | + S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) < 0) { + if (errno != EEXIST) + perror("Failed to create state directory"); + } - mkdir(STORAGEDIR, S_IRUSR | S_IWUSR | S_IXUSR | - S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH); + if (mkdir(STORAGEDIR, S_IRUSR | S_IWUSR | S_IXUSR | + S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) < 0) { + if (errno != EEXIST) + perror("Failed to create storage directory"); + } main_loop = g_main_loop_new(NULL, FALSE); @@ -153,29 +196,33 @@ int main(int argc, char *argv[]) __connman_dbus_init(conn); __connman_storage_init(); - - __connman_element_init(conn, option_device); + __connman_element_init(conn, option_device, option_nodevice); __connman_agent_init(conn); - __connman_manager_init(conn, option_compat); - __connman_profile_init(conn); + __connman_resolver_init(); __connman_rtnl_init(); __connman_udev_init(); - __connman_plugin_init(); + __connman_plugin_init(option_plugin, option_noplugin); __connman_element_start(); g_free(option_device); + g_free(option_plugin); + g_free(option_nodevice); + g_free(option_noplugin); memset(&sa, 0, sizeof(sa)); sa.sa_handler = sig_term; sigaction(SIGINT, &sa, NULL); sigaction(SIGTERM, &sa, NULL); + sa.sa_handler = sig_debug; + sigaction(SIGUSR2, &sa, NULL); + g_main_loop_run(main_loop); __connman_element_stop(); @@ -184,15 +231,13 @@ int main(int argc, char *argv[]) __connman_udev_cleanup(); __connman_rtnl_cleanup(); + __connman_resolver_cleanup(); __connman_profile_cleanup(); - __connman_manager_cleanup(); - __connman_agent_cleanup(); __connman_element_cleanup(); - __connman_storage_cleanup(); __connman_dbus_cleanup();