(depends on the cleanup of the frugalware backend) Remove nm_system_device_replace_default_ip4_route from all backends, implement it with libnl.
diff -r 44a2c48934ef src/NetworkManagerPolicy.c --- a/src/NetworkManagerPolicy.c Wed Apr 16 00:35:47 2008 -0400 +++ b/src/NetworkManagerPolicy.c Fri Apr 18 20:04:30 2008 -0400 @@ -83,12 +83,12 @@ a serial device with ppp interface, so route all the traffic to it. */ ip_iface = nm_device_get_ip_iface (new); if (strcmp (ip_iface, nm_device_get_iface (new))) { - nm_system_device_replace_default_route (ip_iface, 0, 0); + nm_system_device_replace_default_ip4_route (ip_iface, 0, 0); } else { NMIP4Config *config; config = nm_device_get_ip4_config (new); - nm_system_device_replace_default_route (ip_iface, nm_ip4_config_get_gateway (config), + nm_system_device_replace_default_ip4_route (ip_iface, nm_ip4_config_get_gateway (config), nm_ip4_config_get_mss (config)); } } diff -r 44a2c48934ef src/NetworkManagerSystem.c --- a/src/NetworkManagerSystem.c Wed Apr 16 00:35:47 2008 -0400 +++ b/src/NetworkManagerSystem.c Fri Apr 18 20:04:30 2008 -0400 @@ -347,7 +347,7 @@ nm_system_device_flush_ip4_routes_with_iface (iface); if (g_slist_length (routes) == 0) { - nm_system_device_replace_default_route (iface, 0, 0); + nm_system_device_replace_default_ip4_route (iface, 0, 0); } else { GSList *iter; @@ -500,3 +500,44 @@ rtnl_route_put (route); } +/* + * nm_system_replace_default_ip4_route + * + * Replace default IPv4 route with one via the current device + * + */ +void +nm_system_device_replace_default_ip4_route (const char *iface, guint32 gw, guint32 mss) +{ + struct rtnl_route * route; + struct nl_handle * nlh; + struct nl_addr * gw_addr; + int iface_idx; + + nlh = nm_netlink_get_default_handle (); + g_return_if_fail (nlh != NULL); + + route = rtnl_route_alloc(); + g_return_if_fail (route != NULL); + + iface_idx = nm_netlink_iface_to_index (iface); + if (iface_idx < 0) + goto out; + rtnl_route_set_oif (route, iface_idx); + + if (gw > 0) { + if (!(gw_addr = nl_addr_build (AF_INET, &gw, sizeof (gw)))) + goto out; + rtnl_route_set_gateway (route, gw_addr); + nl_addr_put (gw_addr); + } + + if (mss > 0) + if (rtnl_route_set_metric (route, RTAX_ADVMSS, mss) < 0) + goto out; + + rtnl_route_add (nlh, route, NLM_F_REPLACE); +out: + rtnl_route_put (route); +} + diff -r 44a2c48934ef src/NetworkManagerSystem.h --- a/src/NetworkManagerSystem.h Wed Apr 16 00:35:47 2008 -0400 +++ b/src/NetworkManagerSystem.h Fri Apr 18 20:04:30 2008 -0400 @@ -38,7 +38,7 @@ void nm_system_device_flush_ip4_routes (NMDevice *dev); void nm_system_device_flush_ip4_routes_with_iface (const char *iface); -void nm_system_device_replace_default_route (const char *iface, +void nm_system_device_replace_default_ip4_route (const char *iface, guint32 gw, guint32 mss); diff -r 44a2c48934ef src/backends/NetworkManagerArch.c --- a/src/backends/NetworkManagerArch.c Wed Apr 16 00:35:47 2008 -0400 +++ b/src/backends/NetworkManagerArch.c Fri Apr 18 20:04:30 2008 -0400 @@ -65,20 +65,6 @@ void nm_system_init (void) { nm_generic_init (); -} - -/* - * nm_system_device_replace_default_route - * - * Add default route to the given device - * - */ -void -nm_system_device_replace_default_route (const char *iface, - guint32 gw, - guint32 mss) -{ - nm_generic_device_replace_default_route (iface, gw, mss); } /* diff -r 44a2c48934ef src/backends/NetworkManagerDebian.c --- a/src/backends/NetworkManagerDebian.c Wed Apr 16 00:35:47 2008 -0400 +++ b/src/backends/NetworkManagerDebian.c Fri Apr 18 20:04:30 2008 -0400 @@ -57,20 +57,6 @@ } /* - * nm_system_device_replace_default_route - * - * Add default route to the given device - * - */ -void -nm_system_device_replace_default_route (const char *iface, - guint32 gw, - guint32 mss) -{ - nm_generic_device_replace_default_route (iface, gw, mss); -} - -/* * nm_system_device_flush_ip4_addresses * * Flush all network addresses associated with a network device diff -r 44a2c48934ef src/backends/NetworkManagerFrugalware.c --- a/src/backends/NetworkManagerFrugalware.c Wed Apr 16 00:35:47 2008 -0400 +++ b/src/backends/NetworkManagerFrugalware.c Fri Apr 18 20:04:30 2008 -0400 @@ -162,21 +162,6 @@ } /* - * nm_system_device_replace_default_route - * - * Add default route to the given device - * - */ -void -nm_system_device_replace_default_route (const char *iface, - guint32 gw, - guint32 mss) -{ - nm_generic_device_replace_default_route (iface, gw, mss); -} - - -/* * nm_system_flush_loopback_routes * * Flush all routes associated with the loopback device, because it diff -r 44a2c48934ef src/backends/NetworkManagerGeneric.c --- a/src/backends/NetworkManagerGeneric.c Wed Apr 16 00:35:47 2008 -0400 +++ b/src/backends/NetworkManagerGeneric.c Fri Apr 18 20:04:30 2008 -0400 @@ -49,39 +49,6 @@ { /* Kill any dhclients lying around */ nm_system_kill_all_dhcp_daemons (); -} - -/* - * nm_generic_replace_default_route - * - * Replace default route with one via the current device - * - */ -void -nm_generic_device_replace_default_route (const char *iface, guint32 gw, guint32 mss) -{ - char *buf, *addr_str = NULL, *mss_str = NULL; - - g_return_if_fail (iface != NULL); - - if (gw > 0) { - struct in_addr addr = { .s_addr = gw }; - char buf2[INET_ADDRSTRLEN + 1]; - - memset (buf2, 0, sizeof (buf2)); - inet_ntop (AF_INET, &addr, buf2, INET_ADDRSTRLEN); - addr_str = g_strdup_printf ("via %s", buf2); - } - - if (mss > 0) - mss_str = g_strdup_printf ("advmss %d", mss); - - buf = g_strdup_printf (IP_BINARY_PATH" route replace default %s %s dev %s", - addr_str ? addr_str : "", - mss_str ? mss_str : "", - iface); - nm_spawn_process (buf); - g_free (buf); } /* diff -r 44a2c48934ef src/backends/NetworkManagerGeneric.h --- a/src/backends/NetworkManagerGeneric.h Wed Apr 16 00:35:47 2008 -0400 +++ b/src/backends/NetworkManagerGeneric.h Fri Apr 18 20:04:30 2008 -0400 @@ -39,8 +39,6 @@ void nm_generic_device_flush_ip4_routes (NMDevice *dev); void nm_generic_device_flush_ip4_routes_with_iface (const char *iface); -void nm_generic_device_replace_default_route (const char *iface, guint32 gw, guint32 mss); - void nm_generic_device_flush_ip4_addresses (NMDevice *dev); void nm_generic_device_flush_ip4_addresses_with_iface (const char *iface); diff -r 44a2c48934ef src/backends/NetworkManagerGentoo.c --- a/src/backends/NetworkManagerGentoo.c Wed Apr 16 00:35:47 2008 -0400 +++ b/src/backends/NetworkManagerGentoo.c Fri Apr 18 20:04:30 2008 -0400 @@ -220,20 +220,6 @@ } /* - * nm_system_device_replace_default_route - * - * Add default route to the given device - * - */ -void -nm_system_device_replace_default_route (const char *iface, - guint32 gw, - guint32 mss) -{ - nm_generic_device_replace_default_route (iface, gw, mss); -} - -/* * nm_system_activate_nis * * set up the nis domain and write a yp.conf diff -r 44a2c48934ef src/backends/NetworkManagerMandriva.c --- a/src/backends/NetworkManagerMandriva.c Wed Apr 16 00:35:47 2008 -0400 +++ b/src/backends/NetworkManagerMandriva.c Fri Apr 18 20:04:30 2008 -0400 @@ -74,21 +74,6 @@ void nm_system_device_flush_ip4_routes_with_iface (const char *iface) { nm_generic_device_flush_ip4_routes_with_iface (iface); -} - - -/* - * nm_system_device_replace_default_route - * - * Add default route to the given device - * - */ -void -nm_system_device_replace_default_route (const char *iface, - guint32 gw, - guint32 mss) -{ - nm_generic_device_replace_default_route (iface, gw, mss); } /* diff -r 44a2c48934ef src/backends/NetworkManagerPaldo.c --- a/src/backends/NetworkManagerPaldo.c Wed Apr 16 00:35:47 2008 -0400 +++ b/src/backends/NetworkManagerPaldo.c Fri Apr 18 20:04:30 2008 -0400 @@ -77,21 +77,6 @@ nm_generic_device_flush_ip4_routes_with_iface (iface); } - -/* - * nm_system_device_replace_default_route - * - * Add default route to the given device - * - */ -void -nm_system_device_replace_default_route (const char *iface, - guint32 gw, - guint32 mss) -{ - nm_generic_device_replace_default_route (iface, gw, mss); -} - /* * nm_system_device_has_active_routes * diff -r 44a2c48934ef src/backends/NetworkManagerRedHat.c --- a/src/backends/NetworkManagerRedHat.c Wed Apr 16 00:35:47 2008 -0400 +++ b/src/backends/NetworkManagerRedHat.c Fri Apr 18 20:04:30 2008 -0400 @@ -72,21 +72,6 @@ void nm_system_device_flush_ip4_routes_with_iface (const char *iface) { nm_generic_device_flush_ip4_routes_with_iface (iface); -} - - -/* - * nm_system_device_replace_default_route - * - * Add default route to the given device - * - */ -void -nm_system_device_replace_default_route (const char *iface, - guint32 gw, - guint32 mss) -{ - nm_generic_device_replace_default_route (iface, gw, mss); } /* diff -r 44a2c48934ef src/backends/NetworkManagerSlackware.c --- a/src/backends/NetworkManagerSlackware.c Wed Apr 16 00:35:47 2008 -0400 +++ b/src/backends/NetworkManagerSlackware.c Fri Apr 18 20:04:30 2008 -0400 @@ -158,22 +158,6 @@ { } - -/* - * nm_system_device_replace_default_route - * - * Add default route to the given device - * - */ -void -nm_system_device_replace_default_route (const char *iface, - guint32 gw, - guint32 mss) -{ - nm_generic_device_replace_default_route (iface, gw, mss); -} - - /* * nm_system_flush_loopback_routes * diff -r 44a2c48934ef src/backends/NetworkManagerSuSE.c --- a/src/backends/NetworkManagerSuSE.c Wed Apr 16 00:35:47 2008 -0400 +++ b/src/backends/NetworkManagerSuSE.c Fri Apr 18 20:04:30 2008 -0400 @@ -81,21 +81,6 @@ void nm_system_device_flush_ip4_routes_with_iface (const char *iface) { nm_generic_device_flush_ip4_routes_with_iface (iface); -} - - -/* - * nm_system_device_replace_default_route - * - * Add default route to the given device - * - */ -void -nm_system_device_replace_default_route (const char *iface, - guint32 gw, - guint32 mss) -{ - nm_generic_device_replace_default_route (iface, gw, mss); } /* -- :wq _______________________________________________ NetworkManager-list mailing list NetworkManager-list@gnome.org http://mail.gnome.org/mailman/listinfo/networkmanager-list