Make dhcp client timeout value signed.

Add DHCP_STATE_NULL = 0 state and make LISTEN_NONE = 0.
This commit is contained in:
Nicholas J. Kain 2010-12-23 13:41:25 -05:00
parent c45d116200
commit d34c5f27b2
2 changed files with 31 additions and 25 deletions

View File

@ -1,18 +1,6 @@
#ifndef DHCPC_H_ #ifndef DHCPC_H_
#define DHCPC_H_ #define DHCPC_H_
enum {
INIT_SELECTING,
REQUESTING,
BOUND,
RENEWING,
REBINDING,
ARP_CHECK,
INIT_REBOOT,
RENEW_REQUESTED,
RELEASED
};
struct client_config_t { struct client_config_t {
char foreground; /* Do not fork */ char foreground; /* Do not fork */
char quit_after_lease; /* Quit after obtaining lease */ char quit_after_lease; /* Quit after obtaining lease */

View File

@ -62,22 +62,40 @@
#define NUMPACKETS 3 /* number of packets to send before delay */ #define NUMPACKETS 3 /* number of packets to send before delay */
#define RETRY_DELAY 30 /* time in seconds to delay after sending NUMPACKETS */ #define RETRY_DELAY 30 /* time in seconds to delay after sending NUMPACKETS */
enum {
DHCP_STATE_NULL = 0,
INIT_SELECTING,
REQUESTING,
BOUND,
RENEWING,
REBINDING,
ARP_CHECK,
INIT_REBOOT,
RENEW_REQUESTED,
RELEASED
};
enum {
LISTEN_NONE = 0,
LISTEN_KERNEL,
LISTEN_RAW
};
static int epollfd, signalFd, arpFd = -1; static int epollfd, signalFd, arpFd = -1;
static struct epoll_event events[3]; static struct epoll_event events[3];
static char pidfile[MAX_PATH_LENGTH] = PID_FILE_DEFAULT; static char pidfile[MAX_PATH_LENGTH] = PID_FILE_DEFAULT;
static uint32_t requested_ip, server_addr, timeout; static int timeout;
static uint32_t requested_ip, server_addr;
static uint32_t lease, t1, t2, xid; static uint32_t lease, t1, t2, xid;
static long long start; static long long start;
static int dhcp_state, arp_prev_dhcp_state, packet_num, listenFd = -1, listen_mode; static int dhcp_state = INIT_SELECTING;
static int arp_prev_dhcp_state = DHCP_STATE_NULL;
enum { static int listen_mode = LISTEN_NONE;
LISTEN_NONE, static int listenFd = -1;
LISTEN_KERNEL, static int packet_num;
LISTEN_RAW
};
struct client_config_t client_config = { struct client_config_t client_config = {
/* Default options. */ /* Default options. */
@ -199,6 +217,7 @@ static void perform_renew(void)
dhcp_state = INIT_SELECTING; dhcp_state = INIT_SELECTING;
break; break;
case INIT_SELECTING: case INIT_SELECTING:
default:
break; break;
} }
@ -396,6 +415,7 @@ static void handle_timeout(void)
case ARP_CHECK: case ARP_CHECK:
/* No response to ARP obviously means that the address is free. */ /* No response to ARP obviously means that the address is free. */
arp_success(); arp_success();
default:
break; break;
} }
} }
@ -591,7 +611,7 @@ static void signal_dispatch()
static void do_work(void) static void do_work(void)
{ {
long long last_awake; long long last_awake;
int timeout_delta, stimeout; int timeout_delta;
epollfd = epoll_create1(0); epollfd = epoll_create1(0);
if (epollfd == -1) if (epollfd == -1)
@ -621,10 +641,9 @@ static void do_work(void)
suicide("epoll_wait: unknown fd"); suicide("epoll_wait: unknown fd");
} }
stimeout = timeout;
timeout_delta = curms() - last_awake; timeout_delta = curms() - last_awake;
stimeout -= timeout_delta; timeout -= timeout_delta;
if (stimeout <= 0) { if (timeout <= 0) {
timeout = 0; timeout = 0;
handle_timeout(); handle_timeout();
} }
@ -768,7 +787,6 @@ int main(int argc, char **argv)
"cap_net_bind_service,cap_net_broadcast,cap_net_raw=ep"); "cap_net_bind_service,cap_net_broadcast,cap_net_raw=ep");
drop_root(uid, gid); drop_root(uid, gid);
dhcp_state = INIT_SELECTING;
run_script(NULL, SCRIPT_DECONFIG); run_script(NULL, SCRIPT_DECONFIG);
do_work(); do_work();