Hi,
i have finally 100% working patch (include info in log) ;)
Dan Williams píše v Po 11. 06. 2007 v 21:57 -0400:
> On Fri, 2007-06-08 at 09:36 +0200, Blonďák wrote:
> > Hi,
> > after small fix it works, here is working version, but i have small
> > question.
> > Don't you have idea why this doesn't work?
> >
> > nm_info (" static route %s gw %s", inet_ntoa(temp_route.host),
> > inet_ntoa(temp_route.gw));
> >
> > it output host IP address twice instead of host and gw ip address, code
> > bellow works without problem.
> >
> > nm_info (" static route %s", inet_ntoa(temp_route.host));
> > nm_info (" gw %s", inet_ntoa(temp_route.gw));
>
> Probably because inet_ntoa() uses a static buffer, and compiler
> instruction ordering may not guarantee what gets called when within the
> same statement, because neither of those really have side-effects. Just
> a guess.
>
> You should probably use inet_ntop() instead here, with two different
> static buffers, one for the host and one for the gw. Something like the
> following would probably do it better:
>
> -------------------------------
>
> #define BUFSIZE 50
> char buf1[BUFSIZE];
> char buf2[BUFSIZE];
> char * ret;
> struct in_addr addr;
>
> addr.s_addr = temp_route.host;
> ret = inet_ntop (AF_INET, &addr, &buf1, BUFSIZE);
> if (!ret)
> goto error;
>
> addr.s_addr = temp_route.gw;
> ret = inet_ntop (AF_INET, &addr, &buf2, BUFSIZE);
> if (!ret)
> goto error;
>
> nm_info (" static route %s gw %s", buf1, buf2);
>
> ------------------------------
>
> Dan
>
> >
> > with regards
> >
> > Blondak
> >
> > Dan Williams píše v Čt 07. 06. 2007 v 16:29 -0400:
> > > On Thu, 2007-06-07 at 22:17 +0200, Blonďák wrote:
> > > > I update the patch code using your comments, but i am not able test it
> > > > right now, i will test it tomorrow.
> > >
> > > Looks better, thanks. Let me know if the test works and then I'll be
> > > happy to apply it.
> > >
> > > Thanks,
> > > Dan
> > >
> > > > Blondak
> > > >
> > > >
> > > > Dan Williams píše v Čt 07. 06. 2007 v 13:01 -0400:
> > > > > On Thu, 2007-06-07 at 15:12 +0200, Blonďák wrote:
> > > > > > Hi,
> > > > > > i wrote patch for NetworkManager for support static-routes from DHCP
> > > > > > (033).
> > > > >
> > > > > Nice! A few comments...
> > > > >
> > > > > - instead of doing "(*temp_route).host", just use "temp_route->host".
> > > > > That shows up in a few places.
> > > > >
> > > > > - do static routes -always- have a netmask of 0xffffffff?
> > > > >
> > > > > - I'd prefer to have the nm_ip4_config_add_static_route() function
> > > > > _copy_ the NMIP4Route structure and append it to the list. The
> > > > > NMIP4Config should also free any NMIP4Route structures that it has
> > > > > references to when it is destroyed. Once you've done this don't forget
> > > > > to free the malloc-ed NMIP4Route structure too. Also please check for a
> > > > > NULL return value after the malloc and print out a warning and break out
> > > > > of the for() loop. Should also check for NULL return from the g_malloc0
> > > > > when you add that to nm_ip4_config_add_static_route and return.
> > > > >
> > > > > - There are some spaces after the ( in nm_ip4_config_add_static_route():
> > > > > + g_return_if_fail ( config != NULL);
> > > > >
> > > > > Thanks!
> > > > > Dan
> > > > >
> > > > > > With regards
> > > > > >
> > > > > > Blondak
> > > > > >
> > > > > >
> > > > > > _______________________________________________
> > > > > > NetworkManager-list mailing list
> > > > > > NetworkManager-list gnome org
> > > > > > http://mail.gnome.org/mailman/listinfo/networkmanager-list
> > > > >
> > >
>
diff -bBru NetworkManager-0.6.5/src/dhcp-manager/nm-dhcp-manager.c NetworkManager-0.6.5-blondak/src/dhcp-manager/nm-dhcp-manager.c
--- NetworkManager-0.6.5/src/dhcp-manager/nm-dhcp-manager.c 2007-04-18 20:13:04.000000000 +0200
+++ NetworkManager-0.6.5-blondak/src/dhcp-manager/nm-dhcp-manager.c 2007-06-12 15:53:15.000000000 +0200
@@ -468,13 +468,18 @@
guint32 * ip4_broadcast = NULL;
guint32 * ip4_nameservers = NULL;
guint32 * ip4_gateway = NULL;
+ guint32 num_ip4_static_routes = 0;
guint32 num_ip4_nameservers = 0;
guint32 num_ip4_nis_servers = 0;
char * hostname = NULL;
char * domain_names = NULL;
char * nis_domain = NULL;
guint32 * ip4_nis_servers = NULL;
+ guint32 * ip4_static_routes = NULL;
struct in_addr temp_addr;
+ struct NMIP4Route temp_route;
+ char temp_char_host[INET_ADDRSTRLEN];
+ char temp_char_gw[INET_ADDRSTRLEN];
nm_completion_args args;
g_return_val_if_fail (manager != NULL, NULL);
@@ -520,6 +525,7 @@
get_ip4_string (manager, dev, "domain_name", &domain_names, TRUE);
get_ip4_string (manager, dev, "nis_domain", &nis_domain, TRUE);
get_ip4_uint32s (manager, dev, "nis_servers", &ip4_nis_servers, &num_ip4_nis_servers, TRUE);
+ get_ip4_uint32s (manager, dev, "static_routes", &ip4_static_routes, &num_ip4_static_routes, TRUE);
nm_info ("Retrieved the following IP4 configuration from the DHCP daemon:");
@@ -579,6 +585,19 @@
nm_info (" nis server %s", inet_ntoa (temp_addr));
}
+ for (i = 0; i < num_ip4_static_routes / 2;i++)
+ {
+ temp_route.host.s_addr = ip4_static_routes[(i*2)];
+ temp_route.gw.s_addr = ip4_static_routes[((i*2)+1)];
+ temp_route.mask.s_addr = 0x0ffffffff;
+ nm_ip4_config_add_static_route (ip4_config, temp_route);
+ if ( inet_ntop(AF_INET, &temp_route.host, &temp_char_host,INET_ADDRSTRLEN) && inet_ntop(AF_INET, &temp_route.gw , &temp_char_gw ,INET_ADDRSTRLEN))
+ nm_info (" static route %s gw %s", temp_char_host, temp_char_gw);
+ else
+ nm_warning (" Cannot convert addresses for display");
+
+ }
+
/*
* Grab the MTU from the backend. If DHCP servers can send recommended MTU's,
* should set that here if the backend returns zero.
diff -bBru NetworkManager-0.6.5/src/NetworkManagerSystem.c NetworkManager-0.6.5-blondak/src/NetworkManagerSystem.c
--- NetworkManager-0.6.5/src/NetworkManagerSystem.c 2007-04-18 20:13:06.000000000 +0200
+++ NetworkManager-0.6.5-blondak/src/NetworkManagerSystem.c 2007-06-07 21:59:06.000000000 +0200
@@ -294,6 +294,8 @@
struct nl_handle * nlh = NULL;
struct rtnl_addr * addr = NULL;
int err;
+ int i,len;
+ struct NMIP4Route * static_route;
g_return_val_if_fail (dev != NULL, FALSE);
@@ -326,6 +328,14 @@
sleep (1);
nm_system_device_set_ip4_route (dev, nm_ip4_config_get_gateway (config), 0, 0, nm_ip4_config_get_mss (config));
+ len = nm_ip4_config_get_num_static_routes (config);
+ for (i =0; i < len; i++)
+ {
+ static_route = nm_ip4_config_get_static_route (config, i);
+ if (static_route != NULL)
+ nm_system_device_set_ip4_route (dev, static_route->gw.s_addr, static_route->host.s_addr, static_route->mask.s_addr, nm_ip4_config_get_mss (config));
+ }
+
nm_named_manager_add_ip4_config (app_data->named_manager, config);
return TRUE;
diff -bBru NetworkManager-0.6.5/src/nm-ip4-config.c NetworkManager-0.6.5-blondak/src/nm-ip4-config.c
--- NetworkManager-0.6.5/src/nm-ip4-config.c 2007-04-18 20:13:06.000000000 +0200
+++ NetworkManager-0.6.5-blondak/src/nm-ip4-config.c 2007-06-08 09:10:36.000000000 +0200
@@ -50,6 +50,7 @@
gchar * hostname;
gchar * nis_domain;
GSList * nis_servers;
+ GSList * static_routes;
/* If this is a VPN/etc config that requires
* another device (like Ethernet) to already have
@@ -99,6 +100,10 @@
for (i = 0; i < len; i++)
nm_ip4_config_add_nis_server (dst_config, nm_ip4_config_get_nis_server (src_config, i));
+ len = nm_ip4_config_get_num_static_routes (src_config);
+ for (i =0; i < len; i++)
+ nm_ip4_config_add_static_route (dst_config, *nm_ip4_config_get_static_route (src_config, i));
+
return dst_config;
}
@@ -122,6 +127,8 @@
g_slist_foreach (config->domains, (GFunc) g_free, NULL);
g_slist_free (config->domains);
g_slist_free (config->nis_servers);
+ g_slist_foreach (config->static_routes, (GFunc) g_free, NULL);
+ g_slist_free (config->static_routes);
memset (config, 0, sizeof (NMIP4Config));
g_free (config);
@@ -264,6 +271,36 @@
return (g_slist_length (config->nis_servers));
}
+void nm_ip4_config_add_static_route (NMIP4Config *config, NMIP4Route route)
+{
+ struct NMIP4Route* static_route = g_memdup(&route, sizeof (NMIP4Route));
+ g_return_if_fail ( config != NULL);
+ g_return_if_fail ( static_route != NULL);
+ if ( (static_route->host.s_addr == 0) || (static_route->mask.s_addr != 0x0ffffffff) || (static_route->gw.s_addr == 0) )
+ return;
+
+ config->static_routes = g_slist_append (config->static_routes, static_route );
+}
+
+NMIP4Route * nm_ip4_config_get_static_route (NMIP4Config *config, guint32 i)
+{
+ NMIP4Route* static_route;
+
+ g_return_val_if_fail (config != NULL, NULL);
+ g_return_val_if_fail (i < g_slist_length (config->static_routes), NULL);
+
+ static_route = g_slist_nth_data (config->static_routes,i);
+
+ return static_route;
+}
+
+guint32 nm_ip4_config_get_num_static_routes (NMIP4Config *config)
+{
+ g_return_val_if_fail (config != NULL, 0);
+
+ return (g_slist_length (config->static_routes));
+}
+
void nm_ip4_config_add_domain (NMIP4Config *config, const char *domain)
{
g_return_if_fail (config != NULL);
diff -bBru NetworkManager-0.6.5/src/nm-ip4-config.h NetworkManager-0.6.5-blondak/src/nm-ip4-config.h
--- NetworkManager-0.6.5/src/nm-ip4-config.h 2007-04-18 20:13:06.000000000 +0200
+++ NetworkManager-0.6.5-blondak/src/nm-ip4-config.h 2007-06-07 21:50:46.000000000 +0200
@@ -23,6 +23,14 @@
#define NM_IP4_CONFIG_H
#include <glib.h>
+#include <netinet/in.h>
+typedef struct NMIP4Route NMIP4Route;
+struct NMIP4Route
+{
+ struct in_addr host;
+ struct in_addr mask;
+ struct in_addr gw;
+};
typedef struct NMIP4Config NMIP4Config;
@@ -58,6 +66,10 @@
guint32 nm_ip4_config_get_nis_server (NMIP4Config *config, guint i);
guint32 nm_ip4_config_get_num_nis_servers (NMIP4Config *config);
+void nm_ip4_config_add_static_route (NMIP4Config *config, NMIP4Route route);
+NMIP4Route * nm_ip4_config_get_static_route (NMIP4Config *config, guint32 i);
+guint32 nm_ip4_config_get_num_static_routes (NMIP4Config *config);
+
void nm_ip4_config_set_hostname (NMIP4Config *config, const char *hostname);
const char * nm_ip4_config_get_hostname (NMIP4Config *config);
Attachment:
signature.asc
Description: Toto je =?UTF-8?Q?digit=C3=A1ln=C4=9B?= =?ISO-8859-1?Q?_podepsan=E1?= =?UTF-8?Q?_=C4=8D=C3=A1st?= =?ISO-8859-1?Q?_zpr=E1vy?=