diff options
| -rw-r--r-- | meta/recipes-core/busybox/busybox-1.17.3/busybox-udhcpc-no_deconfig.patch | 110 | ||||
| -rw-r--r-- | meta/recipes-core/busybox/busybox.inc | 4 | ||||
| -rw-r--r-- | meta/recipes-core/busybox/busybox_1.17.3.bb | 4 | ||||
| -rwxr-xr-x | meta/recipes-core/busybox/files/busybox-udhcpc | 25 | 
4 files changed, 141 insertions, 2 deletions
| diff --git a/meta/recipes-core/busybox/busybox-1.17.3/busybox-udhcpc-no_deconfig.patch b/meta/recipes-core/busybox/busybox-1.17.3/busybox-udhcpc-no_deconfig.patch new file mode 100644 index 0000000000..cdf56b826c --- /dev/null +++ b/meta/recipes-core/busybox/busybox-1.17.3/busybox-udhcpc-no_deconfig.patch @@ -0,0 +1,110 @@ +Add a new option -D to the udhcpc client that allows for +dhcp renewal to occur without having to down the interface +in the process. + +Signed-off-by: Greg Moffatt <greg.moffatt@windriver.com> + +Updated to latest Busybox 1.17.3 + +Signed-off-by: Mark Hatle <mark.hatle@windriver.com> + +diff -ur busybox-1.17.3.orig/networking/udhcp/dhcpc.c busybox-1.17.3/networking/udhcp/dhcpc.c +--- busybox-1.17.3.orig/networking/udhcp/dhcpc.c ++++ busybox-1.17.3/networking/udhcp/dhcpc.c +@@ -35,6 +35,9 @@ + #endif + #include <linux/filter.h> +  ++/* option whether to down the interface when reconfiguring */ ++static int allow_deconfig = 1; ++ + /* struct client_config_t client_config is in bb_common_bufsiz1 */ +  +  +@@ -709,7 +712,8 @@ + 		state = RENEW_REQUESTED; + 		break; + 	case RENEW_REQUESTED: /* impatient are we? fine, square 1 */ +-		udhcp_run_script(NULL, "deconfig"); ++		if (allow_deconfig) ++			udhcp_run_script(NULL, "deconfig"); + 	case REQUESTING: + 	case RELEASED: + 		change_listen_mode(LISTEN_RAW); +@@ -733,7 +737,8 @@ + 		bb_info_msg("Unicasting a release of %s to %s", + 				inet_ntoa(temp_addr), buffer); + 		send_release(server_addr, requested_ip); /* unicast */ +-		udhcp_run_script(NULL, "deconfig"); ++		if (allow_deconfig) ++			udhcp_run_script(NULL, "deconfig"); + 	} + 	bb_info_msg("Entering released state"); +  +@@ -836,6 +841,7 @@ + 		OPT_o = 1 << 18, + 		OPT_x = 1 << 19, + 		OPT_f = 1 << 20, ++		OPT_D = 1 << 21, + /* The rest has variable bit positions, need to be clever */ + 		OPTBIT_f = 20, + 		USE_FOR_MMU(             OPTBIT_b,) +@@ -861,7 +867,7 @@ + #endif + 		; + 	IF_LONG_OPTS(applet_long_options = udhcpc_longopts;) +-	opt = getopt32(argv, "c:CV:H:h:F:i:np:qRr:s:T:t:SA:O:ox:f" ++	opt = getopt32(argv, "c:CV:H:h:F:i:np:qRr:s:T:t:SA:O:ox:fD" + 		USE_FOR_MMU("b") + 		IF_FEATURE_UDHCPC_ARPING("a") + 		IF_FEATURE_UDHCP_PORT("P:") +@@ -950,6 +956,9 @@ + 		logmode |= LOGMODE_SYSLOG; + 	} +  ++	if (opt & OPT_D) ++		allow_deconfig = 0; ++ + 	/* Make sure fd 0,1,2 are open */ + 	bb_sanitize_stdio(); + 	/* Equivalent of doing a fflush after every \n */ +@@ -964,7 +973,8 @@ + 	srand(monotonic_us()); +  + 	state = INIT_SELECTING; +-	udhcp_run_script(NULL, "deconfig"); ++	if (allow_deconfig) ++		udhcp_run_script(NULL, "deconfig"); + 	change_listen_mode(LISTEN_RAW); + 	packet_num = 0; + 	timeout = 0; +@@ -1100,7 +1110,8 @@ + 				} + 				/* Timed out, enter init state */ + 				bb_info_msg("Lease lost, entering init state"); +-				udhcp_run_script(NULL, "deconfig"); ++				if (allow_deconfig) ++					udhcp_run_script(NULL, "deconfig"); + 				state = INIT_SELECTING; + 				/*timeout = 0; - already is */ + 				packet_num = 0; +@@ -1246,7 +1257,8 @@ + 						send_decline(xid, server_addr, packet.yiaddr); +  + 						if (state != REQUESTING) +-							udhcp_run_script(NULL, "deconfig"); ++							if (allow_deconfig) ++								udhcp_run_script(NULL, "deconfig"); + 						change_listen_mode(LISTEN_RAW); + 						state = INIT_SELECTING; + 						requested_ip = 0; +@@ -1292,7 +1304,8 @@ + 				bb_info_msg("Received DHCP NAK"); + 				udhcp_run_script(&packet, "nak"); + 				if (state != REQUESTING) +-					udhcp_run_script(NULL, "deconfig"); ++					if (allow_deconfig) ++						udhcp_run_script(NULL, "deconfig"); + 				change_listen_mode(LISTEN_RAW); + 				sleep(3); /* avoid excessive network traffic */ + 				state = INIT_SELECTING; diff --git a/meta/recipes-core/busybox/busybox.inc b/meta/recipes-core/busybox/busybox.inc index 142c72f4e5..55f056c4c0 100644 --- a/meta/recipes-core/busybox/busybox.inc +++ b/meta/recipes-core/busybox/busybox.inc @@ -18,11 +18,12 @@ FILES_${PN}-httpd = "${sysconfdir}/init.d/busybox-httpd /srv/www"  FILES_${PN}-udhcpd = "${sysconfdir}/init.d/busybox-udhcpd"  FILES_${PN} += "${datadir}/udhcpc" +FILES_${PN} += "${sysconfdir}/init.d/busybox-udhcpc"  INITSCRIPT_PACKAGES = "${PN} ${PN}-httpd ${PN}-udhcpd"  INITSCRIPT_NAME_${PN}-httpd = "busybox-httpd"  INITSCRIPT_NAME_${PN}-udhcpd = "busybox-udhcpd"  -INITSCRIPT_NAME_${PN} = "syslog" +INITSCRIPT_NAME_${PN} = "syslog busybox-udhcpc"  CONFFILES_${PN} = "${sysconfdir}/syslog.conf.${PN}"  # This disables the syslog startup links in slugos (see slugos-init) @@ -97,6 +98,7 @@ do_install () {  		install -d ${D}${datadir}/udhcpc  		install -m 0755 ${S}/examples/udhcp/simple.script ${D}${sysconfdir}/udhcpc.d/50default  		install -m 0755 ${WORKDIR}/default.script ${D}${datadir}/udhcpc/default.script +		install -m 0755 ${WORKDIR}/busybox-udhcpc ${D}${sysconfdir}/init.d/  	fi  	install -m 0644 ${S}/busybox.links ${D}${sysconfdir} diff --git a/meta/recipes-core/busybox/busybox_1.17.3.bb b/meta/recipes-core/busybox/busybox_1.17.3.bb index 9ecb36d647..c5fbe9c7b0 100644 --- a/meta/recipes-core/busybox/busybox_1.17.3.bb +++ b/meta/recipes-core/busybox/busybox_1.17.3.bb @@ -1,5 +1,5 @@  require busybox.inc -PR = "r0" +PR = "r1"  SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \             file://udhcpscript.patch \ @@ -9,10 +9,12 @@ SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \             file://busybox-appletlib-dependency.patch \             file://run-parts.in.usr-bin.patch \             file://make-382-fix.patch \ +           file://busybox-udhcpc-no_deconfig.patch \             file://find-touchscreen.sh \             file://busybox-cron \             file://busybox-httpd \             file://busybox-udhcpd \ +           file://busybox-udhcpc \             file://default.script \             file://simple.script \             file://hwclock.sh \ diff --git a/meta/recipes-core/busybox/files/busybox-udhcpc b/meta/recipes-core/busybox/files/busybox-udhcpc new file mode 100755 index 0000000000..2c43f8da2e --- /dev/null +++ b/meta/recipes-core/busybox/files/busybox-udhcpc @@ -0,0 +1,25 @@ +#!/bin/sh +# +# (c) 2010-2011 Wind River Systems, Inc. +# +# Busybox udhcpc init script +# +# script to start the udpchc DHCP client on boots where +# the parameter 'ip=dhcp' was included in the kernel parameters + +# ensure the required binaries are present +[ -x /sbin/udhcpc ] || exit 1 +[ -x /bin/grep ] || exit 1 +[ -x /bin/mount ] || exit 1 + +# ensure /proc is mounted +if ! mount | grep -q "/proc "; then +	exit 2 +fi + +rc=0 +if grep -q -E "\bip=dhcp\b" /proc/cmdline; then +	/sbin/udhcpc -D -s /usr/share/udhcpc/default.script +	rc=$? +fi +exit $rc | 
