From: Ted Lemon Date: Mon, 12 Feb 2001 19:41:30 +0000 (+0000) Subject: Subroutinize some stuff so that it can be called in trace playback. X-Git-Tag: V3-BETA-2-PATCH-18~78 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=eb6b5a2014bb12dfff5f282903965b3e50b4323e;p=thirdparty%2Fdhcp.git Subroutinize some stuff so that it can be called in trace playback. --- diff --git a/common/dispatch.c b/common/dispatch.c index 05a921047..fee34f7c5 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.",