From 9837697e06e658e83e94e5ee7c99872d3a4969e5 Mon Sep 17 00:00:00 2001 From: Robert Love Date: Fri, 6 Jan 2006 15:39:55 +0000 Subject: [PATCH] 2006-01-06 Robert Love Patch by Timo Hoenig : * src/NetworkManagerSystem.h, src/nm-dbus-nm.c: Add interfaces to hangup specific dialup devices. * src/backends/NetworkManagerDebian.c, src/backends/NetworkManagerGentoo.c, src/backends/NetworkManagerRedHat.c, src/backends/NetworkManagerSlackware.c: Add stub backend. * src/backends/NetworkManagerRedHat.c, src/backends/NetworkManagerSuSE.c: Add specific backend interface to hangup specific dialup devices. git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@1272 4912f4e0-d625-0410-9fb7-b9a5a253dbdc --- ChangeLog | 13 ++++++++++ src/NetworkManagerSystem.h | 1 + src/backends/NetworkManagerDebian.c | 24 +++++++++++++++++ src/backends/NetworkManagerGentoo.c | 5 ++++ src/backends/NetworkManagerRedHat.c | 32 +++++++++++++++++++++++ src/backends/NetworkManagerSlackware.c | 5 ++++ src/backends/NetworkManagerSuSE.c | 33 +++++++++++++++++++++++ src/nm-dbus-nm.c | 36 +++++++++++++++++++++++++- src/nm-device-802-3-ethernet.c | 2 ++ src/nm-device-802-3-ethernet.h | 6 +++++ src/nm-netlink-monitor.c | 2 +- 11 files changed, 157 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index e3ac2d99b4..7de4eb33d4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2006-01-06 Robert Love + + Patch by Timo Hoenig : + * src/NetworkManagerSystem.h, src/nm-dbus-nm.c: Add interfaces to + hangup specific dialup devices. + * src/backends/NetworkManagerDebian.c, + src/backends/NetworkManagerGentoo.c, + src/backends/NetworkManagerRedHat.c, + src/backends/NetworkManagerSlackware.c: Add stub backend. + * src/backends/NetworkManagerRedHat.c, + src/backends/NetworkManagerSuSE.c: Add specific backend interface to + hangup specific dialup devices. + 2006-01-04 Robert Love * gnome/applet/applet-dbus-devices.c, diff --git a/src/NetworkManagerSystem.h b/src/NetworkManagerSystem.h index a18dc44e5f..29325d8235 100644 --- a/src/NetworkManagerSystem.h +++ b/src/NetworkManagerSystem.h @@ -74,6 +74,7 @@ gboolean nm_system_device_update_resolv_conf (void *data, int len, const char GSList * nm_system_get_dialup_config (void); void nm_system_deactivate_all_dialup (GSList *list); gboolean nm_system_activate_dialup (GSList *list, const char *dialup); +gboolean nm_system_deactivate_dialup (GSList *list, const char *dialup); void nm_system_activate_nis (NMIP4Config *config); void nm_system_shutdown_nis (void); diff --git a/src/backends/NetworkManagerDebian.c b/src/backends/NetworkManagerDebian.c index 7d0a1bb71d..3fde63c66d 100644 --- a/src/backends/NetworkManagerDebian.c +++ b/src/backends/NetworkManagerDebian.c @@ -653,6 +653,30 @@ void nm_system_deactivate_all_dialup (GSList *list) } } +gboolean nm_system_deactivate_dialup (GSList *list, const char *dialup) +{ + GSList *elt; + gboolean ret = FALSE; + + for (elt = list; elt; elt = g_slist_next (elt)) + { + NMDialUpConfig *config = (NMDialUpConfig *) elt->data; + if (strcmp (dialup, config->name) == 0) + { + char *cmd; + + nm_info ("Deactivating dialup device %s (%s) ...", dialup, (char *) config->data); + cmd = g_strdup_printf ("/sbin/ifdown %s", (char *) config->data); + nm_spawn_process (cmd); + g_free (cmd); + ret = TRUE; + break; + } + } + + return ret; +} + gboolean nm_system_activate_dialup (GSList *list, const char *dialup) { GSList *elt; diff --git a/src/backends/NetworkManagerGentoo.c b/src/backends/NetworkManagerGentoo.c index 754ed0910c..3ea1b0897c 100644 --- a/src/backends/NetworkManagerGentoo.c +++ b/src/backends/NetworkManagerGentoo.c @@ -510,6 +510,11 @@ void nm_system_deactivate_all_dialup (GSList *list) { } +gboolean nm_system_deactivate_dialup (GSList *list, const char *dialup) +{ + return FALSE; +} + gboolean nm_system_activate_dialup (GSList *list, const char *dialup) { return FALSE; diff --git a/src/backends/NetworkManagerRedHat.c b/src/backends/NetworkManagerRedHat.c index 2409efcf83..90c42cf863 100644 --- a/src/backends/NetworkManagerRedHat.c +++ b/src/backends/NetworkManagerRedHat.c @@ -666,6 +666,38 @@ void nm_system_deactivate_all_dialup (GSList *list) } } + +gboolean nm_system_deactivate_dialup (GSList *list, const char *dialup) +{ + GSList *l; + gboolean ret = FALSE; + + for (l = list; l; l = g_slist_next (l)) + { + NMDialUpConfig *config = (NMDialUpConfig *) l->data; + if (strcmp (dialup, config->name) == 0) + { + char *cmd; + int status; + + nm_info ("Dectivating dialup device %s (%s) ...", dialup, (char *) config->data); + cmd = g_strdup_printf ("/sbin/ifdown %s", (char *) config->data); + status = nm_spawn_process (cmd); + g_free (cmd); + if (status == 0) { + ret = TRUE; + } else { + /* FIXME: Decode errors into something sensible */ + nm_warning ("Couldn't deactivate dialup device %s (%s) - %d", dialup, (char *) config->data, status); + ret = FALSE; + } + break; + } + } + return ret; +} + + gboolean nm_system_activate_dialup (GSList *list, const char *dialup) { GSList *l; diff --git a/src/backends/NetworkManagerSlackware.c b/src/backends/NetworkManagerSlackware.c index 7f5b8610f8..aaea458731 100644 --- a/src/backends/NetworkManagerSlackware.c +++ b/src/backends/NetworkManagerSlackware.c @@ -334,6 +334,11 @@ void nm_system_deactivate_all_dialup (GSList *list) { } +gboolean nm_system_deactivate_dialup (GSList *list, const char *dialup) +{ + return FALSE; +} + gboolean nm_system_activate_dialup (GSList *list, const char *dialup) { return FALSE; diff --git a/src/backends/NetworkManagerSuSE.c b/src/backends/NetworkManagerSuSE.c index 2f7fb9ad35..e6586713b6 100644 --- a/src/backends/NetworkManagerSuSE.c +++ b/src/backends/NetworkManagerSuSE.c @@ -699,6 +699,39 @@ void nm_system_deactivate_all_dialup (GSList *list) } +gboolean nm_system_deactivate_dialup (GSList *list, const char *dialup) +{ + GSList *elt; + gboolean ret = FALSE; + + for (elt = list; elt; elt = g_slist_next (elt)) + { + NMDialUpConfig *config = (NMDialUpConfig *) elt->data; + if (strcmp (dialup, config->name) == 0) + { + char *cmd; + + nm_info ("Deactivating dialup device %s (%s) ...", dialup, (char *) config->data); + + cmd = g_strdup_printf ("/sbin/ifdown %s", (char *) config->data); + nm_spawn_process (cmd); + g_free (cmd); + + if (config->type == NM_DIALUP_TYPE_ISDN) { + cmd = g_strdup_printf ("/sbin/isdnctrl hangup %s", (char *) config->data); + nm_spawn_process (cmd); + g_free (cmd); + } + + ret = TRUE; + break; + } + } + + return ret; +} + + gboolean nm_system_activate_dialup (GSList *list, const char *dialup) { GSList *elt; diff --git a/src/nm-dbus-nm.c b/src/nm-dbus-nm.c index fc7988f6ae..08db410b92 100644 --- a/src/nm-dbus-nm.c +++ b/src/nm-dbus-nm.c @@ -177,6 +177,39 @@ out: } +static DBusMessage *nm_dbus_nm_deactivate_dialup (DBusConnection *connection, DBusMessage *message, NMDbusCBData *data) +{ + DBusMessage *reply = NULL; + NMData *nm_data = (NMData *) data->data; + const char *dialup; + + g_return_val_if_fail (data != NULL, NULL); + g_return_val_if_fail (data->data != NULL, NULL); + g_return_val_if_fail (connection != NULL, NULL); + g_return_val_if_fail (message != NULL, NULL); + + reply = dbus_message_new_method_return (message); + if (!reply) + return NULL; + + if (!dbus_message_get_args (message, NULL, DBUS_TYPE_STRING, &dialup, DBUS_TYPE_INVALID)) + { + reply = nm_dbus_create_error_message (message, NM_DBUS_INTERFACE, "InvalidArguments", + "NetworkManager::deactivateDialup called with invalid arguments."); + goto out; + } + + nm_lock_mutex (nm_data->dialup_list_mutex, __FUNCTION__); + if (!nm_system_deactivate_dialup (nm_data->dialup_list, dialup)) + reply = nm_dbus_create_error_message (message, NM_DBUS_INTERFACE, "DeactivationFailed", + "Failed to deactivate the dialup device."); + nm_unlock_mutex (nm_data->dialup_list_mutex, __FUNCTION__); + +out: + return reply; +} + + static DBusMessage *nm_dbus_nm_hangup_dialup (DBusConnection *connection, DBusMessage *message, NMDbusCBData *data) { DBusMessage *reply = NULL; @@ -611,7 +644,8 @@ NMDbusMethodList *nm_dbus_nm_methods_setup (void) nm_dbus_method_list_add_method (list, "getDevices", nm_dbus_nm_get_devices); nm_dbus_method_list_add_method (list, "getDialup", nm_dbus_nm_get_dialup); nm_dbus_method_list_add_method (list, "activateDialup", nm_dbus_nm_activate_dialup); - nm_dbus_method_list_add_method (list, "hangupDialup", nm_dbus_nm_hangup_dialup); + nm_dbus_method_list_add_method (list, "deactivateDialup", nm_dbus_nm_deactivate_dialup); + nm_dbus_method_list_add_method (list, "hangupDialup", nm_dbus_nm_hangup_dialup); nm_dbus_method_list_add_method (list, "setActiveDevice", nm_dbus_nm_set_active_device); nm_dbus_method_list_add_method (list, "createWirelessNetwork", nm_dbus_nm_create_wireless_network); nm_dbus_method_list_add_method (list, "setWirelessEnabled", nm_dbus_nm_set_wireless_enabled); diff --git a/src/nm-device-802-3-ethernet.c b/src/nm-device-802-3-ethernet.c index ae4757df67..2f07f37153 100644 --- a/src/nm-device-802-3-ethernet.c +++ b/src/nm-device-802-3-ethernet.c @@ -328,7 +328,9 @@ out: /**************************************/ /* MII capability detection */ /**************************************/ +#define _LINUX_IF_H #include +#undef _LINUX_IF_H static int mdio_read (NMDevice8023Ethernet *self, NMSock *sk, struct ifreq *ifr, int location) diff --git a/src/nm-device-802-3-ethernet.h b/src/nm-device-802-3-ethernet.h index 62d96c4b54..3360d23e92 100644 --- a/src/nm-device-802-3-ethernet.h +++ b/src/nm-device-802-3-ethernet.h @@ -29,6 +29,12 @@ #include "nm-device.h" +/* define the kernel types until mii.h and ethtool.h are fixed */ +#define u64 __u64 +#define u32 __u32 +#define u16 __u16 +#define u8 __u8 + G_BEGIN_DECLS #define NM_TYPE_DEVICE_802_3_ETHERNET (nm_device_802_3_ethernet_get_type ()) diff --git a/src/nm-netlink-monitor.c b/src/nm-netlink-monitor.c index d581e84885..c019d0c2d0 100644 --- a/src/nm-netlink-monitor.c +++ b/src/nm-netlink-monitor.c @@ -30,7 +30,7 @@ #include #include #include -#include +#include #include #include