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 @@ | |||
1 | Add a new option -D to the udhcpc client that allows for | ||
2 | dhcp renewal to occur without having to down the interface | ||
3 | in the process. | ||
4 | |||
5 | Signed-off-by: Greg Moffatt <greg.moffatt@windriver.com> | ||
6 | |||
7 | Updated to latest Busybox 1.17.3 | ||
8 | |||
9 | Signed-off-by: Mark Hatle <mark.hatle@windriver.com> | ||
10 | |||
11 | diff -ur busybox-1.17.3.orig/networking/udhcp/dhcpc.c busybox-1.17.3/networking/udhcp/dhcpc.c | ||
12 | --- busybox-1.17.3.orig/networking/udhcp/dhcpc.c | ||
13 | +++ busybox-1.17.3/networking/udhcp/dhcpc.c | ||
14 | @@ -35,6 +35,9 @@ | ||
15 | #endif | ||
16 | #include <linux/filter.h> | ||
17 | |||
18 | +/* option whether to down the interface when reconfiguring */ | ||
19 | +static int allow_deconfig = 1; | ||
20 | + | ||
21 | /* struct client_config_t client_config is in bb_common_bufsiz1 */ | ||
22 | |||
23 | |||
24 | @@ -709,7 +712,8 @@ | ||
25 | state = RENEW_REQUESTED; | ||
26 | break; | ||
27 | case RENEW_REQUESTED: /* impatient are we? fine, square 1 */ | ||
28 | - udhcp_run_script(NULL, "deconfig"); | ||
29 | + if (allow_deconfig) | ||
30 | + udhcp_run_script(NULL, "deconfig"); | ||
31 | case REQUESTING: | ||
32 | case RELEASED: | ||
33 | change_listen_mode(LISTEN_RAW); | ||
34 | @@ -733,7 +737,8 @@ | ||
35 | bb_info_msg("Unicasting a release of %s to %s", | ||
36 | inet_ntoa(temp_addr), buffer); | ||
37 | send_release(server_addr, requested_ip); /* unicast */ | ||
38 | - udhcp_run_script(NULL, "deconfig"); | ||
39 | + if (allow_deconfig) | ||
40 | + udhcp_run_script(NULL, "deconfig"); | ||
41 | } | ||
42 | bb_info_msg("Entering released state"); | ||
43 | |||
44 | @@ -836,6 +841,7 @@ | ||
45 | OPT_o = 1 << 18, | ||
46 | OPT_x = 1 << 19, | ||
47 | OPT_f = 1 << 20, | ||
48 | + OPT_D = 1 << 21, | ||
49 | /* The rest has variable bit positions, need to be clever */ | ||
50 | OPTBIT_f = 20, | ||
51 | USE_FOR_MMU( OPTBIT_b,) | ||
52 | @@ -861,7 +867,7 @@ | ||
53 | #endif | ||
54 | ; | ||
55 | IF_LONG_OPTS(applet_long_options = udhcpc_longopts;) | ||
56 | - opt = getopt32(argv, "c:CV:H:h:F:i:np:qRr:s:T:t:SA:O:ox:f" | ||
57 | + opt = getopt32(argv, "c:CV:H:h:F:i:np:qRr:s:T:t:SA:O:ox:fD" | ||
58 | USE_FOR_MMU("b") | ||
59 | IF_FEATURE_UDHCPC_ARPING("a") | ||
60 | IF_FEATURE_UDHCP_PORT("P:") | ||
61 | @@ -950,6 +956,9 @@ | ||
62 | logmode |= LOGMODE_SYSLOG; | ||
63 | } | ||
64 | |||
65 | + if (opt & OPT_D) | ||
66 | + allow_deconfig = 0; | ||
67 | + | ||
68 | /* Make sure fd 0,1,2 are open */ | ||
69 | bb_sanitize_stdio(); | ||
70 | /* Equivalent of doing a fflush after every \n */ | ||
71 | @@ -964,7 +973,8 @@ | ||
72 | srand(monotonic_us()); | ||
73 | |||
74 | state = INIT_SELECTING; | ||
75 | - udhcp_run_script(NULL, "deconfig"); | ||
76 | + if (allow_deconfig) | ||
77 | + udhcp_run_script(NULL, "deconfig"); | ||
78 | change_listen_mode(LISTEN_RAW); | ||
79 | packet_num = 0; | ||
80 | timeout = 0; | ||
81 | @@ -1100,7 +1110,8 @@ | ||
82 | } | ||
83 | /* Timed out, enter init state */ | ||
84 | bb_info_msg("Lease lost, entering init state"); | ||
85 | - udhcp_run_script(NULL, "deconfig"); | ||
86 | + if (allow_deconfig) | ||
87 | + udhcp_run_script(NULL, "deconfig"); | ||
88 | state = INIT_SELECTING; | ||
89 | /*timeout = 0; - already is */ | ||
90 | packet_num = 0; | ||
91 | @@ -1246,7 +1257,8 @@ | ||
92 | send_decline(xid, server_addr, packet.yiaddr); | ||
93 | |||
94 | if (state != REQUESTING) | ||
95 | - udhcp_run_script(NULL, "deconfig"); | ||
96 | + if (allow_deconfig) | ||
97 | + udhcp_run_script(NULL, "deconfig"); | ||
98 | change_listen_mode(LISTEN_RAW); | ||
99 | state = INIT_SELECTING; | ||
100 | requested_ip = 0; | ||
101 | @@ -1292,7 +1304,8 @@ | ||
102 | bb_info_msg("Received DHCP NAK"); | ||
103 | udhcp_run_script(&packet, "nak"); | ||
104 | if (state != REQUESTING) | ||
105 | - udhcp_run_script(NULL, "deconfig"); | ||
106 | + if (allow_deconfig) | ||
107 | + udhcp_run_script(NULL, "deconfig"); | ||
108 | change_listen_mode(LISTEN_RAW); | ||
109 | sleep(3); /* avoid excessive network traffic */ | ||
110 | 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" | |||
18 | FILES_${PN}-udhcpd = "${sysconfdir}/init.d/busybox-udhcpd" | 18 | FILES_${PN}-udhcpd = "${sysconfdir}/init.d/busybox-udhcpd" |
19 | 19 | ||
20 | FILES_${PN} += "${datadir}/udhcpc" | 20 | FILES_${PN} += "${datadir}/udhcpc" |
21 | FILES_${PN} += "${sysconfdir}/init.d/busybox-udhcpc" | ||
21 | 22 | ||
22 | INITSCRIPT_PACKAGES = "${PN} ${PN}-httpd ${PN}-udhcpd" | 23 | INITSCRIPT_PACKAGES = "${PN} ${PN}-httpd ${PN}-udhcpd" |
23 | INITSCRIPT_NAME_${PN}-httpd = "busybox-httpd" | 24 | INITSCRIPT_NAME_${PN}-httpd = "busybox-httpd" |
24 | INITSCRIPT_NAME_${PN}-udhcpd = "busybox-udhcpd" | 25 | INITSCRIPT_NAME_${PN}-udhcpd = "busybox-udhcpd" |
25 | INITSCRIPT_NAME_${PN} = "syslog" | 26 | INITSCRIPT_NAME_${PN} = "syslog busybox-udhcpc" |
26 | CONFFILES_${PN} = "${sysconfdir}/syslog.conf.${PN}" | 27 | CONFFILES_${PN} = "${sysconfdir}/syslog.conf.${PN}" |
27 | 28 | ||
28 | # This disables the syslog startup links in slugos (see slugos-init) | 29 | # This disables the syslog startup links in slugos (see slugos-init) |
@@ -97,6 +98,7 @@ do_install () { | |||
97 | install -d ${D}${datadir}/udhcpc | 98 | install -d ${D}${datadir}/udhcpc |
98 | install -m 0755 ${S}/examples/udhcp/simple.script ${D}${sysconfdir}/udhcpc.d/50default | 99 | install -m 0755 ${S}/examples/udhcp/simple.script ${D}${sysconfdir}/udhcpc.d/50default |
99 | install -m 0755 ${WORKDIR}/default.script ${D}${datadir}/udhcpc/default.script | 100 | install -m 0755 ${WORKDIR}/default.script ${D}${datadir}/udhcpc/default.script |
101 | install -m 0755 ${WORKDIR}/busybox-udhcpc ${D}${sysconfdir}/init.d/ | ||
100 | fi | 102 | fi |
101 | 103 | ||
102 | install -m 0644 ${S}/busybox.links ${D}${sysconfdir} | 104 | 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 @@ | |||
1 | require busybox.inc | 1 | require busybox.inc |
2 | PR = "r0" | 2 | PR = "r1" |
3 | 3 | ||
4 | SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \ | 4 | SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \ |
5 | file://udhcpscript.patch \ | 5 | file://udhcpscript.patch \ |
@@ -9,10 +9,12 @@ SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \ | |||
9 | file://busybox-appletlib-dependency.patch \ | 9 | file://busybox-appletlib-dependency.patch \ |
10 | file://run-parts.in.usr-bin.patch \ | 10 | file://run-parts.in.usr-bin.patch \ |
11 | file://make-382-fix.patch \ | 11 | file://make-382-fix.patch \ |
12 | file://busybox-udhcpc-no_deconfig.patch \ | ||
12 | file://find-touchscreen.sh \ | 13 | file://find-touchscreen.sh \ |
13 | file://busybox-cron \ | 14 | file://busybox-cron \ |
14 | file://busybox-httpd \ | 15 | file://busybox-httpd \ |
15 | file://busybox-udhcpd \ | 16 | file://busybox-udhcpd \ |
17 | file://busybox-udhcpc \ | ||
16 | file://default.script \ | 18 | file://default.script \ |
17 | file://simple.script \ | 19 | file://simple.script \ |
18 | file://hwclock.sh \ | 20 | 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 @@ | |||
1 | #!/bin/sh | ||
2 | # | ||
3 | # (c) 2010-2011 Wind River Systems, Inc. | ||
4 | # | ||
5 | # Busybox udhcpc init script | ||
6 | # | ||
7 | # script to start the udpchc DHCP client on boots where | ||
8 | # the parameter 'ip=dhcp' was included in the kernel parameters | ||
9 | |||
10 | # ensure the required binaries are present | ||
11 | [ -x /sbin/udhcpc ] || exit 1 | ||
12 | [ -x /bin/grep ] || exit 1 | ||
13 | [ -x /bin/mount ] || exit 1 | ||
14 | |||
15 | # ensure /proc is mounted | ||
16 | if ! mount | grep -q "/proc "; then | ||
17 | exit 2 | ||
18 | fi | ||
19 | |||
20 | rc=0 | ||
21 | if grep -q -E "\bip=dhcp\b" /proc/cmdline; then | ||
22 | /sbin/udhcpc -D -s /usr/share/udhcpc/default.script | ||
23 | rc=$? | ||
24 | fi | ||
25 | exit $rc | ||