Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(364)

Side by Side Diff: dhcpcd.c

Issue 2428004: Overhaul dhcpcd for chrome os use (Closed) Base URL: ssh://git@chromiumos-git//dhcpcd.git
Patch Set: purge hooks from configure to silence complaint Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « dbus-dict.c ('k') | dhcpcd.conf » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * dhcpcd - DHCP client daemon 2 * dhcpcd - DHCP client daemon
3 * Copyright (c) 2006-2009 Roy Marples <roy@marples.name> 3 * Copyright (c) 2006-2009 Roy Marples <roy@marples.name>
4 * All rights reserved 4 * All rights reserved
5 5
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 #include <unistd.h> 54 #include <unistd.h>
55 #include <time.h> 55 #include <time.h>
56 56
57 #include "arp.h" 57 #include "arp.h"
58 #include "bind.h" 58 #include "bind.h"
59 #include "config.h" 59 #include "config.h"
60 #include "common.h" 60 #include "common.h"
61 #include "configure.h" 61 #include "configure.h"
62 #include "control.h" 62 #include "control.h"
63 #include "dhcpcd.h" 63 #include "dhcpcd.h"
64 #include "dhcpcd-dbus.h"
64 #include "duid.h" 65 #include "duid.h"
65 #include "eloop.h" 66 #include "eloop.h"
66 #include "if-options.h" 67 #include "if-options.h"
67 #include "if-pref.h" 68 #include "if-pref.h"
68 #include "ipv4ll.h" 69 #include "ipv4ll.h"
69 #include "net.h" 70 #include "net.h"
70 #include "signals.h" 71 #include "signals.h"
71 72
72 /* We should define a maximum for the NAK exponential backoff */ 73 /* We should define a maximum for the NAK exponential backoff */
73 #define NAKOFF_MAX 60 74 #define NAKOFF_MAX 60
(...skipping 1217 matching lines...) Expand 10 before | Expand all | Expand 10 after
1291 ifp->dst.s_addr = dst ? dst->s_addr : INADDR_ANY; 1292 ifp->dst.s_addr = dst ? dst->s_addr : INADDR_ANY;
1292 if (dst) { 1293 if (dst) {
1293 for (i = 1; i < 255; i++) 1294 for (i = 1; i < 255; i++)
1294 if (i != DHO_ROUTER && 1295 if (i != DHO_ROUTER &&
1295 has_option_mask(ifo->dstmask, i)) 1296 has_option_mask(ifo->dstmask, i))
1296 dhcp_message_add_addr( 1297 dhcp_message_add_addr(
1297 ifp->state->new, 1298 ifp->state->new,
1298 i, *dst); 1299 i, *dst);
1299 } 1300 }
1300 ifp->state->reason = "STATIC"; 1301 ifp->state->reason = "STATIC";
1301 build_routes();
1302 run_script(ifp); 1302 run_script(ifp);
1303 if (ifo->options & DHCPCD_INFORM) { 1303 if (ifo->options & DHCPCD_INFORM) {
1304 ifp->state->state = DHS_INFORM; 1304 ifp->state->state = DHS_INFORM;
1305 ifp->state->xid = arc4random(); 1305 ifp->state->xid = arc4random();
1306 ifp->state->lease.server.s_addr = 1306 ifp->state->lease.server.s_addr =
1307 dst ? dst->s_addr : INADDR_ANY; 1307 dst ? dst->s_addr : INADDR_ANY;
1308 ifp->addr = *addr; 1308 ifp->addr = *addr;
1309 ifp->net = *net; 1309 ifp->net = *net;
1310 open_sockets(ifp); 1310 open_sockets(ifp);
1311 send_inform(ifp); 1311 send_inform(ifp);
1312 } 1312 }
1313 break; 1313 break;
1314 } 1314 }
1315 } 1315 }
1316 1316
1317 /* ARGSUSED */ 1317 /* ARGSUSED */
1318 static void 1318 static void
1319 handle_link(_unused void *arg) 1319 handle_link(_unused void *arg)
1320 { 1320 {
1321 if (manage_link(linkfd) == -1) 1321 if (manage_link(linkfd) == -1)
1322 syslog(LOG_ERR, "manage_link: %m"); 1322 syslog(LOG_ERR, "manage_link: %m");
1323 } 1323 }
1324 1324
1325 /* ARGSUSED */ 1325 /* ARGSUSED */
1326 static void 1326 void
1327 handle_signal(_unused void *arg) 1327 handle_signal(_unused void *arg)
1328 { 1328 {
1329 struct interface *iface, *ifl; 1329 struct interface *iface, *ifl;
1330 int sig = signal_read(); 1330 int sig = signal_read();
1331 int do_release = 0; 1331 int do_release = 0;
1332 1332
1333 switch (sig) { 1333 switch (sig) {
1334 case SIGINT: 1334 case SIGINT:
1335 syslog(LOG_INFO, "received SIGINT, stopping"); 1335 syslog(LOG_INFO, "received SIGINT, stopping");
1336 break; 1336 break;
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1413 handle_args(struct fd_list *fd, int argc, char **argv) 1413 handle_args(struct fd_list *fd, int argc, char **argv)
1414 { 1414 {
1415 struct interface *ifs, *ifp, *ifl, *ifn, *ift; 1415 struct interface *ifs, *ifp, *ifl, *ifn, *ift;
1416 int do_exit = 0, do_release = 0, do_reboot = 0, do_reconf = 0; 1416 int do_exit = 0, do_release = 0, do_reboot = 0, do_reconf = 0;
1417 int opt, oi = 0; 1417 int opt, oi = 0;
1418 ssize_t len; 1418 ssize_t len;
1419 size_t l; 1419 size_t l;
1420 struct iovec iov[2]; 1420 struct iovec iov[2];
1421 char *tmp, *p; 1421 char *tmp, *p;
1422 1422
1423 if (fd != NULL) {
1424 /* Special commands for our control socket */
1425 if (strcmp(*argv, "--version") == 0) {
1426 len = strlen(VERSION) + 1;
1427 iov[0].iov_base = &len;
1428 iov[0].iov_len = sizeof(ssize_t);
1429 iov[1].iov_base = UNCONST(VERSION);
1430 iov[1].iov_len = len;
1431 if (writev(fd->fd, iov, 2) == -1) {
1432 syslog(LOG_ERR, "writev: %m");
1433 return -1;
1434 }
1435 return 0;
1436 } else if (strcmp(*argv, "--getconfigfile") == 0) {
1437 len = strlen(cffile ? cffile : CONFIG) + 1;
1438 iov[0].iov_base = &len;
1439 iov[0].iov_len = sizeof(ssize_t);
1440 iov[1].iov_base = cffile ? cffile : UNCONST(CONFIG);
1441 iov[1].iov_len = len;
1442 if (writev(fd->fd, iov, 2) == -1) {
1443 syslog(LOG_ERR, "writev: %m");
1444 return -1;
1445 }
1446 return 0;
1447 } else if (strcmp(*argv, "--getinterfaces") == 0) {
1448 len = 0;
1449 if (argc == 1) {
1450 for (ifp = ifaces; ifp; ifp = ifp->next)
1451 len++;
1452 len = write(fd->fd, &len, sizeof(len));
1453 if (len != sizeof(len))
1454 return -1;
1455 for (ifp = ifaces; ifp; ifp = ifp->next)
1456 send_interface(fd->fd, ifp);
1457 return 0;
1458 }
1459 opt = 0;
1460 while (argv[++opt] != NULL) {
1461 for (ifp = ifaces; ifp; ifp = ifp->next)
1462 if (strcmp(argv[opt], ifp->name) == 0)
1463 len++;
1464 }
1465 len = write(fd->fd, &len, sizeof(len));
1466 if (len != sizeof(len))
1467 return -1;
1468 opt = 0;
1469 while (argv[++opt] != NULL) {
1470 for (ifp = ifaces; ifp; ifp = ifp->next)
1471 if (strcmp(argv[opt], ifp->name) == 0)
1472 send_interface(fd->fd, ifp);
1473 }
1474 return 0;
1475 } else if (strcmp(*argv, "--listen") == 0) {
1476 fd->listener = 1;
1477 return 0;
1478 }
1479 }
1480
1481 /* Log the command */ 1423 /* Log the command */
1482 len = 0; 1424 len = 0;
1483 for (opt = 0; opt < argc; opt++) 1425 for (opt = 0; opt < argc; opt++)
1484 len += strlen(argv[opt]) + 1; 1426 len += strlen(argv[opt]) + 1;
1485 tmp = p = xmalloc(len + 1); 1427 tmp = p = xmalloc(len + 1);
1486 for (opt = 0; opt < argc; opt++) { 1428 for (opt = 0; opt < argc; opt++) {
1487 l = strlen(argv[opt]); 1429 l = strlen(argv[opt]);
1488 strlcpy(p, argv[opt], l + 1); 1430 strlcpy(p, argv[opt], l + 1);
1489 p += l; 1431 p += l;
1490 *p++ = ' '; 1432 *p++ = ' ';
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1568 main(int argc, char **argv) 1510 main(int argc, char **argv)
1569 { 1511 {
1570 struct if_options *ifo; 1512 struct if_options *ifo;
1571 struct interface *iface; 1513 struct interface *iface;
1572 int opt, oi = 0, signal_fd, sig = 0, i, control_fd; 1514 int opt, oi = 0, signal_fd, sig = 0, i, control_fd;
1573 size_t len; 1515 size_t len;
1574 pid_t pid; 1516 pid_t pid;
1575 struct timespec ts; 1517 struct timespec ts;
1576 1518
1577 closefrom(3); 1519 closefrom(3);
1578 » openlog(PACKAGE, LOG_PERROR, LOG_DAEMON); 1520 » openlog(PACKAGE, LOG_PID | LOG_PERROR, LOG_DAEMON);
1579 setlogmask(LOG_UPTO(LOG_INFO)); 1521 setlogmask(LOG_UPTO(LOG_INFO));
1580 1522
1581 /* Test for --help and --version */ 1523 /* Test for --help and --version */
1582 if (argc > 1) { 1524 if (argc > 1) {
1583 if (strcmp(argv[1], "--help") == 0) { 1525 if (strcmp(argv[1], "--help") == 0) {
1584 usage(); 1526 usage();
1585 exit(EXIT_SUCCESS); 1527 exit(EXIT_SUCCESS);
1586 } else if (strcmp(argv[1], "--version") == 0) { 1528 } else if (strcmp(argv[1], "--version") == 0) {
1587 printf(""PACKAGE" "VERSION"\n%s\n", copyright); 1529 printf(""PACKAGE" "VERSION"\n%s\n", copyright);
1588 exit(EXIT_SUCCESS); 1530 exit(EXIT_SUCCESS);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1627 if (opt != 1) { 1569 if (opt != 1) {
1628 if (opt == 0) 1570 if (opt == 0)
1629 usage(); 1571 usage();
1630 exit(EXIT_FAILURE); 1572 exit(EXIT_FAILURE);
1631 } 1573 }
1632 options = ifo->options; 1574 options = ifo->options;
1633 if (i != 0) { 1575 if (i != 0) {
1634 options |= DHCPCD_TEST | DHCPCD_PERSISTENT; 1576 options |= DHCPCD_TEST | DHCPCD_PERSISTENT;
1635 options &= ~DHCPCD_DAEMONISE; 1577 options &= ~DHCPCD_DAEMONISE;
1636 } 1578 }
1637 » 1579
1638 #ifdef THERE_IS_NO_FORK 1580 #ifdef THERE_IS_NO_FORK
1639 options &= ~DHCPCD_DAEMONISE; 1581 options &= ~DHCPCD_DAEMONISE;
1640 #endif 1582 #endif
1641 1583
1642 if (options & DHCPCD_DEBUG) 1584 if (options & DHCPCD_DEBUG)
1643 setlogmask(LOG_UPTO(LOG_DEBUG)); 1585 setlogmask(LOG_UPTO(LOG_DEBUG));
1644 else if (options & DHCPCD_QUIET) 1586 else if (options & DHCPCD_QUIET)
1645 close(STDERR_FILENO); 1587 close(STDERR_FILENO);
1646 1588
1647 if (!(options & DHCPCD_TEST)) { 1589 if (!(options & DHCPCD_TEST)) {
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
1710 nanosleep(&ts, NULL); 1652 nanosleep(&ts, NULL);
1711 if (read_pid() == 0) 1653 if (read_pid() == 0)
1712 exit(EXIT_SUCCESS); 1654 exit(EXIT_SUCCESS);
1713 } 1655 }
1714 syslog(LOG_ERR, "pid %d failed to exit", pid); 1656 syslog(LOG_ERR, "pid %d failed to exit", pid);
1715 exit(EXIT_FAILURE); 1657 exit(EXIT_FAILURE);
1716 } 1658 }
1717 } 1659 }
1718 1660
1719 if (!(options & DHCPCD_TEST)) { 1661 if (!(options & DHCPCD_TEST)) {
1720 » » if ((pid = read_pid()) > 0 && 1662 » » if ((pid = read_pid()) > 0 && kill(pid, 0) == 0) {
1721 » » kill(pid, 0) == 0)
1722 » » {
1723 syslog(LOG_ERR, ""PACKAGE 1663 syslog(LOG_ERR, ""PACKAGE
1724 " already running on pid %d (%s)", 1664 " already running on pid %d (%s)",
1725 pid, pidfile); 1665 pid, pidfile);
1726 exit(EXIT_FAILURE); 1666 exit(EXIT_FAILURE);
1727 } 1667 }
1728 1668
1729 /* Ensure we have the needed directories */ 1669 /* Ensure we have the needed directories */
1730 if (mkdir(RUNDIR, 0755) == -1 && errno != EEXIST) { 1670 if (mkdir(RUNDIR, 0755) == -1 && errno != EEXIST) {
1731 syslog(LOG_ERR, "mkdir `%s': %m", RUNDIR); 1671 syslog(LOG_ERR, "mkdir `%s': %m", RUNDIR);
1732 exit(EXIT_FAILURE); 1672 exit(EXIT_FAILURE);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1764 if (start_control() == -1) { 1704 if (start_control() == -1) {
1765 syslog(LOG_ERR, "start_control: %m"); 1705 syslog(LOG_ERR, "start_control: %m");
1766 exit(EXIT_FAILURE); 1706 exit(EXIT_FAILURE);
1767 } 1707 }
1768 } 1708 }
1769 1709
1770 if (init_sockets() == -1) { 1710 if (init_sockets() == -1) {
1771 syslog(LOG_ERR, "init_socket: %m"); 1711 syslog(LOG_ERR, "init_socket: %m");
1772 exit(EXIT_FAILURE); 1712 exit(EXIT_FAILURE);
1773 } 1713 }
1714 if (dhcpcd_dbus_init() == -1) {
1715 /* NB: dhcpcd_dbus_init generates a syslog msg */
1716 exit(EXIT_FAILURE);
1717 }
1774 if (ifo->options & DHCPCD_LINK) { 1718 if (ifo->options & DHCPCD_LINK) {
1775 linkfd = open_link_socket(); 1719 linkfd = open_link_socket();
1776 if (linkfd == -1) 1720 if (linkfd == -1)
1777 syslog(LOG_ERR, "open_link_socket: %m"); 1721 syslog(LOG_ERR, "open_link_socket: %m");
1778 else 1722 else
1779 add_event(linkfd, handle_link, NULL); 1723 add_event(linkfd, handle_link, NULL);
1780 } 1724 }
1781 1725
1782 ifc = argc - optind; 1726 ifc = argc - optind;
1783 ifv = argv + optind; 1727 ifv = argv + optind;
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1852 } 1796 }
1853 free_options(ifo); 1797 free_options(ifo);
1854 1798
1855 sort_interfaces(); 1799 sort_interfaces();
1856 for (iface = ifaces; iface; iface = iface->next) 1800 for (iface = ifaces; iface; iface = iface->next)
1857 add_timeout_sec(0, start_interface, iface); 1801 add_timeout_sec(0, start_interface, iface);
1858 1802
1859 start_eloop(); 1803 start_eloop();
1860 exit(EXIT_SUCCESS); 1804 exit(EXIT_SUCCESS);
1861 } 1805 }
OLDNEW
« no previous file with comments | « dbus-dict.c ('k') | dhcpcd.conf » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698