Move the timeout information into struct interface_info with
authorkrw <krw@openbsd.org>
Sun, 18 Jun 2017 21:08:15 +0000 (21:08 +0000)
committerkrw <krw@openbsd.org>
Sun, 18 Jun 2017 21:08:15 +0000 (21:08 +0000)
the rest of the dhcp state. One less struct (dhcp_timeout) to
worry about, one less field (ifi) to keep track of.

sbin/dhclient/dhclient.c
sbin/dhclient/dhcpd.h
sbin/dhclient/dispatch.c

index 468fdfd..d9f2757 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: dhclient.c,v 1.436 2017/06/18 17:01:46 krw Exp $      */
+/*     $OpenBSD: dhclient.c,v 1.437 2017/06/18 21:08:15 krw Exp $      */
 
 /*
  * Copyright 2004 Henning Brauer <henning@openbsd.org>
@@ -404,7 +404,7 @@ routehandler(struct interface_info *ifi)
                                        ftruncate(fileno(optionDB), 0);
                                }
                                /* No need to wait for anything but link. */
-                               cancel_timeout();
+                               cancel_timeout(ifi);
                        }
                }
                break;
@@ -752,7 +752,7 @@ state_reboot(struct interface_info *ifi)
        char ifname[IF_NAMESIZE];
        time_t cur_time;
 
-       cancel_timeout();
+       cancel_timeout(ifi);
        deleting.s_addr = INADDR_ANY;
        adding.s_addr = INADDR_ANY;
 
@@ -810,7 +810,7 @@ state_selecting(struct interface_info *ifi)
 {
        struct option_data *option;
 
-       cancel_timeout();
+       cancel_timeout(ifi);
 
        if (ifi->offer == NULL) {
                state_panic(ifi);
@@ -941,7 +941,7 @@ dhcpack(struct interface_info *ifi, struct option_data *options, char *info)
        ifi->offer->ssid_len = ifi->ssid_len;
 
        /* Stop resending DHCPREQUEST. */
-       cancel_timeout();
+       cancel_timeout(ifi);
 
        bind_lease(ifi);
 }
@@ -977,7 +977,7 @@ dhcpnak(struct interface_info *ifi, struct option_data *options, char *info)
        ifi->active = NULL;
 
        /* Stop sending DHCPREQUEST packets. */
-       cancel_timeout();
+       cancel_timeout(ifi);
 
        ifi->state = S_INIT;
        state_init(ifi);
@@ -1451,7 +1451,7 @@ send_request(struct interface_info *ifi)
        if (ifi->state == S_REBOOTING && interval >
            config->reboot_timeout) {
                ifi->state = S_INIT;
-               cancel_timeout();
+               cancel_timeout(ifi);
                state_init(ifi);
                return;
        }
index 0cdcd56..890e01d 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: dhcpd.h,v 1.188 2017/06/18 17:01:46 krw Exp $ */
+/*     $OpenBSD: dhcpd.h,v 1.189 2017/06/18 21:08:15 krw Exp $ */
 
 /*
  * Copyright (c) 2004 Henning Brauer <henning@openbsd.org>
@@ -119,6 +119,7 @@ struct client_config {
        char                    *server_name;
 };
 
+
 struct interface_info {
        struct ether_addr        hw_address;
        char                     name[IFNAMSIZ];
@@ -144,6 +145,8 @@ struct interface_info {
        struct dhcp_packet       sent_packet;
        int                      sent_packet_length;
        u_int32_t                xid;
+       time_t                   timeout;
+       void                    (*timeout_func)(struct interface_info *);
        u_int16_t                secs;
        time_t                   first_sending;
        time_t                   startup_time;
@@ -156,12 +159,6 @@ struct interface_info {
        TAILQ_HEAD(_leases, client_lease) leases;
 };
 
-struct dhcp_timeout {
-       time_t                  when;
-       void                    (*func)(struct interface_info *);
-       struct interface_info   *ifi;
-};
-
 #define        _PATH_RESOLV_CONF       "/etc/resolv.conf"
 #define        _PATH_DHCLIENT_CONF     "/etc/dhclient.conf"
 #define        _PATH_DHCLIENT_DB       "/var/db/dhclient.leases"
@@ -215,7 +212,7 @@ ssize_t receive_packet(struct interface_info *, struct sockaddr_in *,
 void dispatch(struct interface_info *);
 void set_timeout(time_t, void (*)(struct interface_info *),
     struct interface_info *);
-void cancel_timeout(void);
+void cancel_timeout(struct interface_info *);
 void interface_link_forceup(char *);
 int interface_status(struct interface_info *);
 int get_rdomain(char *);
index 62308ec..57ed6b2 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: dispatch.c,v 1.123 2017/06/18 17:01:46 krw Exp $      */
+/*     $OpenBSD: dispatch.c,v 1.124 2017/06/18 21:08:15 krw Exp $      */
 
 /*
  * Copyright 2004 Henning Brauer <henning@openbsd.org>
@@ -70,8 +70,6 @@
 #include "privsep.h"
 
 
-struct dhcp_timeout timeout;
-
 void packethandler(struct interface_info *ifi);
 void sendhup(struct client_lease *);
 
@@ -124,16 +122,14 @@ dispatch(struct interface_info *ifi)
        struct pollfd fds[3];
        time_t cur_time, howlong;
        void (*func)(struct interface_info *);
-       struct interface_info *arg;
 
        while (quit == 0) {
-               if (timeout.func) {
+               if (ifi->timeout_func) {
                        time(&cur_time);
-                       if (timeout.when <= cur_time) {
-                               func = timeout.func;
-                               arg = timeout.ifi;
-                               cancel_timeout();
-                               (*(func))(arg);
+                       if (ifi->timeout <= cur_time) {
+                               func = ifi->timeout_func;
+                               cancel_timeout(ifi);
+                               (*(func))(ifi);
                                continue;
                        }
                        /*
@@ -142,7 +138,7 @@ dispatch(struct interface_info *ifi)
                         * int for poll, while not polling with a
                         * negative timeout and blocking indefinitely.
                         */
-                       howlong = timeout.when - cur_time;
+                       howlong = ifi->timeout - cur_time;
                        if (howlong > INT_MAX / 1000)
                                howlong = INT_MAX / 1000;
                        to_msec = howlong * 1000;
@@ -283,17 +279,15 @@ void
 set_timeout(time_t secs, void (*where)(struct interface_info *),
     struct interface_info *ifi)
 {
-       timeout.when = time(NULL) + secs;
-       timeout.func = where;
-       timeout.ifi = ifi;
+       ifi->timeout = time(NULL) + secs;
+       ifi->timeout_func = where;
 }
 
 void
-cancel_timeout(void)
+cancel_timeout(struct interface_info *ifi)
 {
-       timeout.when = 0;
-       timeout.func = NULL;
-       timeout.ifi = NULL;
+       ifi->timeout = 0;
+       ifi->timeout_func = NULL;
 }
 
 int