On Fri, 2008-04-18 at 20:12 -0400, Benoit Boissinot wrote:
> (depends on the cleanup of the frugalware backend)
> 
> Remove nm_system_device_replace_default_ip4_route from all
> backends, implement it with libnl.

So this patch doesn't seem to work for me, I always get ESRCH returned
from libnl.

-- Error received: No such process
-- Original message: type=0x18 length=52 flags=<REQUEST,ACK,ROOT,ATOMIC> 
sequence-nr=1208967030 pid=4218374
NetworkManager: <WARN>  nm_system_device_replace_default_ip4_route(): 
rtnl_addr_add() error -3

probably need to poke Thomas about this one, before I start
instrumenting iproute2 to dump the netlink packets it sends, doing the
same for libnl, and see what's different.

Dan

> 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);
>  }
>  
>  /*
> 

_______________________________________________
NetworkManager-list mailing list
NetworkManager-list@gnome.org
http://mail.gnome.org/mailman/listinfo/networkmanager-list

Reply via email to