Changeset 3621 in MondoRescue for branches/3.3/mindi-busybox/networking/udhcp/dhcpd.c
- Timestamp:
- Dec 20, 2016, 4:07:32 PM (7 years ago)
- Location:
- branches/3.3
- Files:
-
- 1 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/3.3/mindi-busybox/networking/udhcp/dhcpd.c
r3232 r3621 23 23 24 24 //usage:#define udhcpd_trivial_usage 25 //usage: "[-fS] " IF_FEATURE_UDHCP_PORT(" [-P N]") " [CONFFILE]"25 //usage: "[-fS] [-I ADDR]" IF_FEATURE_UDHCP_PORT(" [-P N]") " [CONFFILE]" 26 26 //usage:#define udhcpd_full_usage "\n\n" 27 27 //usage: "DHCP server\n" 28 28 //usage: "\n -f Run in foreground" 29 29 //usage: "\n -S Log to syslog too" 30 //usage: "\n -I ADDR Local address" 31 //usage: "\n -a MSEC Timeout for ARP ping (default 2000)" 30 32 //usage: IF_FEATURE_UDHCP_PORT( 31 33 //usage: "\n -P N Use port N (default 67)" … … 60 62 || dhcp_pkt->ciaddr == 0 61 63 ) { 62 log1(" Broadcasting packet to client");64 log1("broadcasting packet to client"); 63 65 ciaddr = INADDR_BROADCAST; 64 66 chaddr = MAC_BCAST_ADDR; 65 67 } else { 66 log1(" Unicasting packet to client ciaddr");68 log1("unicasting packet to client ciaddr"); 67 69 ciaddr = dhcp_pkt->ciaddr; 68 70 chaddr = dhcp_pkt->chaddr; … … 78 80 static void send_packet_to_relay(struct dhcp_packet *dhcp_pkt) 79 81 { 80 log1(" Forwarding packet to relay");82 log1("forwarding packet to relay"); 81 83 82 84 udhcp_send_kernel_packet(dhcp_pkt, … … 148 150 uint32_t static_lease_nip, 149 151 struct dyn_lease *lease, 150 uint8_t *requested_ip_opt) 152 uint8_t *requested_ip_opt, 153 unsigned arpping_ms) 151 154 { 152 155 struct dhcp_packet packet; … … 187 190 else { 188 191 /* Otherwise, find a free IP */ 189 packet.yiaddr = find_free_or_expired_nip(oldpacket->chaddr );192 packet.yiaddr = find_free_or_expired_nip(oldpacket->chaddr, arpping_ms); 190 193 } 191 194 … … 212 215 213 216 addr.s_addr = packet.yiaddr; 214 bb_ info_msg("Sending OFFER of %s", inet_ntoa(addr));217 bb_error_msg("sending OFFER of %s", inet_ntoa(addr)); 215 218 /* send_packet emits error message itself if it detects failure */ 216 219 send_packet(&packet, /*force_bcast:*/ 0); … … 224 227 init_packet(&packet, oldpacket, DHCPNAK); 225 228 226 log1(" SendingNAK");229 log1("sending %s", "NAK"); 227 230 send_packet(&packet, /*force_bcast:*/ 1); 228 231 } … … 245 248 246 249 addr.s_addr = yiaddr; 247 bb_ info_msg("Sending ACK to %s", inet_ntoa(addr));250 bb_error_msg("sending ACK to %s", inet_ntoa(addr)); 248 251 send_packet(&packet, /*force_bcast:*/ 0); 249 252 … … 303 306 unsigned opt; 304 307 struct option_set *option; 308 char *str_I = str_I; 309 const char *str_a = "2000"; 310 unsigned arpping_ms; 305 311 IF_FEATURE_UDHCP_PORT(char *str_P;) 306 312 307 #if ENABLE_FEATURE_UDHCP_PORT 308 SERVER_PORT = 67; 309 CLIENT_PORT = 68;310 #endif 313 setup_common_bufsiz(); 314 315 IF_FEATURE_UDHCP_PORT(SERVER_PORT = 67;) 316 IF_FEATURE_UDHCP_PORT(CLIENT_PORT = 68;) 311 317 312 318 #if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 1 313 319 opt_complementary = "vv"; 314 320 #endif 315 opt = getopt32(argv, "fSv" 316 IF_FEATURE_UDHCP_PORT("P:", &str_P) 321 opt = getopt32(argv, "fSI:va:" 322 IF_FEATURE_UDHCP_PORT("P:") 323 , &str_I 324 , &str_a 325 IF_FEATURE_UDHCP_PORT(, &str_P) 317 326 IF_UDHCP_VERBOSE(, &dhcp_verbose) 318 327 ); … … 327 336 logmode |= LOGMODE_SYSLOG; 328 337 } 338 if (opt & 4) { /* -I */ 339 len_and_sockaddr *lsa = xhost_and_af2sockaddr(str_I, 0, AF_INET); 340 server_config.server_nip = lsa->u.sin.sin_addr.s_addr; 341 free(lsa); 342 } 329 343 #if ENABLE_FEATURE_UDHCP_PORT 330 if (opt & 8) { /* -P */344 if (opt & 32) { /* -P */ 331 345 SERVER_PORT = xatou16(str_P); 332 346 CLIENT_PORT = SERVER_PORT + 1; 333 347 } 334 348 #endif 349 arpping_ms = xatou(str_a); 350 335 351 /* Would rather not do read_config before daemonization - 336 352 * otherwise NOMMU machines will parse config twice */ … … 346 362 /* if (!..) bb_perror_msg("can't create pidfile %s", pidfile); */ 347 363 348 bb_ info_msg("%s (v"BB_VER") started", applet_name);364 bb_error_msg("started, v"BB_VER); 349 365 350 366 option = udhcp_find_option(server_config.options, DHCP_LEASE_TIME); … … 368 384 if (udhcp_read_interface(server_config.interface, 369 385 &server_config.ifindex, 370 &server_config.server_nip,386 (server_config.server_nip == 0 ? &server_config.server_nip : NULL), 371 387 server_config.server_mac) 372 388 ) { … … 398 414 max_sock = udhcp_sp_fd_set(&rfds, server_socket); 399 415 if (server_config.auto_time) { 400 tv.tv_sec = timeout_end - monotonic_sec(); 416 /* cast to signed is essential if tv_sec is wider than int */ 417 tv.tv_sec = (int)(timeout_end - monotonic_sec()); 401 418 tv.tv_usec = 0; 402 419 } … … 411 428 } 412 429 if (retval < 0 && errno != EINTR) { 413 log1(" Error on select");430 log1("error on select"); 414 431 continue; 415 432 } … … 417 434 switch (udhcp_sp_read(&rfds)) { 418 435 case SIGUSR1: 419 bb_ info_msg("ReceivedSIGUSR1");436 bb_error_msg("received %s", "SIGUSR1"); 420 437 write_leases(); 421 438 /* why not just reset the timeout, eh */ 422 439 goto continue_with_autotime; 423 440 case SIGTERM: 424 bb_ info_msg("ReceivedSIGTERM");441 bb_error_msg("received %s", "SIGTERM"); 425 442 write_leases(); 426 443 goto ret0; … … 435 452 /* bytes can also be -2 ("bad packet data") */ 436 453 if (bytes == -1 && errno != EINTR) { 437 log1(" Read error: %s, reopening socket", strerror(errno));454 log1("read error: %s, reopening socket", strerror(errno)); 438 455 close(server_socket); 439 456 server_socket = -1; … … 470 487 static_lease_nip = get_static_nip_by_mac(server_config.static_leases, &packet.chaddr); 471 488 if (static_lease_nip) { 472 bb_ info_msg("Found static lease: %x", static_lease_nip);489 bb_error_msg("found static lease: %x", static_lease_nip); 473 490 memcpy(&fake_lease.lease_mac, &packet.chaddr, 6); 474 491 fake_lease.lease_nip = static_lease_nip; … … 488 505 489 506 case DHCPDISCOVER: 490 log1(" ReceivedDISCOVER");491 492 send_offer(&packet, static_lease_nip, lease, requested_ip_opt );507 log1("received %s", "DISCOVER"); 508 509 send_offer(&packet, static_lease_nip, lease, requested_ip_opt, arpping_ms); 493 510 break; 494 511 495 512 case DHCPREQUEST: 496 log1(" ReceivedREQUEST");513 log1("received %s", "REQUEST"); 497 514 /* RFC 2131: 498 515 … … 619 636 * ciaddr must be 0 (we do not check this) 620 637 */ 621 log1(" ReceivedDECLINE");638 log1("received %s", "DECLINE"); 622 639 if (server_id_opt 623 640 && requested_ip_opt … … 639 656 * ciaddr must be filled in 640 657 */ 641 log1(" ReceivedRELEASE");658 log1("received %s", "RELEASE"); 642 659 if (server_id_opt 643 660 && lease /* chaddr matches this lease */ … … 649 666 650 667 case DHCPINFORM: 651 log1(" ReceivedINFORM");668 log1("received %s", "INFORM"); 652 669 send_inform(&packet); 653 670 break;
Note:
See TracChangeset
for help on using the changeset viewer.