> From: Richard Weinberger [mailto:richard.weinberger@xxxxxxxxx] > Sent: Friday, July 18, 2014 9:41 PM > > On Fri, Jul 18, 2014 at 12:55 PM, Yue Zhang <yuezha@xxxxxxxxxxxxx> wrote: > > From: Yue Zhang <yuezha@xxxxxxxxxxxxx> > > > > This patch addresses the comment from Olaf Hering and Greg KH > > for a previous commit 3a494e710367 ("hyperv: Add handler for > > RNDIS_STATUS_NETWORK_CHANGE event") > > > > In previous solution, the driver calls "network restart" to > > force a DHCP renew when the host is back from hibernation. > > > > In this fix, the driver will keep network carrier offline for > > 10 seconds and then bring it back. So that ifplugd daemon will > > notice this change and refresh DHCP lease. > > > > Cc: Haiyang Zhang <haiyangz@xxxxxxxxxxxxx> > > Cc: K. Y. Srinivasan <kys@xxxxxxxxxxxxx> > > > > Signed-off-by: Yue Zhang <yuezha@xxxxxxxxxxxxx> > > --- > > drivers/net/hyperv/netvsc_drv.c | 21 +++++++++++++++++---- > > 1 file changed, 17 insertions(+), 4 deletions(-) > > > > diff --git a/drivers/net/hyperv/netvsc_drv.c > b/drivers/net/hyperv/netvsc_drv.c > > index a9c5eaa..559c97d 100644 > > --- a/drivers/net/hyperv/netvsc_drv.c > > +++ b/drivers/net/hyperv/netvsc_drv.c > > @@ -33,6 +33,7 @@ > > #include <linux/if_vlan.h> > > #include <linux/in.h> > > #include <linux/slab.h> > > +#include <linux/delay.h> > > #include <net/arp.h> > > #include <net/route.h> > > #include <net/sock.h> > > @@ -792,8 +793,7 @@ static void netvsc_link_change(struct work_struct > *w) > > struct netvsc_device *net_device; > > struct rndis_device *rdev; > > bool notify, refresh = false; > > - char *argv[] = { "/etc/init.d/network", "restart", NULL }; > > - char *envp[] = { "HOME=/", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", > NULL }; > > + int delay; > > > > rtnl_lock(); > > > > @@ -816,8 +816,21 @@ static void netvsc_link_change(struct work_struct > *w) > > > > rtnl_unlock(); > > > > - if (refresh) > > - call_usermodehelper(argv[0], argv, envp, UMH_WAIT_EXEC); > > + if (refresh) { > > + /* > > + * Keep the carrier offline for 10 seconds > > + * to notify ifplugd daemon network change > > + */ > > Why 10? Is this a random number which works by accident for ifplugd? > What about other networking implementations, is 10 also ok for them? > -- > Thanks, > //richard Hi, Richard I checked ifplugd's code. The deferring time is 5 seconds. That's how comes the "10s". I agree with you this is a magic number and should be avoid. However, this is the only feasible solution right now. If there is a better solution, I will be glad to switch to it. I tested the fix in Redhat, Ubuntu and SUSE and it works in all of them. Thanks Yie _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel