Looking for simple ifplugd example script

Bryan Evenson bevenson at melinkcorp.com
Fri Feb 21 16:43:30 UTC 2014


Denys,

> -----Original Message-----
> From: Denys Vlasenko [mailto:vda.linux at googlemail.com]
> Sent: Friday, February 21, 2014 6:56 AM
> To: Bryan Evenson
> Cc: busybox at busybox.net
> Subject: Re: Looking for simple ifplugd example script
> 
> On Fri, Feb 21, 2014 at 11:39 AM, Bryan Evenson
> <bevenson at melinkcorp.com> wrote:
> >> > At this point, ifplugd is not running.  After some poking around, I
> >> > see that
> >> there is no default daemon script for ifplugd included with Busybox.
> >> I'm assuming a script to do the above isn't that difficult, but I
> >> can't seem to find any examples on how to do this.  Does anyone have
> >> a simple example that I can go by?  I did see the example in the
> >> Busybox source under examples/var_service/ifplugd_if, but I couldn't
> >> make any sense of what that script did and how to make use of it.
> >>
> >> It means that busybox/examples/var_service/README is badly located,
> >> or badly written, or both.
> >>
> >
> > I found the README you were talking about.  I have never used runsvdir
> > before and I don't have it included in my version of Busybox.  I
> > didn't realize that Busybox was assuming you'd use runsvdir to run
> > ifplugd,
> 
> We don't pull Lenart Pottering here.
> Busybox does not assume or require you to use runsvdir with ifplugd.
> You can use ifplugd with or without runsvdir.
> 
> ifplugd is written in a way that it's *you* who decide what to do when link
> goes up or down (by the way of writing desired actions in your script).
> 
> > which was the start of my confusion.  And since I didn't know that's what
> was assumed, I didn't think to look a couple directories up for a related
> README.
> 
> How about this fix (adding another README)?
> 
> $ cat examples/var_service/ifplugd_if/README
> The real README file is one directory up.
> 

A copy of examples/var_service/nmeter/README in examples/var_service/ifplugd_if/ would be helpful.  In my searches for examples on how to use ifplugd, everything I found said "see /etc/default/ifplugd for example usage", which I didn't have.  I'm unfamiliar with runsvdir, so I didn't know "run" was the file that called ifplugd.  So the example in run is as follows:

ifplugd -apqns -t3 -u8 -d8 -i "$if" -r "$pwd/ifplugd_handler"

I'm trying to get a better understanding as to what this command does and how it'd apply to my setup if I wanted to use it in an init script with sysVinit.  Following the setup from the other init scripts in my system, I would be using start-stop-daemon to start ifplugd.  And as far as right now, forget what I'd mentioned before about the static IP address; first step is just getting the system to re-attempt DHCP when someone plugs in the Ethernet cable.

Based on how I'm assuming I would need to call ifplugd from a sysVinit script, here is the script I have as a starting point:

#! /bin/sh
#
# ifplugd  init.d script
test  -x /usr/bin/ifplugd || exit 0

#Functions to do individual actions
startdaemon(){
    # Start the application
    echo -n "Starting ifplugd: "
    start-stop-daemon --start --quiet --background --exec /usr/bin/ifplugd -- "-apq -t3 -u8 -d8 -i eth0 -r /etc/udhcpc.d/50default"
    echo "done"
}
stopdaemon(){
	echo -n "Stopping ifplugd: "
	start-stop-daemon --stop --quiet --exec /usr/bin/ifplugd
	echo "done"
}

case "$1" in
  start)
	startdaemon
	;;
  stop)
  	stopdaemon
	;;
  restart|force-reload)
	stopdaemon
	sleep 2
	startdaemon
	;;
  *)
	echo "Usage: /etc/init.d/ifplugd { start | stop | restart | force-reload }" >&2
	exit 1
	;;
esac

exit 0

Basically, start ifplugd and let it call udhcpc if ifplugd detects a change in the link.  My startup says that its calling this script, and I can call  "/etc/init.d/ifplugd start" on the command line and I don't see any complaints.  However, I don't see ifplugd in my running process list; for some reason the daemon isn't running (or, maybe it starts but fails for some reason).  I also don't see any message related to ifplugd in my system log.  Are there some arguments I got wrong in the call to ifplugd?

> 
> > A little more background on my system.  It's an ARM family processor and
> I'm using the Yocto Project's Poky distribution on my system.  The default
> image for that build uses sysVinit and is setup for ifup/ifdown.
> 
> > So if I wanted to use ifplugd, is the suggestion that I include runsvdir and
> runsv in my Busybox configuration and use it to run ifplugd?
> 
> If you want to use ifplugd, use it.
> Namely, decide where to start it, and what to put into its helper script.
> 
> > I'm unclear what runsvdir is doing that sysVinit can't.
> 
> There are plenty of stuff about daemontools and runsvdir on Google.
> 
> A very short synopsis: runsvdir babysits processes just like sysVinit does for
> getties / X / whatever, but in a better way:
> you can add/remove/start/stop these babysitted processes without sending
> signals or editing text config file.
> 
> > If not ifup, what would you suggest?  I'm open to ideas, just looking
> > for the simplest path to get to where I want to go.
> 
> The very simplest path wouldn't work: you can't design your networking for a
> single wired ethernet with static address or DHCP, and then start bolting on
> hacks to make it work with wifi, more than one interface, vpn's, dynamic
> firewalling etc. It would be a horrifying mess.
> I went through that path already.
> 

Agreed, trying to do all that with either a static IP address or with DHCP would be a horrifying mess.  I'm not looking for something that complicated.  We have one Ethernet port on our board, and there are instances that we would want to direct connect a laptop to the board for pulling data off of the board, etc.  My thought would be the easiest way to do that would be to just have it use a known static IP address if DHCP failed.  We do have a secondary static IP address right now that is live all the time at eth0:0, but we want to get away from that for some of the reasons you mentioned.

So back to my original question: assuming I use ifplugd in a sysVinit for automatically starting DHCP when someone plugs in the Ethernet cable (and I get that working), is there a good way with ifplugd (or udhcpc for that matter) to set a static IP address if DHCP fails?

Thanks,
Bryan

> Here is my current "best idea":
> 
> http://busybox.net/~vda/no_ifup.txt


More information about the busybox mailing list