udhcp: change UDHCP_DEBUG into int, make verbosity selectable with -v

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko
2009-06-17 11:54:52 +02:00
parent ed8982bfc0
commit ac906fa85e
16 changed files with 197 additions and 122 deletions

View File

@@ -20,9 +20,9 @@
static int sockfd = -1;
#define LISTEN_NONE 0
#define LISTEN_NONE 0
#define LISTEN_KERNEL 1
#define LISTEN_RAW 2
#define LISTEN_RAW 2
static smallint listen_mode;
#define INIT_SELECTING 0
@@ -41,7 +41,7 @@ static smallint state;
/* just a little helper */
static void change_listen_mode(int new_mode)
{
DEBUG("entering %s listen mode",
log1("entering %s listen mode",
new_mode ? (new_mode == 1 ? "kernel" : "raw") : "none");
listen_mode = new_mode;
@@ -195,18 +195,17 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
OPT_s = 1 << 12,
OPT_T = 1 << 13,
OPT_t = 1 << 14,
OPT_v = 1 << 15,
OPT_S = 1 << 16,
OPT_A = 1 << 17,
OPT_O = 1 << 18,
OPT_o = 1 << 19,
OPT_f = 1 << 20,
OPT_S = 1 << 15,
OPT_A = 1 << 16,
OPT_O = 1 << 17,
OPT_o = 1 << 18,
OPT_f = 1 << 19,
/* The rest has variable bit positions, need to be clever */
OPTBIT_f = 20,
USE_FOR_MMU( OPTBIT_b,)
OPTBIT_f = 19,
USE_FOR_MMU( OPTBIT_b,)
IF_FEATURE_UDHCPC_ARPING(OPTBIT_a,)
IF_FEATURE_UDHCP_PORT( OPTBIT_P,)
USE_FOR_MMU( OPT_b = 1 << OPTBIT_b,)
USE_FOR_MMU( OPT_b = 1 << OPTBIT_b,)
IF_FEATURE_UDHCPC_ARPING(OPT_a = 1 << OPTBIT_a,)
IF_FEATURE_UDHCP_PORT( OPT_P = 1 << OPTBIT_P,)
};
@@ -219,18 +218,26 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
/* Parse command line */
/* Cc: mutually exclusive; O: list; -T,-t,-A take numeric param */
opt_complementary = "c--C:C--c:O::T+:t+:A+";
opt_complementary = "c--C:C--c:O::T+:t+:A+"
#if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 1
":vv"
#endif
;
IF_GETOPT_LONG(applet_long_options = udhcpc_longopts;)
opt = getopt32(argv, "c:CV:H:h:F:i:np:qRr:s:T:t:vSA:O:of"
opt = getopt32(argv, "c:CV:H:h:F:i:np:qRr:s:T:t:SA:O:of"
USE_FOR_MMU("b")
IF_FEATURE_UDHCPC_ARPING("a")
IF_FEATURE_UDHCP_PORT("P:")
"v"
, &str_c, &str_V, &str_h, &str_h, &str_F
, &client_config.interface, &client_config.pidfile, &str_r /* i,p */
, &client_config.script /* s */
, &discover_timeout, &discover_retries, &tryagain_timeout /* T,t,A */
, &list_O
IF_FEATURE_UDHCP_PORT(, &str_P)
#if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 1
, &dhcp_verbose
#endif
);
if (opt & OPT_c)
client_config.clientid = alloc_dhcp_option(DHCP_CLIENT_ID, str_c, 0);
@@ -252,10 +259,6 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
}
if (opt & OPT_r)
requested_ip = inet_addr(str_r);
if (opt & OPT_v) {
puts("version "BB_VER);
return 0;
}
#if ENABLE_FEATURE_UDHCP_PORT
if (opt & OPT_P) {
CLIENT_PORT = xatou16(str_P);
@@ -348,7 +351,7 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
retval = 0; /* If we already timed out, fall through, else... */
if (tv.tv_sec > 0) {
timestamp_before_wait = (unsigned)monotonic_sec();
DEBUG("Waiting on select...");
log1("Waiting on select...");
retval = select(max_fd + 1, &rfds, NULL, NULL, &tv);
if (retval < 0) {
/* EINTR? A signal was caught, don't panic */
@@ -428,7 +431,7 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
case BOUND:
/* Half of the lease passed, time to enter renewing state */
change_listen_mode(LISTEN_KERNEL);
DEBUG("Entering renew state");
log1("Entering renew state");
state = RENEWING;
/* fall right through */
case RENEWING:
@@ -439,7 +442,7 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
continue;
}
/* Timed out, enter rebinding state */
DEBUG("Entering rebinding state");
log1("Entering rebinding state");
state = REBINDING;
/* fall right through */
case REBINDING:
@@ -477,7 +480,7 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
else
len = udhcp_recv_raw_packet(&packet, sockfd);
if (len == -1) { /* error is severe, reopen socket */
DEBUG("error on read, %s, reopening socket", strerror(errno));
bb_info_msg("Read error: %s, reopening socket", strerror(errno));
sleep(discover_timeout); /* 3 seconds by default */
change_listen_mode(listen_mode); /* just close and reopen */
}
@@ -489,20 +492,21 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
continue;
if (packet.xid != xid) {
DEBUG("Ignoring xid %x (our xid is %x)",
log1("xid %x (our is %x), ignoring packet",
(unsigned)packet.xid, (unsigned)xid);
continue;
}
/* Ignore packets that aren't for us */
if (memcmp(packet.chaddr, client_config.client_mac, 6)) {
DEBUG("Packet does not have our chaddr - ignoring");
//FIXME: need to also check that last 10 bytes are zero
log1("chaddr does not match, ignoring packet"); // log2?
continue;
}
message = get_option(&packet, DHCP_MESSAGE_TYPE);
if (message == NULL) {
bb_error_msg("cannot get message type from packet - ignoring");
bb_error_msg("no message type option, ignoring packet");
continue;
}
@@ -563,7 +567,7 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
client_config.client_mac,
client_config.interface)
) {
bb_info_msg("offered address is in use "
bb_info_msg("Offered address is in use "
"(got ARP reply), declining");
send_decline(xid, server_addr, packet.yiaddr);