summaryrefslogtreecommitdiff
path: root/src/nm-hal-manager.c
diff options
context:
space:
mode:
authorTambet Ingo <tambet@gmail.com>2007-11-29 14:38:07 +0000
committerTambet Ingo <tambet@gmail.com>2007-11-29 14:38:07 +0000
commitdb5a10dc4d33ebc793c21ee83e9da38e3675c132 (patch)
tree3b90c80b0bddb99b8c082eb7da95c7857cecd502 /src/nm-hal-manager.c
parentf5fb0162719b68d9c32cf82ba0af1ed82021fd86 (diff)
downloadNetworkManager-db5a10dc4d33ebc793c21ee83e9da38e3675c132.tar.gz
2007-11-28 Tambet Ingo <tambet@gmail.com>
Merge the beginnings of the new GSM card support. * src/ppp-manager/nm-ppp-manager.c (nm_ppp_manager_stop): Remove * the ppp watch source before killing pppd - If this happens from g_object_unref() then the ppp manager is already destroyed by the time the watch callback runs. * src/nm-hal-manager.c: Add a device_type_name string to the * device creators, so that we can print a nice human readable string when a device is added. * src/nm-umts-device.c (automatic_registration_get_network): * Query for the activated network, not much is done with the result thought. * src/nm-serial-device.c (nm_serial_device_get_reply): * Implement. (ppp_ip4_config): Change the device state to activated here for now. (real_check_connection): Make sure the connection includes ppp setting. * libnm-glib/nm-client.c (get_device): Handle umts devices. * libnm-glib/Makefile.am: Add the new files to build. * libnm-glib/nm-umts-device.c: * libnm-glib/nm-umts-device.h: Implement. 2007-11-26 Tambet Ingo <tambet@gmail.com> * src/nm-umts-device.c (automatic_registration_get_network): For * now, dial immediately, nm_serial_device_get_reply() isn't implemented correctly yet. * src/nm-serial-device.c (wait_for_reply_info_destroy): Don't * try to remove the timeout source - this function is only called when the timeout source has been removed. (nm_serial_device_wait_for_reply): Allocate the duplicate responses array to be big enough to contain the terminating zero element as well. The timeout argument is meant to be in seconds now. (real_deactivate_quickly): Implement. * src/NetworkManager.conf: Allow root to own "org.freedesktop.NetworkManager.PPP", deny it for everybody else. * libnm-util/nm-setting-umts.c: Network type and band properties * are ints, (not unsigned ints). * libnm-util/nm-setting-serial.c (nm_setting_serial_class_init): * Fix a small issue with parity bounds - capital letters have lower ascii codes than lower case letters. * libnm-util/nm-connection.c (register_default_settings): * Register serial and umts settings. 2007-11-22 Tambet Ingo <tambet@gmail.com> Remove the "index" property from devices as not all device types have this. * include/NetworkManager.h (NM_DBUS_PATH_DEVICE): Remove. * src/nm-hal-manager.c (nm_get_device_index_from_hal): Remove. (wired_device_creator): Get the device interface from hal to create the device. (wireless_device_creator): Ditto. * src/nm-device.c (nm_device_init): Remove the index member. (constructor): Remove the checks for index property, make interface property a require constructor property. Use the HAL udi for DBus path for devices. (nm_device_get_index): Remove. (set_property): Remove index handling. (get_property): Ditto. (nm_device_get_dbus_path): Remove. * src/nm-device-interface.c (nm_device_interface_init): Remove * the index property. * src/nm-device-802-3-ethernet.c * (nm_device_802_3_ethernet_link_activated): Access the device index through it's interface. (nm_device_802_3_ethernet_link_deactivated): Ditto. (nm_device_802_3_ethernet_new): Remove the useless argument test_dev. Remove index argument. Add interface argument. * src/nm-device-802-11-wireless.c * (nm_device_802_11_wireless_new): Remove the useless test_dev argument. Remove index argument. Add interface arugment. * src/NetworkManagerSystem.c * (nm_system_device_set_from_ip4_config): Get the device index through interface. (nm_system_set_mtu): Ditto. * introspection/nm-device.xml: Remove the "Index" property. 2007-11-21 Tambet Ingo <tambet@gmail.com> * src/nm-serial-device.c: * src/nm-serial-device.c: * src/nm-umts-device.c: * src/nm-umts-device.h: Implement. * src/nm-hal-manager.c (nm_get_device_driver_name): * libhal_free_string the string allocated by libhal. (modem_device_creator): Implement. (register_built_in_creators): Register the modem creator. * src/nm-device-802-11-wireless.c * (nm_device_802_11_wireless_new): Remove the unused test_dev argument. * src/nm-device-802-3-ethernet.c (nm_device_802_3_ethernet_new): * Ditto. * src/Makefile.am: Add new files to build. Link in ppp-manager. * libnm-util/nm-setting-umts.c: * libnm-util/nm-setting-umts.h: * libnm-util/nm-setting-serial.c: * libnm-util/nm-setting-serial.h: Implement. * libnm-util/Makefile.am: Add new files to build. git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@3116 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
Diffstat (limited to 'src/nm-hal-manager.c')
-rw-r--r--src/nm-hal-manager.c143
1 files changed, 95 insertions, 48 deletions
diff --git a/src/nm-hal-manager.c b/src/nm-hal-manager.c
index 3f63c62f1a..03def21262 100644
--- a/src/nm-hal-manager.c
+++ b/src/nm-hal-manager.c
@@ -12,6 +12,7 @@
#include "nm-utils.h"
#include "nm-device-802-11-wireless.h"
#include "nm-device-802-3-ethernet.h"
+#include "nm-umts-device.h"
/* Killswitch poll frequency in seconds */
#define NM_HAL_MANAGER_KILLSWITCH_POLL_FREQUENCY 6
@@ -33,15 +34,16 @@ struct _NMHalManager {
/* Device creators */
typedef NMDevice *(*NMDeviceCreatorFn) (NMHalManager *manager,
- const char *udi);
+ const char *udi);
typedef struct {
+ char *device_type_name;
char *capability_str;
gboolean (*is_device_fn) (NMHalManager *manager, const char *udi);
NMDeviceCreatorFn creator_fn;
} DeviceCreator;
-static NMDeviceCreatorFn
+static DeviceCreator *
get_creator (NMHalManager *manager, const char *udi)
{
DeviceCreator *creator;
@@ -51,7 +53,7 @@ get_creator (NMHalManager *manager, const char *udi)
creator = (DeviceCreator *) iter->data;
if (creator->is_device_fn (manager, udi))
- return creator->creator_fn;
+ return creator;
}
return NULL;
@@ -61,24 +63,6 @@ get_creator (NMHalManager *manager, const char *udi)
/* Common helpers for built-in device creators */
-static int
-get_device_index_from_hal (LibHalContext *ctx, const char *udi)
-{
- int idx = -1;
-
- if (libhal_device_property_exists (ctx, udi, "net.linux.ifindex", NULL) &&
- libhal_device_property_exists (ctx, udi, "info.category", NULL)) {
-
- char *category = libhal_device_get_property_string (ctx, udi, "info.category", NULL);
- if (category && (!strcmp (category, "net.80203") || !strcmp (category, "net.80211"))) {
- idx = libhal_device_get_property_int (ctx, udi, "net.linux.ifindex", NULL);
- }
- libhal_free_string (category);
- }
-
- return idx;
-}
-
static char *
nm_get_device_driver_name (LibHalContext *ctx, const char *udi)
{
@@ -89,7 +73,7 @@ nm_get_device_driver_name (LibHalContext *ctx, const char *udi)
if (physdev_udi && libhal_device_property_exists (ctx, physdev_udi, "info.linux.driver", NULL)) {
char *drv = libhal_device_get_property_string (ctx, physdev_udi, "info.linux.driver", NULL);
driver_name = g_strdup (drv);
- g_free (drv);
+ libhal_free_string (drv);
}
libhal_free_string (physdev_udi);
@@ -121,17 +105,19 @@ static NMDevice *
wired_device_creator (NMHalManager *manager, const char *udi)
{
NMDevice *device;
- int idx;
+ char *iface;
char *driver;
- idx = get_device_index_from_hal (manager->hal_ctx, udi);
- if (idx < 0) {
- nm_warning ("Couldn't get interface index for %s, ignoring.", udi);
+ iface = libhal_device_get_property_string (manager->hal_ctx, udi, "net.interface", NULL);
+ if (!iface) {
+ nm_warning ("Couldn't get interface for %s, ignoring.", udi);
return NULL;
}
driver = nm_get_device_driver_name (manager->hal_ctx, udi);
- device = (NMDevice *) nm_device_802_3_ethernet_new (idx, udi, driver, FALSE);
+ device = (NMDevice *) nm_device_802_3_ethernet_new (udi, iface, driver);
+
+ libhal_free_string (iface);
g_free (driver);
return device;
@@ -162,22 +148,70 @@ static NMDevice *
wireless_device_creator (NMHalManager *manager, const char *udi)
{
NMDevice *device;
- int idx;
+ char *iface;
char *driver;
- idx = get_device_index_from_hal (manager->hal_ctx, udi);
- if (idx < 0) {
- nm_warning ("Couldn't get interface index for %s, ignoring.", udi);
+ iface = libhal_device_get_property_string (manager->hal_ctx, udi, "net.interface", NULL);
+ if (!iface) {
+ nm_warning ("Couldn't get interface for %s, ignoring.", udi);
return NULL;
}
driver = nm_get_device_driver_name (manager->hal_ctx, udi);
- device = (NMDevice *) nm_device_802_11_wireless_new (idx, udi, driver, FALSE);
+ device = (NMDevice *) nm_device_802_11_wireless_new (udi, iface, driver);
+
+ libhal_free_string (iface);
g_free (driver);
return device;
}
+/* Modem device creator */
+
+static gboolean
+is_modem_device (NMHalManager *manager, const char *udi)
+{
+ gboolean is_modem = FALSE;
+
+ if (libhal_device_property_exists (manager->hal_ctx, udi, "info.category", NULL)) {
+ char *category;
+
+ category = libhal_device_get_property_string (manager->hal_ctx, udi, "info.category", NULL);
+ if (category) {
+ is_modem = strcmp (category, "serial") == 0;
+ libhal_free_string (category);
+ }
+ }
+
+ return is_modem;
+}
+
+NMDevice *
+modem_device_creator (NMHalManager *manager, const char *udi)
+{
+ char *serial_device;
+ char *parent_udi;
+ char *driver_name = NULL;
+ NMDevice *device = NULL;
+
+ serial_device = libhal_device_get_property_string (manager->hal_ctx, udi, "serial.device", NULL);
+
+ /* Get the driver */
+ parent_udi = libhal_device_get_property_string (manager->hal_ctx, udi, "info.parent", NULL);
+ if (parent_udi) {
+ driver_name = libhal_device_get_property_string (manager->hal_ctx, parent_udi, "info.linux.driver", NULL);
+ libhal_free_string (parent_udi);
+ }
+
+ if (serial_device && driver_name)
+ device = (NMDevice *) nm_umts_device_new (udi, serial_device + strlen ("/dev/"), driver_name);
+
+ libhal_free_string (serial_device);
+ libhal_free_string (driver_name);
+
+ return device;
+}
+
static void
register_built_in_creators (NMHalManager *manager)
{
@@ -185,6 +219,7 @@ register_built_in_creators (NMHalManager *manager)
/* Wired device */
creator = g_slice_new0 (DeviceCreator);
+ creator->device_type_name = g_strdup ("wired Ethernet (802.3)");
creator->capability_str = g_strdup ("net");
creator->is_device_fn = is_wired_device;
creator->creator_fn = wired_device_creator;
@@ -192,16 +227,25 @@ register_built_in_creators (NMHalManager *manager)
/* Wireless device */
creator = g_slice_new0 (DeviceCreator);
+ creator->device_type_name = g_strdup ("wireless (802.11)");
creator->capability_str = g_strdup ("net");
creator->is_device_fn = is_wireless_device;
creator->creator_fn = wireless_device_creator;
manager->device_creators = g_slist_append (manager->device_creators, creator);
+
+ /* Modem */
+ creator = g_slice_new0 (DeviceCreator);
+ creator->device_type_name = g_strdup ("UMTS (GSM)");
+ creator->capability_str = g_strdup ("modem");
+ creator->is_device_fn = is_modem_device;
+ creator->creator_fn = modem_device_creator;
+ manager->device_creators = g_slist_append (manager->device_creators, creator);
}
static NMDevice *
create_device_and_add_to_list (NMHalManager *manager,
- NMDeviceCreatorFn creator_fn,
- const char *udi)
+ DeviceCreator *creator,
+ const char *udi)
{
NMDevice *dev = NULL;
char *usb_test = NULL;
@@ -218,11 +262,11 @@ create_device_and_add_to_list (NMHalManager *manager,
return NULL;
}
- dev = creator_fn (manager, udi);
+ dev = creator->creator_fn (manager, udi);
if (dev) {
- nm_info ("Now managing %s device '%s'.",
- NM_IS_DEVICE_802_11_WIRELESS (dev) ? "wireless (802.11)" : "wired Ethernet (802.3)",
- nm_device_get_iface (dev));
+ nm_info ("Now managing %s device '%s'.",
+ creator->device_type_name,
+ nm_device_get_iface (dev));
nm_manager_add_device (manager->nm_manager, dev);
g_object_unref (dev);
@@ -235,7 +279,7 @@ static void
device_added (LibHalContext *ctx, const char *udi)
{
NMHalManager *manager = (NMHalManager *) libhal_ctx_get_user_data (ctx);
- NMDeviceCreatorFn creator_fn;
+ DeviceCreator *creator;
// nm_debug ("New device added (hal udi is '%s').", udi );
@@ -249,9 +293,9 @@ device_added (LibHalContext *ctx, const char *udi)
* so this call will fail, and it will actually be added when hal sets the device's
* capabilities a bit later on.
*/
- creator_fn = get_creator (manager, udi);
- if (creator_fn)
- create_device_and_add_to_list (manager, creator_fn, udi);
+ creator = get_creator (manager, udi);
+ if (creator)
+ create_device_and_add_to_list (manager, creator, udi);
}
static void
@@ -270,7 +314,7 @@ static void
device_new_capability (LibHalContext *ctx, const char *udi, const char *capability)
{
NMHalManager *manager = (NMHalManager *) libhal_ctx_get_user_data (ctx);
- NMDeviceCreatorFn creator_fn;
+ DeviceCreator *creator;
/*nm_debug ("nm_hal_device_new_capability() called with udi = %s, capability = %s", udi, capability );*/
@@ -280,9 +324,9 @@ device_new_capability (LibHalContext *ctx, const char *udi, const char *capabili
if (nm_manager_get_state (manager->nm_manager) == NM_STATE_ASLEEP)
return;
- creator_fn = get_creator (manager, udi);
- if (creator_fn)
- create_device_and_add_to_list (manager, creator_fn, udi);
+ creator = get_creator (manager, udi);
+ if (creator)
+ create_device_and_add_to_list (manager, creator, udi);
}
static void
@@ -312,7 +356,7 @@ add_initial_devices (NMHalManager *manager)
if (devices) {
for (i = 0; i < num_devices; i++) {
if (creator->is_device_fn (manager, devices[i]))
- create_device_and_add_to_list (manager, creator->creator_fn, devices[i]);
+ create_device_and_add_to_list (manager, creator, devices[i]);
}
}
@@ -671,7 +715,10 @@ nm_hal_manager_new (NMManager *nm_manager)
static void
destroy_creator (gpointer data, gpointer user_data)
{
- g_free (((DeviceCreator *) data)->capability_str);
+ DeviceCreator *creator = (DeviceCreator *) data;
+
+ g_free (creator->device_type_name);
+ g_free (creator->capability_str);
g_slice_free (DeviceCreator, data);
}