Make dhcp client timeout value signed.
Add DHCP_STATE_NULL = 0 state and make LISTEN_NONE = 0.
This commit is contained in:
parent
c45d116200
commit
d34c5f27b2
12
ndhc/dhcpc.h
12
ndhc/dhcpc.h
@ -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 */
|
||||||
|
44
ndhc/ndhc.c
44
ndhc/ndhc.c
@ -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();
|
||||||
|
Loading…
Reference in New Issue
Block a user