1 | diff -Naur busybox-1.7.1.org/applets/applets.c busybox-1.7.1/applets/applets.c |
---|
2 | --- busybox-1.7.1.org/applets/applets.c 2007-09-17 02:48:10.000000000 +0800 |
---|
3 | +++ busybox-1.7.1/applets/applets.c 2007-10-09 10:12:34.000000000 +0800 |
---|
4 | @@ -23,7 +23,7 @@ |
---|
5 | #warning Note that glibc is unsuitable for static linking anyway. |
---|
6 | #warning If you still want to do it, remove -Wl,--gc-sections |
---|
7 | #warning from top-level Makefile and remove this warning. |
---|
8 | -#error Aborting compilation. |
---|
9 | + |
---|
10 | #endif |
---|
11 | |
---|
12 | |
---|
13 | diff -Naur busybox-1.7.1.org/include/usage.h busybox-1.7.1/include/usage.h |
---|
14 | --- busybox-1.7.1.org/include/usage.h 2007-09-03 19:48:46.000000000 +0800 |
---|
15 | +++ busybox-1.7.1/include/usage.h 2007-10-09 10:12:34.000000000 +0800 |
---|
16 | @@ -3653,7 +3653,7 @@ |
---|
17 | |
---|
18 | #define udhcpc_trivial_usage \ |
---|
19 | "[-Cfbnqtv] [-c CID] [-V VCLS] [-H HOSTNAME] [-i INTERFACE]\n" \ |
---|
20 | - " [-p pidfile] [-r IP] [-s script]" |
---|
21 | + " [-p pidfile] [-r IP] [-s script] [-P CLIENT_PORT]" |
---|
22 | #define udhcpc_full_usage \ |
---|
23 | " -V,--vendorclass=CLASSID Set vendor class identifier" \ |
---|
24 | "\n -i,--interface=INTERFACE Interface to use (default: eth0)" \ |
---|
25 | @@ -3671,14 +3671,16 @@ |
---|
26 | "\n -q,--quit Quit after obtaining lease" \ |
---|
27 | "\n -R,--release Release IP on quit" \ |
---|
28 | "\n -v,--version Display version" \ |
---|
29 | + "\n -P,--client-port CLIENT_PORT Use CLIENT_PORT as DHCP Client port (default: 68)" \ |
---|
30 | |
---|
31 | #define udhcpd_trivial_usage \ |
---|
32 | - "[-fS] [configfile]" \ |
---|
33 | + "[-fS] [-P SERVER_PORT] [configfile]" \ |
---|
34 | |
---|
35 | #define udhcpd_full_usage \ |
---|
36 | "DHCP server" \ |
---|
37 | "\n -f Stay in foreground" \ |
---|
38 | - "\n -S Log to syslog too" |
---|
39 | + "\n -S Log to syslog too" \ |
---|
40 | + "\n -P SERVER_PORT Use SERVER_PORT as DHCP server port (default: 67)" \ |
---|
41 | |
---|
42 | #define umount_trivial_usage \ |
---|
43 | "[flags] FILESYSTEM|DIRECTORY" |
---|
44 | diff -Naur busybox-1.7.1.org/Makefile busybox-1.7.1/Makefile |
---|
45 | --- busybox-1.7.1.org/Makefile 2007-09-17 02:50:24.000000000 +0800 |
---|
46 | +++ busybox-1.7.1/Makefile 2007-10-09 10:12:34.000000000 +0800 |
---|
47 | @@ -570,7 +570,7 @@ |
---|
48 | quiet_cmd_busybox__ ?= LINK $@ |
---|
49 | cmd_busybox__ ?= $(srctree)/scripts/trylink $(CC) $(LDFLAGS) \ |
---|
50 | -o $@ -Wl,-Map -Wl,$@.map \ |
---|
51 | - -Wl,--warn-common -Wl,--sort-common -Wl,--gc-sections \ |
---|
52 | + -Wl,--warn-common -Wl,--sort-common \ |
---|
53 | -Wl,--start-group $(busybox-all) -Wl,--end-group \ |
---|
54 | $(LDLIBS) |
---|
55 | |
---|
56 | diff -Naur busybox-1.7.1.org/networking/udhcp/clientpacket.c busybox-1.7.1/networking/udhcp/clientpacket.c |
---|
57 | --- busybox-1.7.1.org/networking/udhcp/clientpacket.c 2007-09-03 19:48:26.000000000 +0800 |
---|
58 | +++ busybox-1.7.1/networking/udhcp/clientpacket.c 2007-10-15 14:27:49.000000000 +0800 |
---|
59 | @@ -74,6 +74,12 @@ |
---|
60 | int send_discover(uint32_t xid, uint32_t requested) |
---|
61 | { |
---|
62 | struct dhcpMessage packet; |
---|
63 | + int SRV_PORT, CLT_PORT; |
---|
64 | + |
---|
65 | + SRV_PORT=(client_port == NULL)?SERVER_PORT:(atoi(client_port) - 1); |
---|
66 | + CLT_PORT=(client_port == NULL)?CLIENT_PORT:atoi(client_port); |
---|
67 | + |
---|
68 | + DEBUG("clientpacket.c: send_discover() - SRV_PORT= %d, CLT_PORT= %d\n", SRV_PORT, CLT_PORT); |
---|
69 | |
---|
70 | init_packet(&packet, DHCPDISCOVER); |
---|
71 | packet.xid = xid; |
---|
72 | @@ -82,8 +88,7 @@ |
---|
73 | |
---|
74 | add_requests(&packet); |
---|
75 | bb_info_msg("Sending discover..."); |
---|
76 | - return udhcp_raw_packet(&packet, INADDR_ANY, CLIENT_PORT, INADDR_BROADCAST, |
---|
77 | - SERVER_PORT, MAC_BCAST_ADDR, client_config.ifindex); |
---|
78 | + return udhcp_raw_packet(&packet, INADDR_ANY, CLT_PORT, INADDR_BROADCAST, SRV_PORT, MAC_BCAST_ADDR, client_config.ifindex); |
---|
79 | } |
---|
80 | |
---|
81 | |
---|
82 | @@ -92,6 +97,12 @@ |
---|
83 | { |
---|
84 | struct dhcpMessage packet; |
---|
85 | struct in_addr addr; |
---|
86 | + int SRV_PORT, CLT_PORT; |
---|
87 | + |
---|
88 | + SRV_PORT=(client_port == NULL)?SERVER_PORT:(atoi(client_port) - 1); |
---|
89 | + CLT_PORT=(client_port == NULL)?CLIENT_PORT:atoi(client_port); |
---|
90 | + |
---|
91 | + DEBUG("clientpacket.c: send_selecting() - SRV_PORT= %d, CLT_PORT= %d\n", SRV_PORT, CLT_PORT); |
---|
92 | |
---|
93 | init_packet(&packet, DHCPREQUEST); |
---|
94 | packet.xid = xid; |
---|
95 | @@ -102,8 +113,7 @@ |
---|
96 | add_requests(&packet); |
---|
97 | addr.s_addr = requested; |
---|
98 | bb_info_msg("Sending select for %s...", inet_ntoa(addr)); |
---|
99 | - return udhcp_raw_packet(&packet, INADDR_ANY, CLIENT_PORT, INADDR_BROADCAST, |
---|
100 | - SERVER_PORT, MAC_BCAST_ADDR, client_config.ifindex); |
---|
101 | + return udhcp_raw_packet(&packet, INADDR_ANY, CLT_PORT, INADDR_BROADCAST, SRV_PORT, MAC_BCAST_ADDR, client_config.ifindex); |
---|
102 | } |
---|
103 | |
---|
104 | |
---|
105 | @@ -111,6 +121,12 @@ |
---|
106 | int send_renew(uint32_t xid, uint32_t server, uint32_t ciaddr) |
---|
107 | { |
---|
108 | struct dhcpMessage packet; |
---|
109 | + int SRV_PORT, CLT_PORT; |
---|
110 | + |
---|
111 | + SRV_PORT=(client_port == NULL)?SERVER_PORT:(atoi(client_port) - 1); |
---|
112 | + CLT_PORT=(client_port == NULL)?CLIENT_PORT:atoi(client_port); |
---|
113 | + |
---|
114 | + DEBUG("clientpacket.c: send_renew() - SRV_PORT= %d, CLT_PORT= %d\n", SRV_PORT, CLT_PORT); |
---|
115 | |
---|
116 | init_packet(&packet, DHCPREQUEST); |
---|
117 | packet.xid = xid; |
---|
118 | @@ -119,10 +135,10 @@ |
---|
119 | add_requests(&packet); |
---|
120 | bb_info_msg("Sending renew..."); |
---|
121 | if (server) |
---|
122 | - return udhcp_kernel_packet(&packet, ciaddr, CLIENT_PORT, server, SERVER_PORT); |
---|
123 | + return udhcp_kernel_packet(&packet, ciaddr, CLT_PORT, server, SRV_PORT); |
---|
124 | |
---|
125 | - return udhcp_raw_packet(&packet, INADDR_ANY, CLIENT_PORT, INADDR_BROADCAST, |
---|
126 | - SERVER_PORT, MAC_BCAST_ADDR, client_config.ifindex); |
---|
127 | + return udhcp_raw_packet(&packet, INADDR_ANY, CLT_PORT, INADDR_BROADCAST, |
---|
128 | + SRV_PORT, MAC_BCAST_ADDR, client_config.ifindex); |
---|
129 | } |
---|
130 | |
---|
131 | |
---|
132 | @@ -130,6 +146,12 @@ |
---|
133 | int send_release(uint32_t server, uint32_t ciaddr) |
---|
134 | { |
---|
135 | struct dhcpMessage packet; |
---|
136 | + int SRV_PORT, CLT_PORT; |
---|
137 | + |
---|
138 | + SRV_PORT=(client_port == NULL)?SERVER_PORT:(atoi(client_port) - 1); |
---|
139 | + CLT_PORT=(client_port == NULL)?CLIENT_PORT:atoi(client_port); |
---|
140 | + |
---|
141 | + DEBUG("clientpacket.c: send_release() - SRV_PORT= %d, CLT_PORT= %d\n", SRV_PORT, CLT_PORT); |
---|
142 | |
---|
143 | init_packet(&packet, DHCPRELEASE); |
---|
144 | packet.xid = random_xid(); |
---|
145 | @@ -139,7 +161,7 @@ |
---|
146 | add_simple_option(packet.options, DHCP_SERVER_ID, server); |
---|
147 | |
---|
148 | bb_info_msg("Sending release..."); |
---|
149 | - return udhcp_kernel_packet(&packet, ciaddr, CLIENT_PORT, server, SERVER_PORT); |
---|
150 | + return udhcp_kernel_packet(&packet, ciaddr, CLT_PORT, server, SRV_PORT); |
---|
151 | } |
---|
152 | |
---|
153 | |
---|
154 | @@ -151,6 +173,8 @@ |
---|
155 | uint32_t source, dest; |
---|
156 | uint16_t check; |
---|
157 | |
---|
158 | + int CLT_PORT = (client_port == NULL)?CLIENT_PORT:atoi(client_port); |
---|
159 | + |
---|
160 | memset(&packet, 0, sizeof(struct udp_dhcp_packet)); |
---|
161 | bytes = read(fd, &packet, sizeof(struct udp_dhcp_packet)); |
---|
162 | if (bytes < 0) { |
---|
163 | @@ -175,7 +199,7 @@ |
---|
164 | /* Make sure its the right packet for us, and that it passes sanity checks */ |
---|
165 | if (packet.ip.protocol != IPPROTO_UDP || packet.ip.version != IPVERSION |
---|
166 | || packet.ip.ihl != sizeof(packet.ip) >> 2 |
---|
167 | - || packet.udp.dest != htons(CLIENT_PORT) |
---|
168 | + || packet.udp.dest != htons(CLT_PORT) |
---|
169 | || bytes > (int) sizeof(struct udp_dhcp_packet) |
---|
170 | || ntohs(packet.udp.len) != (uint16_t)(bytes - sizeof(packet.ip)) |
---|
171 | ) { |
---|
172 | diff -Naur busybox-1.7.1.org/networking/udhcp/dhcpc.c busybox-1.7.1/networking/udhcp/dhcpc.c |
---|
173 | --- busybox-1.7.1.org/networking/udhcp/dhcpc.c 2007-09-03 19:48:26.000000000 +0800 |
---|
174 | +++ busybox-1.7.1/networking/udhcp/dhcpc.c 2007-10-09 10:12:34.000000000 +0800 |
---|
175 | @@ -10,6 +10,7 @@ |
---|
176 | |
---|
177 | #include <getopt.h> |
---|
178 | #include <syslog.h> |
---|
179 | +#include <stdlib.h> // for atoi() |
---|
180 | |
---|
181 | /* Override ENABLE_FEATURE_PIDFILE - ifupdown needs our pidfile to always exist */ |
---|
182 | #define WANT_PIDFILE 1 |
---|
183 | @@ -179,6 +180,7 @@ |
---|
184 | OPT_t = 1 << 16, |
---|
185 | OPT_v = 1 << 17, |
---|
186 | OPT_S = 1 << 18, |
---|
187 | + OPT_P = 1 << 19, |
---|
188 | }; |
---|
189 | #if ENABLE_GETOPT_LONG |
---|
190 | static const char udhcpc_longopts[] ALIGN1 = |
---|
191 | @@ -201,6 +203,7 @@ |
---|
192 | "version\0" No_argument "v" |
---|
193 | "retries\0" Required_argument "t" |
---|
194 | "syslog\0" No_argument "S" |
---|
195 | + "client-port\0" Required_argument "P" |
---|
196 | ; |
---|
197 | #endif |
---|
198 | /* Default options. */ |
---|
199 | @@ -215,10 +218,10 @@ |
---|
200 | #if ENABLE_GETOPT_LONG |
---|
201 | applet_long_options = udhcpc_longopts; |
---|
202 | #endif |
---|
203 | - opt = getopt32(argv, "c:CV:fbH:h:F:i:np:qRr:s:T:t:vS", |
---|
204 | + opt = getopt32(argv, "c:CV:fbH:h:F:i:np:qRr:s:T:t:vSP:", |
---|
205 | &str_c, &str_V, &str_h, &str_h, &str_F, |
---|
206 | &client_config.interface, &client_config.pidfile, &str_r, |
---|
207 | - &client_config.script, &str_T, &str_t |
---|
208 | + &client_config.script, &str_T, &str_t, &client_port |
---|
209 | ); |
---|
210 | |
---|
211 | if (opt & OPT_c) |
---|
212 | @@ -269,6 +272,14 @@ |
---|
213 | logmode |= LOGMODE_SYSLOG; |
---|
214 | } |
---|
215 | |
---|
216 | + if (opt & OPT_P) { |
---|
217 | + printf("Use %s as DHCP Client Port!\n",client_port); |
---|
218 | + } |
---|
219 | + |
---|
220 | + if (client_port == NULL) { |
---|
221 | + printf("Use %d as DHCP Client Port!\n",CLIENT_PORT); |
---|
222 | + } |
---|
223 | + |
---|
224 | if (read_interface(client_config.interface, &client_config.ifindex, |
---|
225 | NULL, client_config.arp)) |
---|
226 | return 1; |
---|
227 | @@ -310,10 +321,15 @@ |
---|
228 | tv.tv_usec = 0; |
---|
229 | |
---|
230 | if (listen_mode != LISTEN_NONE && sockfd < 0) { |
---|
231 | - if (listen_mode == LISTEN_KERNEL) |
---|
232 | - sockfd = listen_socket(/*INADDR_ANY,*/ CLIENT_PORT, client_config.interface); |
---|
233 | - else |
---|
234 | + if (listen_mode == LISTEN_KERNEL) { |
---|
235 | + if (client_port == NULL) { |
---|
236 | + sockfd = listen_socket(/*INADDR_ANY,*/ CLIENT_PORT, client_config.interface); |
---|
237 | + } else { |
---|
238 | + sockfd = listen_socket(/*INADDR_ANY,*/ atoi(client_port), client_config.interface); |
---|
239 | + } |
---|
240 | + } else { |
---|
241 | sockfd = raw_socket(client_config.ifindex); |
---|
242 | + } |
---|
243 | } |
---|
244 | max_fd = udhcp_sp_fd_set(&rfds, sockfd); |
---|
245 | |
---|
246 | diff -Naur busybox-1.7.1.org/networking/udhcp/dhcpd.c busybox-1.7.1/networking/udhcp/dhcpd.c |
---|
247 | --- busybox-1.7.1.org/networking/udhcp/dhcpd.c 2007-09-03 19:48:26.000000000 +0800 |
---|
248 | +++ busybox-1.7.1/networking/udhcp/dhcpd.c 2007-10-09 10:12:34.000000000 +0800 |
---|
249 | @@ -11,6 +11,7 @@ |
---|
250 | */ |
---|
251 | |
---|
252 | #include <syslog.h> |
---|
253 | +#include <stdlib.h> // for atoi() |
---|
254 | #include "common.h" |
---|
255 | #include "dhcpd.h" |
---|
256 | #include "options.h" |
---|
257 | @@ -20,7 +21,6 @@ |
---|
258 | struct dhcpOfferedAddr *leases; |
---|
259 | struct server_config_t server_config; |
---|
260 | |
---|
261 | - |
---|
262 | int udhcpd_main(int argc, char **argv); |
---|
263 | int udhcpd_main(int argc, char **argv) |
---|
264 | { |
---|
265 | @@ -36,7 +36,7 @@ |
---|
266 | struct option_set *option; |
---|
267 | struct dhcpOfferedAddr *lease, static_lease; |
---|
268 | |
---|
269 | - opt = getopt32(argv, "fS"); |
---|
270 | + opt = getopt32(argv, "fSP:",&server_port); |
---|
271 | argv += optind; |
---|
272 | |
---|
273 | if (!(opt & 1)) { /* no -f */ |
---|
274 | @@ -49,6 +49,15 @@ |
---|
275 | logmode |= LOGMODE_SYSLOG; |
---|
276 | } |
---|
277 | |
---|
278 | + if (opt & 4) { /* -P */ |
---|
279 | + printf("Use %s for DHCP Server Port!\n",server_port); |
---|
280 | + } |
---|
281 | + |
---|
282 | + if ( server_port == NULL) |
---|
283 | + { |
---|
284 | + printf("Use %d for DHCP Server Port!\n",SERVER_PORT); |
---|
285 | + } |
---|
286 | + |
---|
287 | /* Would rather not do read_config before daemonization - |
---|
288 | * otherwise NOMMU machines will parse config twice */ |
---|
289 | read_config(argv[0] ? argv[0] : DHCPD_CONF_FILE); |
---|
290 | @@ -95,8 +104,10 @@ |
---|
291 | while (1) { /* loop until universe collapses */ |
---|
292 | |
---|
293 | if (server_socket < 0) { |
---|
294 | - server_socket = listen_socket(/*INADDR_ANY,*/ SERVER_PORT, |
---|
295 | - server_config.interface); |
---|
296 | + if ( server_port == NULL) |
---|
297 | + server_socket = listen_socket(/*INADDR_ANY,*/ SERVER_PORT, server_config.interface); |
---|
298 | + else |
---|
299 | + server_socket = listen_socket(/*INADDR_ANY,*/ atoi(server_port), server_config.interface); |
---|
300 | } |
---|
301 | |
---|
302 | max_sock = udhcp_sp_fd_set(&rfds, server_socket); |
---|
303 | diff -Naur busybox-1.7.1.org/networking/udhcp/options.c busybox-1.7.1/networking/udhcp/options.c |
---|
304 | --- busybox-1.7.1.org/networking/udhcp/options.c 2007-09-03 19:48:26.000000000 +0800 |
---|
305 | +++ busybox-1.7.1/networking/udhcp/options.c 2007-10-09 10:12:34.000000000 +0800 |
---|
306 | @@ -67,6 +67,8 @@ |
---|
307 | [OPTION_S32] = 4 |
---|
308 | }; |
---|
309 | |
---|
310 | +char *server_port = NULL; |
---|
311 | +char *client_port = NULL; |
---|
312 | |
---|
313 | /* get an option with bounds checking (warning, not aligned). */ |
---|
314 | uint8_t *get_option(struct dhcpMessage *packet, int code) |
---|
315 | diff -Naur busybox-1.7.1.org/networking/udhcp/options.h busybox-1.7.1/networking/udhcp/options.h |
---|
316 | --- busybox-1.7.1.org/networking/udhcp/options.h 2007-09-03 19:48:26.000000000 +0800 |
---|
317 | +++ busybox-1.7.1/networking/udhcp/options.h 2007-10-09 10:12:34.000000000 +0800 |
---|
318 | @@ -105,6 +105,8 @@ |
---|
319 | |
---|
320 | extern const struct dhcp_option dhcp_options[]; |
---|
321 | extern const unsigned char option_lengths[]; |
---|
322 | +extern char *server_port; |
---|
323 | +extern char *client_port; |
---|
324 | |
---|
325 | uint8_t *get_option(struct dhcpMessage *packet, int code); |
---|
326 | int end_option(uint8_t *optionptr); |
---|
327 | diff -Naur busybox-1.7.1.org/networking/udhcp/serverpacket.c busybox-1.7.1/networking/udhcp/serverpacket.c |
---|
328 | --- busybox-1.7.1.org/networking/udhcp/serverpacket.c 2007-09-03 19:48:26.000000000 +0800 |
---|
329 | +++ busybox-1.7.1/networking/udhcp/serverpacket.c 2007-10-15 14:50:07.000000000 +0800 |
---|
330 | @@ -30,8 +30,13 @@ |
---|
331 | { |
---|
332 | DEBUG("Forwarding packet to relay"); |
---|
333 | |
---|
334 | - return udhcp_kernel_packet(payload, server_config.server, SERVER_PORT, |
---|
335 | - payload->giaddr, SERVER_PORT); |
---|
336 | + if (server_port == NULL) { |
---|
337 | + DEBUG("udhcp_kernel_packet(payload, server_config.server, %d, payload->giaddr, %d);",SERVER_PORT,SERVER_PORT); |
---|
338 | + return udhcp_kernel_packet(payload, server_config.server, SERVER_PORT, payload->giaddr, SERVER_PORT); |
---|
339 | + } else { |
---|
340 | + DEBUG("udhcp_kernel_packet(payload, server_config.server, %d, payload->giaddr, %d);",atoi(server_port),atoi(server_port)); |
---|
341 | + return udhcp_kernel_packet(payload, server_config.server, atoi(server_port), payload->giaddr, atoi(server_port)); |
---|
342 | + } |
---|
343 | } |
---|
344 | |
---|
345 | |
---|
346 | @@ -40,6 +45,12 @@ |
---|
347 | { |
---|
348 | const uint8_t *chaddr; |
---|
349 | uint32_t ciaddr; |
---|
350 | + int SRV_PORT=0, CLT_PORT=0; |
---|
351 | + |
---|
352 | + SRV_PORT=(server_port == NULL)?SERVER_PORT:atoi(server_port); |
---|
353 | + CLT_PORT=(server_port == NULL)?CLIENT_PORT:(atoi(server_port) + 1); |
---|
354 | + |
---|
355 | + DEBUG("serverpacket.c: send_packet_to_client() - SRV_PORT=%d, CLT_PORT= %d",SRV_PORT, CLT_PORT); |
---|
356 | |
---|
357 | if (force_broadcast) { |
---|
358 | DEBUG("broadcasting packet to client (NAK)"); |
---|
359 | @@ -58,8 +69,8 @@ |
---|
360 | ciaddr = payload->yiaddr; |
---|
361 | chaddr = payload->chaddr; |
---|
362 | } |
---|
363 | - return udhcp_raw_packet(payload, server_config.server, SERVER_PORT, |
---|
364 | - ciaddr, CLIENT_PORT, chaddr, server_config.ifindex); |
---|
365 | + return udhcp_raw_packet(payload, server_config.server, SRV_PORT, |
---|
366 | + ciaddr, CLT_PORT, chaddr, server_config.ifindex); |
---|
367 | } |
---|
368 | |
---|
369 | |
---|