diff options
Diffstat (limited to 'include/ntpsim.h')
-rw-r--r-- | include/ntpsim.h | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/include/ntpsim.h b/include/ntpsim.h new file mode 100644 index 0000000..b270ce6 --- /dev/null +++ b/include/ntpsim.h @@ -0,0 +1,146 @@ +/* ntpsim.h + * + * The header file for the ntp discrete event simulator. + * + * Written By: Sachin Kamboj + * University of Delaware + * Newark, DE 19711 + * Copyright (c) 2006 + */ + +#ifndef NTPSIM_H +#define NTPSIM_H + +#include <stdio.h> +#include <math.h> +#ifdef HAVE_SYS_SOCKET_H +#include <sys/socket.h> +#endif +#include <arpa/inet.h> +#include "ntp_syslog.h" +#include "ntp_fp.h" +#include "ntp.h" +#include "ntp_select.h" +#include "ntp_malloc.h" +#include "ntp_refclock.h" +#include "recvbuff.h" +#include "ntp_io.h" +#include "ntp_stdlib.h" +#include "ntp_prio_q.h" + +/* CONSTANTS */ + +#ifdef PI +# undef PI +#endif +#define PI 3.1415926535 /* The world's most famous constant */ +#define SIM_TIME 86400 /* end simulation time */ +#define NET_DLY .001 /* network delay */ +#define PROC_DLY .001 /* processing delay */ +#define BEEP_DLY 3600 /* beep interval (s) */ + + +/* Discrete Event Queue + * -------------------- + * The NTP simulator is a discrete event simulator. + * + * Central to this simulator is an event queue which is a priority queue + * in which the "priority" is given by the time of arrival of the event. + * + * A discrete set of events can happen and are stored in the queue to arrive + * at a particular time. + */ + +/* Possible Discrete Events */ + +typedef enum { + BEEP, /* Event to record simulator stats */ + CLOCK, /* Event to advance the clock to the specified time */ + TIMER, /* Event that designates a timer interrupt. */ + PACKET /* Event that designates arrival of a packet */ +} funcTkn; + + +/* Event information */ + +typedef struct { + double time; /* Time at which event occurred */ + funcTkn function; /* Type of event that occured */ + union { + struct pkt evnt_pkt; + struct recvbuf evnt_buf; + } buffer; /* Other data associated with the event */ +#define ntp_pkt buffer.evnt_pkt +#define rcv_buf buffer.evnt_buf +} Event; + + +/* Server Script Information */ +typedef struct script_info_tag script_info; +struct script_info_tag { + script_info * link; + double duration; + double freq_offset; + double wander; + double jitter; + double prop_delay; + double proc_delay; +}; + +typedef DECL_FIFO_ANCHOR(script_info) script_info_fifo; + + +/* Server Structures */ + +typedef struct server_info_tag server_info; +struct server_info_tag { + server_info * link; + double server_time; + sockaddr_u * addr; + script_info_fifo * script; + script_info * curr_script; +}; + +typedef DECL_FIFO_ANCHOR(server_info) server_info_fifo; + + +/* Simulation control information */ + +typedef struct Sim_Info { + double sim_time; /* Time in the simulation */ + double end_time; /* Time at which simulation needs to be ended */ + double beep_delay; /* Delay between simulation "beeps" at which + simulation stats are recorded. */ + int num_of_servers; /* Number of servers in the simulation */ + server_info *servers; /* Pointer to array of servers */ +} sim_info; + + +/* Local Clock (Client) Variables */ + +typedef struct Local_Clock_Info { + double local_time; /* Client disciplined time */ + double adj; /* Remaining time correction */ + double slew; /* Correction Slew Rate */ + double last_read_time; /* Last time the clock was read */ +} local_clock_info; + +extern local_clock_info simclock; /* Local Clock Variables */ +extern sim_info simulation; /* Simulation Control Variables */ + +/* Function Prototypes */ + +int ntpsim (int argc, char *argv[]); +Event *event (double t, funcTkn f); +void sim_event_timer (Event *e); +int simulate_server (sockaddr_u *serv_addr, endpt *inter, + struct pkt *rpkt); +void sim_update_clocks (Event *e); +void sim_event_recv_packet (Event *e); +void sim_event_beep (Event *e); +void abortsim (char *errmsg); +double gauss (double, double); +double poisson (double, double); +void create_server_associations(void); + +#endif /* NTPSIM_H */ |