summaryrefslogtreecommitdiff
path: root/common/dispatch.c
diff options
context:
space:
mode:
authorTed Lemon <source@isc.org>2001-02-12 19:41:30 +0000
committerTed Lemon <source@isc.org>2001-02-12 19:41:30 +0000
commiteb6b5a2014bb12dfff5f282903965b3e50b4323e (patch)
tree245a4f9bb2ce027fbf84654483b4fcd0f7d53fdb /common/dispatch.c
parentfc33f8c58e66c25faa1e4c28bf56e46f13cde923 (diff)
downloadisc-dhcp-eb6b5a2014bb12dfff5f282903965b3e50b4323e.tar.gz
Subroutinize some stuff so that it can be called in trace playback.
Diffstat (limited to 'common/dispatch.c')
-rw-r--r--common/dispatch.c69
1 files changed, 40 insertions, 29 deletions
diff --git a/common/dispatch.c b/common/dispatch.c
index 05a92104..fee34f7c 100644
--- a/common/dispatch.c
+++ b/common/dispatch.c
@@ -3,7 +3,7 @@
Network input dispatcher... */
/*
- * Copyright (c) 1995-2000 Internet Software Consortium.
+ * Copyright (c) 1995-2001 Internet Software Consortium.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -43,7 +43,7 @@
#ifndef lint
static char copyright[] =
-"$Id: dispatch.c,v 1.62 2000/05/16 23:02:14 mellon Exp $ Copyright (c) 1995-2000 The Internet Software Consortium. All rights reserved.\n";
+"$Id: dispatch.c,v 1.63 2001/02/12 19:41:30 mellon Exp $ Copyright (c) 1995-2001 The Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */
#include "dhcpd.h"
@@ -53,6 +53,42 @@ static struct timeout *free_timeouts;
int interfaces_invalidated;
+void set_time (u_int32_t t)
+{
+ /* Do any outstanding timeouts. */
+ if (cur_time != t) {
+ cur_time = t;
+ process_outstanding_timeouts ((struct timeval *)0);
+ }
+}
+
+struct timeval *process_outstanding_timeouts (struct timeval *tvp)
+{
+ /* Call any expired timeouts, and then if there's
+ still a timeout registered, time out the select
+ call then. */
+ another:
+ if (timeouts) {
+ struct timeout *t;
+ if (timeouts -> when <= cur_time) {
+ t = timeouts;
+ timeouts = timeouts -> next;
+ (*(t -> func)) (t -> what);
+ if (t -> unref)
+ (*t -> unref) (&t -> what, MDL);
+ t -> next = free_timeouts;
+ free_timeouts = t;
+ goto another;
+ }
+ if (tvp) {
+ tvp -> tv_sec = timeouts -> when;
+ tvp -> tv_usec = 0;
+ }
+ return tvp;
+ } else
+ return (struct timeval *)0;
+}
+
/* Wait for packets to come in using select(). When one does, call
receive_packet to receive the packet and possibly strip hardware
addressing information from it, and then call through the
@@ -60,37 +96,12 @@ int interfaces_invalidated;
void dispatch ()
{
- fd_set r, w, x;
- struct protocol *l;
- int max = 0;
- int count;
struct timeval tv, *tvp;
isc_result_t status;
+ /* Wait for a packet or a timeout... XXX */
do {
- /* Call any expired timeouts, and then if there's
- still a timeout registered, time out the select
- call then. */
- another:
- if (timeouts) {
- struct timeout *t;
- if (timeouts -> when <= cur_time) {
- t = timeouts;
- timeouts = timeouts -> next;
- (*(t -> func)) (t -> what);
- if (t -> unref)
- (*t -> unref) (&t -> what, MDL);
- t -> next = free_timeouts;
- free_timeouts = t;
- goto another;
- }
- tv.tv_sec = timeouts -> when;
- tv.tv_usec = 0;
- tvp = &tv;
- } else
- tvp = (struct timeval *)0;
-
- /* Wait for a packet or a timeout... XXX */
+ tvp = process_outstanding_timeouts (&tv);
status = omapi_one_dispatch (0, tvp);
} while (status == ISC_R_TIMEDOUT || status == ISC_R_SUCCESS);
log_fatal ("omapi_one_dispatch failed: %s -- exiting.",