diff options
Diffstat (limited to 'toys')
-rw-r--r-- | toys/pending/dhcp.c | 78 | ||||
-rw-r--r-- | toys/pending/dhcp6.c | 33 | ||||
-rw-r--r-- | toys/pending/dhcpd.c | 9 |
3 files changed, 58 insertions, 62 deletions
diff --git a/toys/pending/dhcp.c b/toys/pending/dhcp.c index f8226db6..cb9d15a1 100644 --- a/toys/pending/dhcp.c +++ b/toys/pending/dhcp.c @@ -4,7 +4,7 @@ * Copyright 2013 Kyungwan Han <asura321@gmail.com> * * Not in SUSv4. -USE_DHCP(NEWTOY(dhcp, "V:H:F:x*r:O*A#<0T#<0t#<0s:p:i:SBRCaovqnbf", TOYFLAG_SBIN|TOYFLAG_ROOTONLY)) +USE_DHCP(NEWTOY(dhcp, "V:H:F:x*r:O*A#<0=20T#<0=3t#<0=3s:p:i:SBRCaovqnbf", TOYFLAG_SBIN|TOYFLAG_ROOTONLY)) config DHCP bool "dhcp" @@ -71,9 +71,6 @@ GLOBALS( char *vendor_cls; ) -#define flag_get(f,v,d) ((toys.optflags & f) ? v : d) -#define flag_chk(f) ((toys.optflags & f) ? 1 : 0) - #define STATE_INIT 0 #define STATE_REQUESTING 1 #define STATE_BOUND 2 @@ -533,7 +530,8 @@ static void run_script(dhcpc_result_t *res, char *name) pid_t pid; char *argv[3]; struct stat sts; - char *script = flag_get(FLAG_s, TT.script, "/usr/share/dhcp/default.script"); + char *script = (toys.optflags & FLAG_s) ? TT.script + : "/usr/share/dhcp/default.script"; if (stat(script, &sts) == -1 && errno == ENOENT) return; if (fill_envp(res)) { @@ -907,14 +905,14 @@ static uint8_t *dhcpc_addreqoptions(uint8_t *optptr) *len = 0; optptr++; - if (!flag_chk(FLAG_o)) { + if (!(toys.optflags & FLAG_o)) { *len = 4; *optptr++ = DHCP_OPTION_SUBNET_MASK; *optptr++ = DHCP_OPTION_ROUTER; *optptr++ = DHCP_OPTION_DNS_SERVER; *optptr++ = DHCP_OPTION_BROADCAST; } - if (flag_chk(FLAG_O)) { + if (toys.optflags & FLAG_O) { memcpy(optptr++, raw_opt, raw_optcount); *len += raw_optcount; } @@ -1002,22 +1000,23 @@ static int dhcpc_sendmsg(int msgtype) pend = state->pdhcp.options; pend = dhcpc_addmsgtype(pend, msgtype); - if (!flag_chk(FLAG_C)) pend = dhcpc_addclientid(pend); + if (!(toys.optflags & FLAG_C)) pend = dhcpc_addclientid(pend); // Handle the message specific settings switch (msgtype) { case DHCPDISCOVER: // Broadcast DISCOVER message to all servers state->pdhcp.flags = htons(BOOTP_BROADCAST); // Broadcast bit. - if (flag_chk(FLAG_r)) { + if (toys.optflags & FLAG_r) { inet_aton(TT.req_ip, &rqsd); pend = dhcpc_addreqipaddr(&rqsd, pend); } pend = dhcpc_addmaxsize(pend, htons(sizeof(dhcp_raw_t))); - vendor = flag_get(FLAG_V, TT.vendor_cls, "toybox\0"); + vendor = (toys.optflags & FLAG_V) ? TT.vendor_cls : "toybox\0"; pend = dhcpc_addstropt(pend, DHCP_OPTION_VENDOR, vendor, strlen(vendor)); - if (flag_chk(FLAG_H)) pend = dhcpc_addstropt(pend, DHCP_OPTION_HOST_NAME, TT.hostname, strlen(TT.hostname)); - if (flag_chk(FLAG_F)) pend = dhcpc_addfdnname(pend, TT.fdn_name); - if ((!flag_chk(FLAG_o)) || flag_chk(FLAG_O)) pend = dhcpc_addreqoptions(pend); - if (flag_chk(FLAG_x)) pend = set_xopt(pend); + if (toys.optflags & FLAG_H) pend = dhcpc_addstropt(pend, DHCP_OPTION_HOST_NAME, TT.hostname, strlen(TT.hostname)); + if (toys.optflags & FLAG_F) pend = dhcpc_addfdnname(pend, TT.fdn_name); + if (!(toys.optflags & FLAG_o) || (toys.optflags & FLAG_O)) + pend = dhcpc_addreqoptions(pend); + if (toys.optflags & FLAG_x) pend = set_xopt(pend); break; case DHCPREQUEST: // Send REQUEST message to the server that sent the *first* OFFER state->pdhcp.flags = htons(BOOTP_BROADCAST); // Broadcast bit. @@ -1026,12 +1025,13 @@ static int dhcpc_sendmsg(int msgtype) rqsd.s_addr = htonl(server); pend = dhcpc_addserverid(&rqsd, pend); pend = dhcpc_addreqipaddr(&state->ipaddr, pend); - vendor = flag_get(FLAG_V, TT.vendor_cls, "toybox\0"); + vendor = (toys.optflags & FLAG_V) ? TT.vendor_cls : "toybox\0"; pend = dhcpc_addstropt(pend, DHCP_OPTION_VENDOR, vendor, strlen(vendor)); - if (flag_chk(FLAG_H)) pend = dhcpc_addstropt(pend, DHCP_OPTION_HOST_NAME, TT.hostname, strlen(TT.hostname)); - if (flag_chk(FLAG_F)) pend = dhcpc_addfdnname(pend, TT.fdn_name); - if ((!flag_chk(FLAG_o)) || flag_chk(FLAG_O)) pend = dhcpc_addreqoptions(pend); - if (flag_chk(FLAG_x)) pend = set_xopt(pend); + if (toys.optflags & FLAG_H) pend = dhcpc_addstropt(pend, DHCP_OPTION_HOST_NAME, TT.hostname, strlen(TT.hostname)); + if (toys.optflags & FLAG_F) pend = dhcpc_addfdnname(pend, TT.fdn_name); + if (!(toys.optflags & FLAG_o) || (toys.optflags & FLAG_O)) + pend = dhcpc_addreqoptions(pend); + if (toys.optflags & FLAG_x) pend = set_xopt(pend); break; case DHCPRELEASE: // Send RELEASE message to the server. memcpy(&state->pdhcp.ciaddr, &state->ipaddr.s_addr, 4); @@ -1060,7 +1060,7 @@ static uint8_t dhcpc_parseoptions(dhcpc_result_t *presult, uint8_t *optptr) struct in_addr addr; int count, optlen, size = ARRAY_LEN(options_list); - if (flag_chk(FLAG_x)) { + if (toys.optflags & FLAG_x) { if(msgopt_list){ for (count = 0; count < size; count++){ if(msgopt_list[count].val) free(msgopt_list[count].val); @@ -1255,7 +1255,7 @@ static void free_option_stores(void) int count, size = ARRAY_LEN(options_list); for (count = 0; count < size; count++) if (options_list[count].val) free(options_list[count].val); - if(flag_chk(FLAG_x)){ + if (toys.optflags & FLAG_x) { for (count = 0; count < size; count++) if (msgopt_list[count].val) free(msgopt_list[count].val); free(msgopt_list); @@ -1274,22 +1274,22 @@ void dhcp_main(void) xid = 0; setlinebuf(stdout); dbg = dummy; - if (flag_chk(FLAG_v)) dbg = xprintf; - if (flag_chk(FLAG_p)) write_pid(TT.pidfile); - retries = flag_get(FLAG_t, TT.retries, 3); - if (flag_chk(FLAG_S)) { + if (toys.optflags & FLAG_v) dbg = xprintf; + if (toys.optflags & FLAG_p) write_pid(TT.pidfile); + retries = TT.retries; + if (toys.optflags & FLAG_S) { openlog("UDHCPC :", LOG_PID, LOG_DAEMON); infomode |= LOG_SYSTEM; } infomsg(infomode, "dhcp started"); - if (flag_chk(FLAG_O)) { + if (toys.optflags & FLAG_O) { while (TT.req_opt) { raw_opt[raw_optcount] = (uint8_t) strtoopt(TT.req_opt->arg, 1); raw_optcount++; TT.req_opt = TT.req_opt->next; } } - if (flag_chk(FLAG_x)) { + if (toys.optflags & FLAG_x) { while (TT.pkt_opt) { (void) strtoopt(TT.pkt_opt->arg, 0); TT.pkt_opt = TT.pkt_opt->next; @@ -1298,7 +1298,7 @@ void dhcp_main(void) memset(&result, 0, sizeof(dhcpc_result_t)); state = (dhcpc_state_t*) xmalloc(sizeof(dhcpc_state_t)); memset(state, 0, sizeof(dhcpc_state_t)); - state->iface = flag_get(FLAG_i, TT.iface, "eth0"); + state->iface = (toys.optflags & FLAG_i) ? TT.iface : "eth0"; if (get_interface(state->iface, &state->ifindex, NULL, state->macaddr)) perror_exit("Failed to get interface %s", state->iface); @@ -1339,25 +1339,25 @@ void dhcp_main(void) infomsg(infomode, "Sending discover..."); dhcpc_sendmsg(DHCPDISCOVER); server = 0; - timeout = flag_get(FLAG_T, TT.timeout, 3); + timeout = TT.timeout; waited = 0; packets++; continue; } lease_fail: run_script(NULL,"leasefail"); - if (flag_chk(FLAG_n)) { + if (toys.optflags & FLAG_n) { infomsg(infomode, "Lease failed. Exiting"); goto ret_with_sockfd; } - if (flag_chk(FLAG_b)) { + if (toys.optflags & FLAG_b) { infomsg(infomode, "Lease failed. Going Daemon mode"); daemon(0, 0); - if (flag_chk(FLAG_p)) write_pid(TT.pidfile); + if (toys.optflags & FLAG_p) write_pid(TT.pidfile); toys.optflags &= ~FLAG_b; toys.optflags |= FLAG_f; } - timeout = flag_get(FLAG_A, TT.tryagain, 20); + timeout = TT.tryagain; waited = 0; packets = 0; continue; @@ -1367,7 +1367,7 @@ lease_fail: dhcpc_sendmsg(DHCPREQUEST); infomsg(infomode, "Sending select for %d.%d.%d.%d...", (result.ipaddr.s_addr >> 24) & 0xff, (result.ipaddr.s_addr >> 16) & 0xff, (result.ipaddr.s_addr >> 8) & 0xff, (result.ipaddr.s_addr) & 0xff); - timeout = flag_get(FLAG_T, TT.timeout, 3); + timeout = TT.timeout; waited = 0; packets++; continue; @@ -1436,7 +1436,7 @@ renew_requested: continue; case SIGTERM: infomsg(infomode, "Received SIGTERM"); - if (flag_chk(FLAG_R)) release(); + if (toys.optflags & FLAG_R) release(); goto ret_with_sockfd; default: break; } @@ -1483,15 +1483,15 @@ renew_requested: (result.ipaddr.s_addr >> 24) & 0xff, (result.ipaddr.s_addr >> 16) & 0xff, (result.ipaddr.s_addr >> 8) & 0xff, (result.ipaddr.s_addr) & 0xff, result.lease_time, (result.serverid.s_addr >> 24) & 0xff, (result.serverid.s_addr >> 16) & 0xff, (result.serverid.s_addr >> 8) & 0xff, (result.serverid.s_addr) & 0xff); - if (flag_chk(FLAG_q)) { - if (flag_chk(FLAG_R)) release(); + if (toys.optflags & FLAG_q) { + if (toys.optflags & FLAG_R) release(); goto ret_with_sockfd; } toys.optflags &= ~FLAG_n; - if (!flag_chk(FLAG_f)) { + if (!(toys.optflags & FLAG_f)) { daemon(0, 0); toys.optflags |= FLAG_f; - if (flag_chk(FLAG_p)) write_pid(TT.pidfile); + if (toys.optflags & FLAG_p) write_pid(TT.pidfile); } waited = 0; continue; diff --git a/toys/pending/dhcp6.c b/toys/pending/dhcp6.c index 3fac98b4..755c1516 100644 --- a/toys/pending/dhcp6.c +++ b/toys/pending/dhcp6.c @@ -94,9 +94,6 @@ GLOBALS( #define LOG_CONSOLE 0x1 #define LOG_SYSTEM 0x2 -#define flag_get(f,v,d) ((toys.optflags & f) ? v : d) -#define flag_chk(f) ((toys.optflags & f) ? 1 : 0) - typedef struct __attribute__((packed)) dhcp6_msg_s { uint8_t msgtype, transaction_id[3], options[524]; } dhcp6_msg_t; @@ -142,8 +139,8 @@ static void logit(char *format, ...) va_list p, t; uint8_t infomode = LOG_SILENT; - if (flag_chk(FLAG_S)) infomode |= LOG_SYSTEM; - if(flag_chk(FLAG_v)) infomode |= LOG_CONSOLE; + if (toys.optflags & FLAG_S) infomode |= LOG_SYSTEM; + if(toys.optflags & FLAG_v) infomode |= LOG_CONSOLE; va_start(p, format); va_copy(t, p); used = vsnprintf(NULL, 0, format, t); @@ -439,7 +436,8 @@ static void run_script(DHCP_DATA *res, char *name) struct stat sts; pid_t pid; char *argv[3]; - char *script = flag_get(FLAG_s, TT.script, "/usr/share/dhcp/default.script"); + char *script = (toys.optflags & FLAG_s) ? TT.script + : "/usr/share/dhcp/default.script"; if (stat(script, &sts) == -1 && errno == ENOENT) return; if (!res || fill_envp(res)) { @@ -474,15 +472,15 @@ static void lease_fail() { dbg("Lease failed.\n"); run_script(NULL, "leasefail"); - if (flag_chk(FLAG_n)) { + if (toys.optflags & FLAG_n) { xclose(TT.sock); xclose(TT.sock1); error_exit("Lease Failed, Exiting."); } - if (flag_chk(FLAG_b)) { + if (toys.optflags & FLAG_b) { dbg("Lease failed. Going to daemon mode.\n"); if (daemon(0,0)) perror_exit("daemonize"); - if (flag_chk(FLAG_p)) write_pid(TT.pidfile); + if (toys.optflags & FLAG_p) write_pid(TT.pidfile); toys.optflags &= ~FLAG_b; toys.optflags |= FLAG_f; } @@ -519,7 +517,8 @@ static void signal_handler(int sig) case SIGTERM: case SIGINT: dbg((sig == SIGTERM)?"SIGTERM.\n":"SIGINT.\n"); - if (flag_chk(FLAG_R) && TT.state == DHCP6CONFIRM) send_msg(DHCP6RELEASE); + if ((toys.optflags & FLAG_R) && TT.state == DHCP6CONFIRM) + send_msg(DHCP6RELEASE); if(sig == SIGINT) exit(0); break; default: break; @@ -547,13 +546,13 @@ void dhcp6_main(void) dbg = dummy; TT.state = DHCP6SOLICIT; - if (flag_chk(FLAG_v)) dbg = logit; + if (toys.optflags & FLAG_v) dbg = logit; if (!TT.interface_name) TT.interface_name = "eth0"; - if (flag_chk(FLAG_p)) write_pid(TT.pidfile); + if (toys.optflags & FLAG_p) write_pid(TT.pidfile); if (!TT.retry) TT.retry = 3; if (!TT.timeout) TT.timeout = 3; if (!TT.errortimeout) TT.errortimeout = 20; - if (flag_chk(FLAG_S)) { + if (toys.optflags & FLAG_S) { openlog("DHCP6 :", LOG_PID, LOG_DAEMON); dbg = logit; } @@ -661,18 +660,18 @@ void dhcp6_main(void) TT.retries = 0; run_script(&dhcp_data, (TT.state == DHCP6REQUEST) ? "request" : "renew"); - if (flag_chk(FLAG_q)) { - if (flag_chk(FLAG_R)) send_msg(DHCP6RELEASE); + if (toys.optflags & FLAG_q) { + if (toys.optflags & FLAG_R) send_msg(DHCP6RELEASE); break; } TT.state = DHCP6CONFIRM; set_timeout((dhcp_data.va_lf)?dhcp_data.va_lf:INT_MAX); dbg("Setting timeout to intmax."); - if (TT.state == DHCP6REQUEST || (!flag_chk(FLAG_f))) { + if (TT.state == DHCP6REQUEST || !(toys.optflags & FLAG_f)) { dbg("Making it a daemon\n"); if (daemon(0,0)) perror_exit("daemonize"); toys.optflags |= FLAG_f; - if (flag_chk(FLAG_p)) write_pid(TT.pidfile); + if (toys.optflags & FLAG_p) write_pid(TT.pidfile); } dbg("Making it a foreground.\n"); continue; diff --git a/toys/pending/dhcpd.c b/toys/pending/dhcpd.c index cd9f2ded..5d143167 100644 --- a/toys/pending/dhcpd.c +++ b/toys/pending/dhcpd.c @@ -51,9 +51,6 @@ config DEBUG_DHCP # define dbg(fmt, arg...) #endif -#define flag_get(f,v,d) ((toys.optflags & (f)) ? (v) : (d)) -#define flag_chk(f) ((toys.optflags & (f)) ? 1 : 0) - #define LOG_SILENT 0x0 #define LOG_CONSOLE 0x1 #define LOG_SYSTEM 0x2 @@ -1618,11 +1615,11 @@ void dhcpd_main(void) fd_set rfds; infomode = LOG_CONSOLE; - if (!(flag_chk(FLAG_f))) { + if (!(toys.optflags & FLAG_f)) { daemon(0,0); infomode = LOG_SILENT; } - if (flag_chk(FLAG_S)) { + if (toys.optflags & FLAG_S) { openlog("UDHCPD :", LOG_PID, LOG_DAEMON); infomode |= LOG_SYSTEM; } @@ -1631,7 +1628,7 @@ void dhcpd_main(void) parse_server_config((toys.optc==1)?toys.optargs[0]:"/etc/dhcpd.conf", keywords); infomsg(infomode, "toybox dhcpd started"); - if (flag_chk(FLAG_6)){ + if (toys.optflags & FLAG_6){ addr_version = AF_INET6; gconfig.t1 = ntohl(gconfig.t1); gconfig.t2 = ntohl(gconfig.t2); |