aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--networking/udhcp/Makefile27
-rw-r--r--networking/udhcp/clientpacket.c30
-rw-r--r--networking/udhcp/common.c13
-rw-r--r--networking/udhcp/common.h23
-rw-r--r--networking/udhcp/dhcpc.c33
-rw-r--r--networking/udhcp/dhcpd.c23
-rw-r--r--networking/udhcp/dhcpd.h1
-rw-r--r--networking/udhcp/files.c15
-rw-r--r--networking/udhcp/libbb_udhcp.h65
-rw-r--r--networking/udhcp/packet.c14
-rw-r--r--networking/udhcp/packet.h10
-rw-r--r--networking/udhcp/script.c29
-rw-r--r--networking/udhcp/script.h6
-rw-r--r--networking/udhcp/serverpacket.c6
-rw-r--r--networking/udhcp/static_leases.c2
-rw-r--r--networking/udhcp/static_leases.h4
-rw-r--r--networking/udhcp/version.h6
17 files changed, 86 insertions, 221 deletions
diff --git a/networking/udhcp/Makefile b/networking/udhcp/Makefile
index dbea9d4d0..23131f8f0 100644
--- a/networking/udhcp/Makefile
+++ b/networking/udhcp/Makefile
@@ -2,27 +2,14 @@
2# 2#
3# Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org> 3# Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
4# 4#
5# This program is free software; you can redistribute it and/or modify 5# Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
6# it under the terms of the GNU General Public License as published by
7# the Free Software Foundation; either version 2 of the License, or
8# (at your option) any later version.
9#
10# This program is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13# General Public License for more details.
14#
15# You should have received a copy of the GNU General Public License
16# along with this program; if not, write to the Free Software
17# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18#
19 6
20ifndef top_srcdir 7#ifndef top_srcdir
21top_srcdir=../.. 8#top_srcdir=../..
22endif 9#endif
23ifndef top_builddir 10#ifndef top_builddir
24top_builddir=../.. 11#top_builddir=../..
25endif 12#endif
26srcdir=$(top_srcdir)/networking/udhcp 13srcdir=$(top_srcdir)/networking/udhcp
27UDHCP_DIR:=./ 14UDHCP_DIR:=./
28include $(top_srcdir)/Rules.mak 15include $(top_srcdir)/Rules.mak
diff --git a/networking/udhcp/clientpacket.c b/networking/udhcp/clientpacket.c
index 88d4d88dc..14e6c6678 100644
--- a/networking/udhcp/clientpacket.c
+++ b/networking/udhcp/clientpacket.c
@@ -4,19 +4,7 @@
4 * 4 *
5 * Russ Dill <Russ.Dill@asu.edu> July 2001 5 * Russ Dill <Russ.Dill@asu.edu> July 2001
6 * 6 *
7 * This program is free software; you can redistribute it and/or modify 7 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */ 8 */
21 9
22#include <string.h> 10#include <string.h>
@@ -69,7 +57,7 @@ unsigned long random_xid(void)
69/* initialize a packet with the proper defaults */ 57/* initialize a packet with the proper defaults */
70static void init_packet(struct dhcpMessage *packet, char type) 58static void init_packet(struct dhcpMessage *packet, char type)
71{ 59{
72 init_header(packet, type); 60 udhcp_init_header(packet, type);
73 memcpy(packet->chaddr, client_config.arp, 6); 61 memcpy(packet->chaddr, client_config.arp, 6);
74 if (client_config.clientid) 62 if (client_config.clientid)
75 add_option_string(packet->options, client_config.clientid); 63 add_option_string(packet->options, client_config.clientid);
@@ -109,7 +97,7 @@ int send_discover(unsigned long xid, unsigned long requested)
109 97
110 add_requests(&packet); 98 add_requests(&packet);
111 LOG(LOG_DEBUG, "Sending discover..."); 99 LOG(LOG_DEBUG, "Sending discover...");
112 return raw_packet(&packet, INADDR_ANY, CLIENT_PORT, INADDR_BROADCAST, 100 return udhcp_raw_packet(&packet, INADDR_ANY, CLIENT_PORT, INADDR_BROADCAST,
113 SERVER_PORT, MAC_BCAST_ADDR, client_config.ifindex); 101 SERVER_PORT, MAC_BCAST_ADDR, client_config.ifindex);
114} 102}
115 103
@@ -129,7 +117,7 @@ int send_selecting(unsigned long xid, unsigned long server, unsigned long reques
129 add_requests(&packet); 117 add_requests(&packet);
130 addr.s_addr = requested; 118 addr.s_addr = requested;
131 LOG(LOG_DEBUG, "Sending select for %s...", inet_ntoa(addr)); 119 LOG(LOG_DEBUG, "Sending select for %s...", inet_ntoa(addr));
132 return raw_packet(&packet, INADDR_ANY, CLIENT_PORT, INADDR_BROADCAST, 120 return udhcp_raw_packet(&packet, INADDR_ANY, CLIENT_PORT, INADDR_BROADCAST,
133 SERVER_PORT, MAC_BCAST_ADDR, client_config.ifindex); 121 SERVER_PORT, MAC_BCAST_ADDR, client_config.ifindex);
134} 122}
135 123
@@ -147,8 +135,8 @@ int send_renew(unsigned long xid, unsigned long server, unsigned long ciaddr)
147 add_requests(&packet); 135 add_requests(&packet);
148 LOG(LOG_DEBUG, "Sending renew..."); 136 LOG(LOG_DEBUG, "Sending renew...");
149 if (server) 137 if (server)
150 ret = kernel_packet(&packet, ciaddr, CLIENT_PORT, server, SERVER_PORT); 138 ret = udhcp_kernel_packet(&packet, ciaddr, CLIENT_PORT, server, SERVER_PORT);
151 else ret = raw_packet(&packet, INADDR_ANY, CLIENT_PORT, INADDR_BROADCAST, 139 else ret = udhcp_raw_packet(&packet, INADDR_ANY, CLIENT_PORT, INADDR_BROADCAST,
152 SERVER_PORT, MAC_BCAST_ADDR, client_config.ifindex); 140 SERVER_PORT, MAC_BCAST_ADDR, client_config.ifindex);
153 return ret; 141 return ret;
154} 142}
@@ -167,7 +155,7 @@ int send_release(unsigned long server, unsigned long ciaddr)
167 add_simple_option(packet.options, DHCP_SERVER_ID, server); 155 add_simple_option(packet.options, DHCP_SERVER_ID, server);
168 156
169 LOG(LOG_DEBUG, "Sending release..."); 157 LOG(LOG_DEBUG, "Sending release...");
170 return kernel_packet(&packet, ciaddr, CLIENT_PORT, server, SERVER_PORT); 158 return udhcp_kernel_packet(&packet, ciaddr, CLIENT_PORT, server, SERVER_PORT);
171} 159}
172 160
173 161
@@ -212,7 +200,7 @@ int get_raw_packet(struct dhcpMessage *payload, int fd)
212 /* check IP checksum */ 200 /* check IP checksum */
213 check = packet.ip.check; 201 check = packet.ip.check;
214 packet.ip.check = 0; 202 packet.ip.check = 0;
215 if (check != checksum(&(packet.ip), sizeof(packet.ip))) { 203 if (check != udhcp_checksum(&(packet.ip), sizeof(packet.ip))) {
216 DEBUG(LOG_INFO, "bad IP header checksum, ignoring"); 204 DEBUG(LOG_INFO, "bad IP header checksum, ignoring");
217 return -1; 205 return -1;
218 } 206 }
@@ -228,7 +216,7 @@ int get_raw_packet(struct dhcpMessage *payload, int fd)
228 packet.ip.saddr = source; 216 packet.ip.saddr = source;
229 packet.ip.daddr = dest; 217 packet.ip.daddr = dest;
230 packet.ip.tot_len = packet.udp.len; /* cheat on the psuedo-header */ 218 packet.ip.tot_len = packet.udp.len; /* cheat on the psuedo-header */
231 if (check && check != checksum(&packet, bytes)) { 219 if (check && check != udhcp_checksum(&packet, bytes)) {
232 DEBUG(LOG_ERR, "packet with bad UDP checksum received, ignoring"); 220 DEBUG(LOG_ERR, "packet with bad UDP checksum received, ignoring");
233 return -2; 221 return -2;
234 } 222 }
diff --git a/networking/udhcp/common.c b/networking/udhcp/common.c
index 589214bce..2c902fc01 100644
--- a/networking/udhcp/common.c
+++ b/networking/udhcp/common.c
@@ -50,7 +50,7 @@ static inline void sanitize_fds(void)
50} 50}
51 51
52 52
53void background(const char *pidfile) 53void udhcp_background(const char *pidfile)
54{ 54{
55#ifdef __uClinux__ 55#ifdef __uClinux__
56 LOG(LOG_ERR, "Cannot background in uclinux (yet)"); 56 LOG(LOG_ERR, "Cannot background in uclinux (yet)");
@@ -69,7 +69,7 @@ void background(const char *pidfile)
69} 69}
70 70
71 71
72#ifdef UDHCP_SYSLOG 72#ifdef CONFIG_FEATURE_UDHCP_SYSLOG
73 73
74void udhcp_logging(int level, const char *fmt, ...) 74void udhcp_logging(int level, const char *fmt, ...)
75{ 75{
@@ -115,7 +115,7 @@ void udhcp_logging(int level, const char *fmt, ...)
115#endif 115#endif
116 116
117 117
118void start_log_and_pid(const char *client_server, const char *pidfile) 118void udhcp_start_log_and_pid(const char *client_server, const char *pidfile)
119{ 119{
120 int pid_fd; 120 int pid_fd;
121 121
@@ -129,9 +129,8 @@ void start_log_and_pid(const char *client_server, const char *pidfile)
129 /* equivelent of doing a fflush after every \n */ 129 /* equivelent of doing a fflush after every \n */
130 setlinebuf(stdout); 130 setlinebuf(stdout);
131 131
132#ifdef UDHCP_SYSLOG 132 if (ENABLE_FEATURE_UDHCP_SYSLOG)
133 openlog(client_server, LOG_PID | LOG_CONS, LOG_LOCAL0); 133 openlog(client_server, LOG_PID | LOG_CONS, LOG_LOCAL0);
134#endif
135 134
136 udhcp_logging(LOG_INFO, "%s (v%s) started", client_server, VERSION); 135 udhcp_logging(LOG_INFO, "%s (v%s) started", client_server, BB_VER);
137} 136}
diff --git a/networking/udhcp/common.h b/networking/udhcp/common.h
index 071a5c428..77e689446 100644
--- a/networking/udhcp/common.h
+++ b/networking/udhcp/common.h
@@ -3,29 +3,15 @@
3 * Russ Dill <Russ.Dill@asu.edu> September 2001 3 * Russ Dill <Russ.Dill@asu.edu> September 2001
4 * Rewritten by Vladimir Oleynik <dzo@simtreas.ru> (C) 2003 4 * Rewritten by Vladimir Oleynik <dzo@simtreas.ru> (C) 2003
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 */ 7 */
20 8
21#ifndef _COMMON_H 9#ifndef _COMMON_H
22#define _COMMON_H 10#define _COMMON_H
23 11
24#include "version.h"
25#include "libbb_udhcp.h" 12#include "libbb_udhcp.h"
26 13
27 14
28#ifndef UDHCP_SYSLOG
29enum syslog_levels { 15enum syslog_levels {
30 LOG_EMERG = 0, 16 LOG_EMERG = 0,
31 LOG_ALERT, 17 LOG_ALERT,
@@ -35,18 +21,13 @@ enum syslog_levels {
35 LOG_INFO, 21 LOG_INFO,
36 LOG_DEBUG 22 LOG_DEBUG
37}; 23};
38#else
39#include <syslog.h> 24#include <syslog.h>
40#endif
41 25
42long uptime(void); 26long uptime(void);
43void background(const char *pidfile);
44void start_log_and_pid(const char *client_server, const char *pidfile);
45void udhcp_logging(int level, const char *fmt, ...);
46 27
47#define LOG(level, str, args...) udhcp_logging(level, str, ## args) 28#define LOG(level, str, args...) udhcp_logging(level, str, ## args)
48 29
49#ifdef UDHCP_DEBUG 30#if ENABLE_FEATURE_UDHCP_DEBUG
50# define DEBUG(level, str, args...) LOG(level, str, ## args) 31# define DEBUG(level, str, args...) LOG(level, str, ## args)
51#else 32#else
52# define DEBUG(level, str, args...) do {;} while(0) 33# define DEBUG(level, str, args...) do {;} while(0)
diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c
index 1d9ab6db6..c36c87602 100644
--- a/networking/udhcp/dhcpc.c
+++ b/networking/udhcp/dhcpc.c
@@ -27,7 +27,6 @@
27#include "options.h" 27#include "options.h"
28#include "clientpacket.h" 28#include "clientpacket.h"
29#include "clientsocket.h" 29#include "clientsocket.h"
30#include "script.h"
31#include "socket.h" 30#include "socket.h"
32#include "signalpipe.h" 31#include "signalpipe.h"
33 32
@@ -120,7 +119,7 @@ static void perform_renew(void)
120 state = RENEW_REQUESTED; 119 state = RENEW_REQUESTED;
121 break; 120 break;
122 case RENEW_REQUESTED: /* impatient are we? fine, square 1 */ 121 case RENEW_REQUESTED: /* impatient are we? fine, square 1 */
123 run_script(NULL, "deconfig"); 122 udhcp_run_script(NULL, "deconfig");
124 case REQUESTING: 123 case REQUESTING:
125 case RELEASED: 124 case RELEASED:
126 change_mode(LISTEN_RAW); 125 change_mode(LISTEN_RAW);
@@ -152,7 +151,7 @@ static void perform_release(void)
152 LOG(LOG_INFO, "Unicasting a release of %s to %s", 151 LOG(LOG_INFO, "Unicasting a release of %s to %s",
153 inet_ntoa(temp_addr), buffer); 152 inet_ntoa(temp_addr), buffer);
154 send_release(server_addr, requested_ip); /* unicast */ 153 send_release(server_addr, requested_ip); /* unicast */
155 run_script(NULL, "deconfig"); 154 udhcp_run_script(NULL, "deconfig");
156 } 155 }
157 LOG(LOG_INFO, "Entering released state"); 156 LOG(LOG_INFO, "Entering released state");
158 157
@@ -164,7 +163,7 @@ static void perform_release(void)
164 163
165static void client_background(void) 164static void client_background(void)
166{ 165{
167 background(client_config.pidfile); 166 udhcp_background(client_config.pidfile);
168 client_config.foreground = 1; /* Do not fork again. */ 167 client_config.foreground = 1; /* Do not fork again. */
169 client_config.background_if_no_lease = 0; 168 client_config.background_if_no_lease = 0;
170} 169}
@@ -297,7 +296,7 @@ int main(int argc, char *argv[])
297 client_config.retries = atoi(optarg); 296 client_config.retries = atoi(optarg);
298 break; 297 break;
299 case 'v': 298 case 'v':
300 printf("udhcpcd, version %s\n\n", VERSION); 299 printf("version %s\n\n", BB_VER);
301 return 0; 300 return 0;
302 break; 301 break;
303 default: 302 default:
@@ -306,7 +305,7 @@ int main(int argc, char *argv[])
306 } 305 }
307 306
308 /* Start the log, sanitize fd's, and write a pid file */ 307 /* Start the log, sanitize fd's, and write a pid file */
309 start_log_and_pid("udhcpc", client_config.pidfile); 308 udhcp_start_log_and_pid("udhcpc", client_config.pidfile);
310 309
311 if (read_interface(client_config.interface, &client_config.ifindex, 310 if (read_interface(client_config.interface, &client_config.ifindex,
312 NULL, client_config.arp) < 0) 311 NULL, client_config.arp) < 0)
@@ -322,12 +321,12 @@ int main(int argc, char *argv[])
322 } 321 }
323 322
324 if (!client_config.vendorclass) { 323 if (!client_config.vendorclass) {
325 client_config.vendorclass = xmalloc(sizeof("udhcp "VERSION) + 2); 324 client_config.vendorclass = xmalloc(sizeof("udhcp "BB_VER) + 2);
326 client_config.vendorclass[OPT_CODE] = DHCP_VENDOR; 325 client_config.vendorclass[OPT_CODE] = DHCP_VENDOR;
327 client_config.vendorclass[OPT_LEN] = sizeof("udhcp "VERSION) - 1; 326 client_config.vendorclass[OPT_LEN] = sizeof("udhcp "BB_VER) - 1;
328 client_config.vendorclass[OPT_DATA] = 1; 327 client_config.vendorclass[OPT_DATA] = 1;
329 memcpy(&client_config.vendorclass[OPT_DATA], 328 memcpy(&client_config.vendorclass[OPT_DATA],
330 "udhcp "VERSION, sizeof("udhcp "VERSION) - 1); 329 "udhcp "BB_VER, sizeof("udhcp "BB_VER) - 1);
331 } 330 }
332 331
333 332
@@ -335,7 +334,7 @@ int main(int argc, char *argv[])
335 udhcp_sp_setup(); 334 udhcp_sp_setup();
336 335
337 state = INIT_SELECTING; 336 state = INIT_SELECTING;
338 run_script(NULL, "deconfig"); 337 udhcp_run_script(NULL, "deconfig");
339 change_mode(LISTEN_RAW); 338 change_mode(LISTEN_RAW);
340 339
341 for (;;) { 340 for (;;) {
@@ -375,7 +374,7 @@ int main(int argc, char *argv[])
375 timeout = now + client_config.timeout; 374 timeout = now + client_config.timeout;
376 packet_num++; 375 packet_num++;
377 } else { 376 } else {
378 run_script(NULL, "leasefail"); 377 udhcp_run_script(NULL, "leasefail");
379 if (client_config.background_if_no_lease) { 378 if (client_config.background_if_no_lease) {
380 LOG(LOG_INFO, "No lease, forking to background."); 379 LOG(LOG_INFO, "No lease, forking to background.");
381 client_background(); 380 client_background();
@@ -400,7 +399,7 @@ int main(int argc, char *argv[])
400 packet_num++; 399 packet_num++;
401 } else { 400 } else {
402 /* timed out, go back to init state */ 401 /* timed out, go back to init state */
403 if (state == RENEW_REQUESTED) run_script(NULL, "deconfig"); 402 if (state == RENEW_REQUESTED) udhcp_run_script(NULL, "deconfig");
404 state = INIT_SELECTING; 403 state = INIT_SELECTING;
405 timeout = now; 404 timeout = now;
406 packet_num = 0; 405 packet_num = 0;
@@ -434,7 +433,7 @@ int main(int argc, char *argv[])
434 /* timed out, enter init state */ 433 /* timed out, enter init state */
435 state = INIT_SELECTING; 434 state = INIT_SELECTING;
436 LOG(LOG_INFO, "Lease lost, entering init state"); 435 LOG(LOG_INFO, "Lease lost, entering init state");
437 run_script(NULL, "deconfig"); 436 udhcp_run_script(NULL, "deconfig");
438 timeout = now; 437 timeout = now;
439 packet_num = 0; 438 packet_num = 0;
440 change_mode(LISTEN_RAW); 439 change_mode(LISTEN_RAW);
@@ -455,7 +454,7 @@ int main(int argc, char *argv[])
455 /* a packet is ready, read it */ 454 /* a packet is ready, read it */
456 455
457 if (listen_mode == LISTEN_KERNEL) 456 if (listen_mode == LISTEN_KERNEL)
458 len = get_packet(&packet, fd); 457 len = udhcp_get_packet(&packet, fd);
459 else len = get_raw_packet(&packet, fd); 458 else len = get_raw_packet(&packet, fd);
460 459
461 if (len == -1 && errno != EINTR) { 460 if (len == -1 && errno != EINTR) {
@@ -523,7 +522,7 @@ int main(int argc, char *argv[])
523 start = now; 522 start = now;
524 timeout = t1 + start; 523 timeout = t1 + start;
525 requested_ip = packet.yiaddr; 524 requested_ip = packet.yiaddr;
526 run_script(&packet, 525 udhcp_run_script(&packet,
527 ((state == RENEWING || state == REBINDING) ? "renew" : "bound")); 526 ((state == RENEWING || state == REBINDING) ? "renew" : "bound"));
528 527
529 state = BOUND; 528 state = BOUND;
@@ -536,9 +535,9 @@ int main(int argc, char *argv[])
536 } else if (*message == DHCPNAK) { 535 } else if (*message == DHCPNAK) {
537 /* return to init state */ 536 /* return to init state */
538 LOG(LOG_INFO, "Received DHCP NAK"); 537 LOG(LOG_INFO, "Received DHCP NAK");
539 run_script(&packet, "nak"); 538 udhcp_run_script(&packet, "nak");
540 if (state != REQUESTING) 539 if (state != REQUESTING)
541 run_script(NULL, "deconfig"); 540 udhcp_run_script(NULL, "deconfig");
542 state = INIT_SELECTING; 541 state = INIT_SELECTING;
543 timeout = now; 542 timeout = now;
544 requested_ip = 0; 543 requested_ip = 0;
diff --git a/networking/udhcp/dhcpd.c b/networking/udhcp/dhcpd.c
index 6c5a753eb..29ca06a68 100644
--- a/networking/udhcp/dhcpd.c
+++ b/networking/udhcp/dhcpd.c
@@ -6,19 +6,7 @@
6 * 6 *
7 * Rewrite by Russ Dill <Russ.Dill@asu.edu> July 2001 7 * Rewrite by Russ Dill <Russ.Dill@asu.edu> July 2001
8 * 8 *
9 * This program is free software; you can redistribute it and/or modify 9 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 */ 10 */
23 11
24#include <fcntl.h> 12#include <fcntl.h>
@@ -66,7 +54,7 @@ int udhcpd_main(int argc, char *argv[])
66 read_config(argc < 2 ? DHCPD_CONF_FILE : argv[1]); 54 read_config(argc < 2 ? DHCPD_CONF_FILE : argv[1]);
67 55
68 /* Start the log, sanitize fd's, and write a pid file */ 56 /* Start the log, sanitize fd's, and write a pid file */
69 start_log_and_pid("udhcpd", server_config.pidfile); 57 udhcp_start_log_and_pid("udhcpd", server_config.pidfile);
70 58
71 if ((option = find_option(server_config.options, DHCP_LEASE_TIME))) { 59 if ((option = find_option(server_config.options, DHCP_LEASE_TIME))) {
72 memcpy(&server_config.lease, option->data + 2, 4); 60 memcpy(&server_config.lease, option->data + 2, 4);
@@ -90,9 +78,8 @@ int udhcpd_main(int argc, char *argv[])
90 &server_config.server, server_config.arp) < 0) 78 &server_config.server, server_config.arp) < 0)
91 return 1; 79 return 1;
92 80
93#ifndef UDHCP_DEBUG 81 if (!ENABLE_FEATURE_UDHCP_DEBUG)
94 background(server_config.pidfile); /* hold lock during fork. */ 82 udhcp_background(server_config.pidfile); /* hold lock during fork. */
95#endif
96 83
97 /* Setup the signal pipe */ 84 /* Setup the signal pipe */
98 udhcp_sp_setup(); 85 udhcp_sp_setup();
@@ -139,7 +126,7 @@ int udhcpd_main(int argc, char *argv[])
139 default: continue; /* signal or error (probably EINTR) */ 126 default: continue; /* signal or error (probably EINTR) */
140 } 127 }
141 128
142 if ((bytes = get_packet(&packet, server_socket)) < 0) { /* this waits for a packet - idle */ 129 if ((bytes = udhcp_get_packet(&packet, server_socket)) < 0) { /* this waits for a packet - idle */
143 if (bytes == -1 && errno != EINTR) { 130 if (bytes == -1 && errno != EINTR) {
144 DEBUG(LOG_INFO, "error on read, %m, reopening socket"); 131 DEBUG(LOG_INFO, "error on read, %m, reopening socket");
145 close(server_socket); 132 close(server_socket);
diff --git a/networking/udhcp/dhcpd.h b/networking/udhcp/dhcpd.h
index a060002cd..37ebbe326 100644
--- a/networking/udhcp/dhcpd.h
+++ b/networking/udhcp/dhcpd.h
@@ -7,7 +7,6 @@
7 7
8#include "libbb_udhcp.h" 8#include "libbb_udhcp.h"
9#include "leases.h" 9#include "leases.h"
10#include "version.h"
11 10
12/************************************/ 11/************************************/
13/* Defaults _you_ may want to tweak */ 12/* Defaults _you_ may want to tweak */
diff --git a/networking/udhcp/files.c b/networking/udhcp/files.c
index fe853c7cc..d2ca2363f 100644
--- a/networking/udhcp/files.c
+++ b/networking/udhcp/files.c
@@ -241,9 +241,7 @@ static int read_staticlease(const char *const_line, void *arg)
241 241
242 addStaticLease(arg, mac_bytes, ip); 242 addStaticLease(arg, mac_bytes, ip);
243 243
244#ifdef UDHCP_DEBUG 244 if (ENABLE_FEATURE_UDHCP_DEBUG) printStaticLeases(arg);
245 printStaticLeases(arg);
246#endif
247 245
248 return 1; 246 return 1;
249 247
@@ -280,9 +278,6 @@ int read_config(const char *file)
280{ 278{
281 FILE *in; 279 FILE *in;
282 char buffer[READ_CONFIG_BUF_SIZE], *token, *line; 280 char buffer[READ_CONFIG_BUF_SIZE], *token, *line;
283#ifdef UDHCP_DEBUG
284 char orig[READ_CONFIG_BUF_SIZE];
285#endif
286 int i, lm = 0; 281 int i, lm = 0;
287 282
288 for (i = 0; keywords[i].keyword[0]; i++) 283 for (i = 0; keywords[i].keyword[0]; i++)
@@ -295,11 +290,11 @@ int read_config(const char *file)
295 } 290 }
296 291
297 while (fgets(buffer, READ_CONFIG_BUF_SIZE, in)) { 292 while (fgets(buffer, READ_CONFIG_BUF_SIZE, in)) {
293 char debug_orig[READ_CONFIG_BUF_SIZE];
294
298 lm++; 295 lm++;
299 if (strchr(buffer, '\n')) *(strchr(buffer, '\n')) = '\0'; 296 if (strchr(buffer, '\n')) *(strchr(buffer, '\n')) = '\0';
300#ifdef UDHCP_DEBUG 297 if (ENABLE_FEATURE_UDHCP_DEBUG) strcpy(debug_orig, buffer);
301 strcpy(orig, buffer);
302#endif
303 if (strchr(buffer, '#')) *(strchr(buffer, '#')) = '\0'; 298 if (strchr(buffer, '#')) *(strchr(buffer, '#')) = '\0';
304 299
305 if (!(token = strtok(buffer, " \t"))) continue; 300 if (!(token = strtok(buffer, " \t"))) continue;
@@ -315,7 +310,7 @@ int read_config(const char *file)
315 if (!strcasecmp(token, keywords[i].keyword)) 310 if (!strcasecmp(token, keywords[i].keyword))
316 if (!keywords[i].handler(line, keywords[i].var)) { 311 if (!keywords[i].handler(line, keywords[i].var)) {
317 LOG(LOG_ERR, "Failure parsing line %d of %s", lm, file); 312 LOG(LOG_ERR, "Failure parsing line %d of %s", lm, file);
318 DEBUG(LOG_ERR, "unable to parse '%s'", orig); 313 DEBUG(LOG_ERR, "unable to parse '%s'", debug_orig);
319 /* reset back to the default value */ 314 /* reset back to the default value */
320 keywords[i].handler(keywords[i].def, keywords[i].var); 315 keywords[i].handler(keywords[i].def, keywords[i].var);
321 } 316 }
diff --git a/networking/udhcp/libbb_udhcp.h b/networking/udhcp/libbb_udhcp.h
index cce826786..c47af2d0a 100644
--- a/networking/udhcp/libbb_udhcp.h
+++ b/networking/udhcp/libbb_udhcp.h
@@ -6,40 +6,29 @@
6#ifndef _LIBBB_UDHCP_H 6#ifndef _LIBBB_UDHCP_H
7#define _LIBBB_UDHCP_H 7#define _LIBBB_UDHCP_H
8 8
9#include "packet.h"
10#include "busybox.h"
11
9#ifdef CONFIG_INSTALL_NO_USR 12#ifdef CONFIG_INSTALL_NO_USR
10# define DEFAULT_SCRIPT "/share/udhcpc/default.script" 13# define DEFAULT_SCRIPT "/share/udhcpc/default.script"
11#else 14#else
12# define DEFAULT_SCRIPT "/usr/share/udhcpc/default.script" 15# define DEFAULT_SCRIPT "/usr/share/udhcpc/default.script"
13#endif 16#endif
14 17
15#ifdef IN_BUSYBOX
16#include "busybox.h"
17 18
18#ifdef CONFIG_FEATURE_UDHCP_SYSLOG
19#define UDHCP_SYSLOG
20#endif
21
22#ifdef CONFIG_FEATURE_UDHCP_DEBUG
23#define UDHCP_DEBUG
24#endif
25 19
26#define COMBINED_BINARY 20#define COMBINED_BINARY
27#include "version.h"
28 21
29#define xfopen bb_xfopen 22#define xfopen bb_xfopen
30 23
31/* make safe the exported namespace */ 24void udhcp_background(const char *pidfile);
32/* from common.h */ 25void udhcp_start_log_and_pid(const char *client_server, const char *pidfile);
33#define background udhcp_background 26void udhcp_logging(int level, const char *fmt, ...);
34#define start_log_and_pid udhcp_start_log_and_pid 27
35/* from script.h */ 28void udhcp_run_script(struct dhcpMessage *packet, const char *name);
36#define run_script udhcp_run_script 29
37/* from packet.h */ 30// Still need to clean these up...
38#define init_header udhcp_init_header 31
39#define get_packet udhcp_get_packet
40#define checksum udhcp_checksum
41#define raw_packet udhcp_raw_packet
42#define kernel_packet udhcp_kernel_packet
43/* from pidfile.h */ 32/* from pidfile.h */
44#define pidfile_acquire udhcp_pidfile_acquire 33#define pidfile_acquire udhcp_pidfile_acquire
45#define pidfile_write_release udhcp_pidfile_write_release 34#define pidfile_write_release udhcp_pidfile_write_release
@@ -57,36 +46,4 @@
57/* from dhcpd.h */ 46/* from dhcpd.h */
58#define server_config udhcp_server_config 47#define server_config udhcp_server_config
59 48
60#else /* ! IN_BUSYBOX */
61
62#include <stdlib.h>
63#include <stdio.h>
64#include <sys/sysinfo.h>
65
66#ifndef ATTRIBUTE_NORETURN
67#define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
68#endif /* ATTRIBUTE_NORETURN */
69
70#ifndef ATTRIBUTE_PACKED
71#define ATTRIBUTE_PACKED __attribute__ ((__packed__))
72#endif /* ATTRIBUTE_PACKED */
73
74#define TRUE 1
75#define FALSE 0
76
77#define xmalloc malloc
78#define xcalloc calloc
79
80static inline FILE *xfopen(const char *file, const char *mode)
81{
82 FILE *fp;
83 if (!(fp = fopen(file, mode))) {
84 perror("could not open input file");
85 exit(0);
86 }
87 return fp;
88}
89
90#endif /* IN_BUSYBOX */
91
92#endif /* _LIBBB_UDHCP_H */ 49#endif /* _LIBBB_UDHCP_H */
diff --git a/networking/udhcp/packet.c b/networking/udhcp/packet.c
index ae06d53cc..8cf9fe283 100644
--- a/networking/udhcp/packet.c
+++ b/networking/udhcp/packet.c
@@ -20,7 +20,7 @@
20#include "options.h" 20#include "options.h"
21 21
22 22
23void init_header(struct dhcpMessage *packet, char type) 23void udhcp_init_header(struct dhcpMessage *packet, char type)
24{ 24{
25 memset(packet, 0, sizeof(struct dhcpMessage)); 25 memset(packet, 0, sizeof(struct dhcpMessage));
26 switch (type) { 26 switch (type) {
@@ -44,7 +44,7 @@ void init_header(struct dhcpMessage *packet, char type)
44 44
45 45
46/* read a packet from socket fd, return -1 on read error, -2 on packet error */ 46/* read a packet from socket fd, return -1 on read error, -2 on packet error */
47int get_packet(struct dhcpMessage *packet, int fd) 47int udhcp_get_packet(struct dhcpMessage *packet, int fd)
48{ 48{
49 static const char broken_vendors[][8] = { 49 static const char broken_vendors[][8] = {
50 "MSFT 98", 50 "MSFT 98",
@@ -82,7 +82,7 @@ int get_packet(struct dhcpMessage *packet, int fd)
82} 82}
83 83
84 84
85uint16_t checksum(void *addr, int count) 85uint16_t udhcp_checksum(void *addr, int count)
86{ 86{
87 /* Compute Internet Checksum for "count" bytes 87 /* Compute Internet Checksum for "count" bytes
88 * beginning at location "addr". 88 * beginning at location "addr".
@@ -113,7 +113,7 @@ uint16_t checksum(void *addr, int count)
113 113
114 114
115/* Construct a ip/udp header for a packet, and specify the source and dest hardware address */ 115/* Construct a ip/udp header for a packet, and specify the source and dest hardware address */
116int raw_packet(struct dhcpMessage *payload, uint32_t source_ip, int source_port, 116int udhcp_raw_packet(struct dhcpMessage *payload, uint32_t source_ip, int source_port,
117 uint32_t dest_ip, int dest_port, uint8_t *dest_arp, int ifindex) 117 uint32_t dest_ip, int dest_port, uint8_t *dest_arp, int ifindex)
118{ 118{
119 int fd; 119 int fd;
@@ -148,13 +148,13 @@ int raw_packet(struct dhcpMessage *payload, uint32_t source_ip, int source_port,
148 packet.udp.len = htons(sizeof(packet.udp) + sizeof(struct dhcpMessage)); /* cheat on the psuedo-header */ 148 packet.udp.len = htons(sizeof(packet.udp) + sizeof(struct dhcpMessage)); /* cheat on the psuedo-header */
149 packet.ip.tot_len = packet.udp.len; 149 packet.ip.tot_len = packet.udp.len;
150 memcpy(&(packet.data), payload, sizeof(struct dhcpMessage)); 150 memcpy(&(packet.data), payload, sizeof(struct dhcpMessage));
151 packet.udp.check = checksum(&packet, sizeof(struct udp_dhcp_packet)); 151 packet.udp.check = udhcp_checksum(&packet, sizeof(struct udp_dhcp_packet));
152 152
153 packet.ip.tot_len = htons(sizeof(struct udp_dhcp_packet)); 153 packet.ip.tot_len = htons(sizeof(struct udp_dhcp_packet));
154 packet.ip.ihl = sizeof(packet.ip) >> 2; 154 packet.ip.ihl = sizeof(packet.ip) >> 2;
155 packet.ip.version = IPVERSION; 155 packet.ip.version = IPVERSION;
156 packet.ip.ttl = IPDEFTTL; 156 packet.ip.ttl = IPDEFTTL;
157 packet.ip.check = checksum(&(packet.ip), sizeof(packet.ip)); 157 packet.ip.check = udhcp_checksum(&(packet.ip), sizeof(packet.ip));
158 158
159 result = sendto(fd, &packet, sizeof(struct udp_dhcp_packet), 0, (struct sockaddr *) &dest, sizeof(dest)); 159 result = sendto(fd, &packet, sizeof(struct udp_dhcp_packet), 0, (struct sockaddr *) &dest, sizeof(dest));
160 if (result <= 0) { 160 if (result <= 0) {
@@ -166,7 +166,7 @@ int raw_packet(struct dhcpMessage *payload, uint32_t source_ip, int source_port,
166 166
167 167
168/* Let the kernel do all the work for packet generation */ 168/* Let the kernel do all the work for packet generation */
169int kernel_packet(struct dhcpMessage *payload, uint32_t source_ip, int source_port, 169int udhcp_kernel_packet(struct dhcpMessage *payload, uint32_t source_ip, int source_port,
170 uint32_t dest_ip, int dest_port) 170 uint32_t dest_ip, int dest_port)
171{ 171{
172 int n = 1; 172 int n = 1;
diff --git a/networking/udhcp/packet.h b/networking/udhcp/packet.h
index f5859e824..f595422e4 100644
--- a/networking/udhcp/packet.h
+++ b/networking/udhcp/packet.h
@@ -29,12 +29,12 @@ struct udp_dhcp_packet {
29 struct dhcpMessage data; 29 struct dhcpMessage data;
30}; 30};
31 31
32void init_header(struct dhcpMessage *packet, char type); 32void udhcp_init_header(struct dhcpMessage *packet, char type);
33int get_packet(struct dhcpMessage *packet, int fd); 33int udhcp_get_packet(struct dhcpMessage *packet, int fd);
34uint16_t checksum(void *addr, int count); 34uint16_t udhcp_checksum(void *addr, int count);
35int raw_packet(struct dhcpMessage *payload, uint32_t source_ip, int source_port, 35int udhcp_raw_packet(struct dhcpMessage *payload, uint32_t source_ip, int source_port,
36 uint32_t dest_ip, int dest_port, uint8_t *dest_arp, int ifindex); 36 uint32_t dest_ip, int dest_port, uint8_t *dest_arp, int ifindex);
37int kernel_packet(struct dhcpMessage *payload, uint32_t source_ip, int source_port, 37int udhcp_kernel_packet(struct dhcpMessage *payload, uint32_t source_ip, int source_port,
38 uint32_t dest_ip, int dest_port); 38 uint32_t dest_ip, int dest_port);
39 39
40 40
diff --git a/networking/udhcp/script.c b/networking/udhcp/script.c
index 2a4732104..d1b272de6 100644
--- a/networking/udhcp/script.c
+++ b/networking/udhcp/script.c
@@ -4,19 +4,7 @@
4 * 4 *
5 * Russ Dill <Russ.Dill@asu.edu> July 2001 5 * Russ Dill <Russ.Dill@asu.edu> July 2001
6 * 6 *
7 * This program is free software; you can redistribute it and/or modify 7 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */ 8 */
21 9
22#include <string.h> 10#include <string.h>
@@ -33,7 +21,6 @@
33#include "options.h" 21#include "options.h"
34#include "dhcpd.h" 22#include "dhcpd.h"
35#include "dhcpc.h" 23#include "dhcpc.h"
36#include "script.h"
37 24
38/* get a rough idea of how long an option will be (rounding up...) */ 25/* get a rough idea of how long an option will be (rounding up...) */
39static const int max_option_length[] = { 26static const int max_option_length[] = {
@@ -161,10 +148,10 @@ static char **fill_envp(struct dhcpMessage *packet)
161 148
162 envp = xzalloc(sizeof(char *) * (num_options + 5)); 149 envp = xzalloc(sizeof(char *) * (num_options + 5));
163 j = 0; 150 j = 0;
164 asprintf(&envp[j++], "interface=%s", client_config.interface); 151 envp[j++] = bb_xasprintf("interface=%s", client_config.interface);
165 asprintf(&envp[j++], "%s=%s", "PATH", 152 envp[j++] = bb_xasprintf("PATH=%s",
166 getenv("PATH") ? : "/bin:/usr/bin:/sbin:/usr/sbin"); 153 getenv("PATH") ? : "/bin:/usr/bin:/sbin:/usr/sbin");
167 asprintf(&envp[j++], "%s=%s", "HOME", getenv("HOME") ? : "/"); 154 envp[j++] = bb_xasprintf("HOME=%s", getenv("HOME") ? : "/");
168 155
169 if (packet == NULL) return envp; 156 if (packet == NULL) return envp;
170 157
@@ -182,7 +169,7 @@ static char **fill_envp(struct dhcpMessage *packet)
182 /* Fill in a subnet bits option for things like /24 */ 169 /* Fill in a subnet bits option for things like /24 */
183 if (dhcp_options[i].code == DHCP_SUBNET) { 170 if (dhcp_options[i].code == DHCP_SUBNET) {
184 memcpy(&subnet, temp, 4); 171 memcpy(&subnet, temp, 4);
185 asprintf(&envp[j++], "mask=%d", mton(&subnet)); 172 envp[j++] = bb_xasprintf("mask=%d", mton(&subnet));
186 } 173 }
187 } 174 }
188 if (packet->siaddr) { 175 if (packet->siaddr) {
@@ -192,19 +179,19 @@ static char **fill_envp(struct dhcpMessage *packet)
192 if (!(over & FILE_FIELD) && packet->file[0]) { 179 if (!(over & FILE_FIELD) && packet->file[0]) {
193 /* watch out for invalid packets */ 180 /* watch out for invalid packets */
194 packet->file[sizeof(packet->file) - 1] = '\0'; 181 packet->file[sizeof(packet->file) - 1] = '\0';
195 asprintf(&envp[j++], "boot_file=%s", packet->file); 182 envp[j++] = bb_xasprintf("boot_file=%s", packet->file);
196 } 183 }
197 if (!(over & SNAME_FIELD) && packet->sname[0]) { 184 if (!(over & SNAME_FIELD) && packet->sname[0]) {
198 /* watch out for invalid packets */ 185 /* watch out for invalid packets */
199 packet->sname[sizeof(packet->sname) - 1] = '\0'; 186 packet->sname[sizeof(packet->sname) - 1] = '\0';
200 asprintf(&envp[j++], "sname=%s", packet->sname); 187 envp[j++] = bb_xasprintf("sname=%s", packet->sname);
201 } 188 }
202 return envp; 189 return envp;
203} 190}
204 191
205 192
206/* Call a script with a par file and env vars */ 193/* Call a script with a par file and env vars */
207void run_script(struct dhcpMessage *packet, const char *name) 194void udhcp_run_script(struct dhcpMessage *packet, const char *name)
208{ 195{
209 int pid; 196 int pid;
210 char **envp, **curr; 197 char **envp, **curr;
diff --git a/networking/udhcp/script.h b/networking/udhcp/script.h
deleted file mode 100644
index 71003311c..000000000
--- a/networking/udhcp/script.h
+++ /dev/null
@@ -1,6 +0,0 @@
1#ifndef _SCRIPT_H
2#define _SCRIPT_H
3
4extern void run_script(struct dhcpMessage *packet, const char *name);
5
6#endif
diff --git a/networking/udhcp/serverpacket.c b/networking/udhcp/serverpacket.c
index fe880b4a0..e40432ebe 100644
--- a/networking/udhcp/serverpacket.c
+++ b/networking/udhcp/serverpacket.c
@@ -36,7 +36,7 @@ static int send_packet_to_relay(struct dhcpMessage *payload)
36{ 36{
37 DEBUG(LOG_INFO, "Forwarding packet to relay"); 37 DEBUG(LOG_INFO, "Forwarding packet to relay");
38 38
39 return kernel_packet(payload, server_config.server, SERVER_PORT, 39 return udhcp_kernel_packet(payload, server_config.server, SERVER_PORT,
40 payload->giaddr, SERVER_PORT); 40 payload->giaddr, SERVER_PORT);
41} 41}
42 42
@@ -64,7 +64,7 @@ static int send_packet_to_client(struct dhcpMessage *payload, int force_broadcas
64 ciaddr = payload->yiaddr; 64 ciaddr = payload->yiaddr;
65 chaddr = payload->chaddr; 65 chaddr = payload->chaddr;
66 } 66 }
67 return raw_packet(payload, server_config.server, SERVER_PORT, 67 return udhcp_raw_packet(payload, server_config.server, SERVER_PORT,
68 ciaddr, CLIENT_PORT, chaddr, server_config.ifindex); 68 ciaddr, CLIENT_PORT, chaddr, server_config.ifindex);
69} 69}
70 70
@@ -83,7 +83,7 @@ static int send_packet(struct dhcpMessage *payload, int force_broadcast)
83 83
84static void init_packet(struct dhcpMessage *packet, struct dhcpMessage *oldpacket, char type) 84static void init_packet(struct dhcpMessage *packet, struct dhcpMessage *oldpacket, char type)
85{ 85{
86 init_header(packet, type); 86 udhcp_init_header(packet, type);
87 packet->xid = oldpacket->xid; 87 packet->xid = oldpacket->xid;
88 memcpy(packet->chaddr, oldpacket->chaddr, 16); 88 memcpy(packet->chaddr, oldpacket->chaddr, 16);
89 packet->flags = oldpacket->flags; 89 packet->flags = oldpacket->flags;
diff --git a/networking/udhcp/static_leases.c b/networking/udhcp/static_leases.c
index 1124d39de..524798316 100644
--- a/networking/udhcp/static_leases.c
+++ b/networking/udhcp/static_leases.c
@@ -93,7 +93,7 @@ uint32_t reservedIp(struct static_lease *lease_struct, uint32_t ip)
93 93
94} 94}
95 95
96#ifdef UDHCP_DEBUG 96#ifdef CONFIG_FEATURE_UDHCP_DEBUG
97/* Print out static leases just to check what's going on */ 97/* Print out static leases just to check what's going on */
98/* Takes the address of the pointer to the static_leases linked list */ 98/* Takes the address of the pointer to the static_leases linked list */
99void printStaticLeases(struct static_lease **arg) 99void printStaticLeases(struct static_lease **arg)
diff --git a/networking/udhcp/static_leases.h b/networking/udhcp/static_leases.h
index d06520b23..81708ffea 100644
--- a/networking/udhcp/static_leases.h
+++ b/networking/udhcp/static_leases.h
@@ -14,10 +14,8 @@ uint32_t getIpByMac(struct static_lease *lease_struct, void *arg);
14/* Check to see if an ip is reserved as a static ip */ 14/* Check to see if an ip is reserved as a static ip */
15uint32_t reservedIp(struct static_lease *lease_struct, uint32_t ip); 15uint32_t reservedIp(struct static_lease *lease_struct, uint32_t ip);
16 16
17#ifdef UDHCP_DEBUG 17/* Print out static leases just to check what's going on (debug code) */
18/* Print out static leases just to check what's going on */
19void printStaticLeases(struct static_lease **lease_struct); 18void printStaticLeases(struct static_lease **lease_struct);
20#endif
21 19
22#endif 20#endif
23 21
diff --git a/networking/udhcp/version.h b/networking/udhcp/version.h
deleted file mode 100644
index 3862539f5..000000000
--- a/networking/udhcp/version.h
+++ /dev/null
@@ -1,6 +0,0 @@
1#ifndef _UDHCP_VERSION_H
2#define _UDHCP_VERSION_H
3
4#define VERSION "0.9.9-pre"
5
6#endif