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,
_______________________________________________
NetworkManager-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/networkmanager-list