NetworkManager on Debian
- From: Hristo Hristov <xpertbg gmail com>
- To: networkmanager-list gnome org
- Subject: NetworkManager on Debian
- Date: Thu, 1 May 2008 14:27:10 +0300
Hello,
I was trying to make NM work with Debian with the help of Michael
Biebl. I found several issues:
1) When the nm-system-settings was not working (because of missing configuration
file) the gnome applet was not showing when a wired network was enabled in the
left-click menu, and I could not get network information from the right-click menu.
Is this expected behaviour?
2) NM 0.7 doesn't seem to use the configuration of wireless networks I had from 0.6
3) I'm trying to make NM work with resolvconf. I want to pass DNS configurations
received from DHCP to the dispatcher and then to the dispatcher script. I have no
knowledge of dbus, so I made an ugly patch to pass the first nameserver configuration.
Could you tell me what should be the correct way of passing the nameservers
to the dispatcher?
Best regards,
Hristo
Index: callouts/nm-dispatcher-action.h
===================================================================
--- callouts/nm-dispatcher-action.h (revision 3624)
+++ callouts/nm-dispatcher-action.h (working copy)
@@ -32,4 +32,5 @@
#define NMD_DEVICE_PROPS_TYPE "type"
#define NMD_DEVICE_PROPS_STATE "state"
#define NMD_DEVICE_PROPS_PATH "path"
+#define NMD_DEVICE_PROPS_DNS_NAMESERVERS "nameservers"
Index: callouts/nm-dispatcher-action.c
===================================================================
--- callouts/nm-dispatcher-action.c (revision 3624)
+++ callouts/nm-dispatcher-action.c (working copy)
@@ -218,12 +218,19 @@
dispatch_scripts (const char *action,
const char *iface,
const char *parent_iface,
- NMDeviceType type)
+ NMDeviceType type,
+ guint32 nameservers)
{
GDir *dir;
const char *filename;
GSList *scripts = NULL, *iter;
GError *error = NULL;
+ char sz_nameservers[20];
+ sprintf( sz_nameservers, "%u.%u.%u.%u",
+ (int)(nameservers&0xFF),
+ (int)((nameservers >> 8)&0xFF),
+ (int)((nameservers >> 16)&0xFF),
+ (int)((nameservers >> 24)&0xFF) );
if (!(dir = g_dir_open (NMD_SCRIPT_DIR, 0, &error))) {
g_warning ("g_dir_open() could not open '" NMD_SCRIPT_DIR "'. '%s'",
@@ -262,14 +269,15 @@
g_dir_close (dir);
for (iter = scripts; iter; iter = g_slist_next (iter)) {
- gchar *argv[4];
+ gchar *argv[5];
gchar *envp[1] = { NULL };
gint status = -1;
argv[0] = (char *) iter->data;
argv[1] = (char *) iface;
argv[2] = (char *) action;
- argv[3] = NULL;
+ argv[3] = (char *) sz_nameservers;
+ argv[4] = NULL;
error = NULL;
if (g_spawn_sync ("/", argv, envp, 0, child_setup, NULL, NULL, NULL, &status, &error)) {
@@ -304,6 +312,7 @@
char *parent_iface = NULL;
NMDeviceType type = DEVICE_TYPE_UNKNOWN;
GValue *value;
+ guint32 nameservers = 0;
/* Back off the quit timeout */
if (d->quit_timeout)
@@ -341,8 +350,13 @@
}
type = g_value_get_uint (value);
- dispatch_scripts (action, iface, parent_iface, type);
+ value = g_hash_table_lookup (device_props, NMD_DEVICE_PROPS_DNS_NAMESERVERS);
+ if (value && G_VALUE_HOLDS_UINT (value)) {
+ nameservers = g_value_get_uint (value);
+ }
+ dispatch_scripts (action, iface, parent_iface, type, nameservers);
+
out:
return TRUE;
}
Index: src/NetworkManagerUtils.c
===================================================================
--- src/NetworkManagerUtils.c (revision 3624)
+++ src/NetworkManagerUtils.c (working copy)
@@ -354,6 +354,8 @@
GHashTable *connection_hash;
GHashTable *connection_props;
GHashTable *device_props;
+ NMIP4Config *config = NULL;
+ guint32 num_nameservers = 0;
g_return_if_fail (action != NULL);
g_return_if_fail (NM_IS_DEVICE (device));
@@ -423,6 +425,12 @@
g_hash_table_insert (device_props, NMD_DEVICE_PROPS_PATH,
op_to_gvalue (nm_device_get_udi (device)));
+ config = nm_device_get_ip4_config (device);
+ num_nameservers = nm_ip4_config_get_num_nameservers (config);
+ if ( num_nameservers > 0 )
+ g_hash_table_insert (device_props, NMD_DEVICE_PROPS_DNS_NAMESERVERS,
+ uint_to_gvalue (nm_ip4_config_get_nameserver(config, 0)));
+
dbus_g_proxy_call_no_reply (proxy, "Action",
G_TYPE_STRING, action,
DBUS_TYPE_G_MAP_OF_MAP_OF_VARIANT, connection_hash,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]