Patrick Welche <prlw1@cam.ac.uk>
[netbsd-mini2440.git] / external / bsd / ntp / dist / include / ntpsim.h
blobadb8035a5ddcb2a57d57fa76b9cc34e4ef51ded6
1 /* $NetBSD$ */
3 /* ntpsim.h
5 * The header file for the ntp discrete event simulator.
7 * Written By: Sachin Kamboj
8 * University of Delaware
9 * Newark, DE 19711
10 * Copyright (c) 2006
13 #ifndef NTPSIM_H
14 #define NTPSIM_H
16 #include <stdio.h>
17 #include <math.h>
18 #ifdef HAVE_SYS_SOCKET_H
19 #include <sys/socket.h>
20 #endif
21 #include <arpa/inet.h>
22 #include "ntp_syslog.h"
23 #include "ntp_fp.h"
24 #include "ntp.h"
25 #include "ntp_select.h"
26 #include "ntp_malloc.h"
27 #include "ntp_refclock.h"
28 #include "recvbuff.h"
29 #include "ntp_io.h"
30 #include "ntp_stdlib.h"
32 #include "ntp_data_structures.h"
34 /* CONSTANTS */
36 #ifdef PI
37 # undef PI
38 #endif
39 #define PI 3.1415926535 /* The world's most famous constant */
40 #define SIM_TIME 86400 /* end simulation time */
41 #define NET_DLY .001 /* network delay */
42 #define PROC_DLY .001 /* processing delay */
43 #define BEEP_DLY 3600 /* beep interval (s) */
44 #define SLEW 500e-6 /* correction rate (PPM) */
47 /* Discrete Event Queue
48 * --------------------
49 * The NTP simulator is a discrete event simulator.
51 * Central to this simulator is an event queue which is a priority queue
52 * in which the "priority" is given by the time of arrival of the event.
54 * A discrete set of events can happen and are stored in the queue to arrive
55 * at a particular time.
58 /* Possible Discrete Events */
60 typedef enum {
61 BEEP, /* Event to record simulator stats */
62 CLOCK, /* Event to advance the clock to the specified time */
63 TIMER, /* Event that designates a timer interrupt. */
64 PACKET /* Event that designates arrival of a packet */
65 } funcTkn;
68 /* Event information */
70 typedef struct {
71 double time; /* Time at which event occurred */
72 funcTkn function; /* Type of event that occured */
73 union {
74 struct pkt evnt_pkt;
75 struct recvbuf evnt_buf;
76 } buffer; /* Other data associated with the event */
77 #define ntp_pkt buffer.evnt_pkt
78 #define rcv_buf buffer.evnt_buf
79 } Event;
82 /* Server Script Information */
84 typedef struct {
85 double duration;
86 double freq_offset;
87 double wander;
88 double jitter;
89 double prop_delay;
90 double proc_delay;
91 } script_info;
95 /* Server Structures */
97 typedef struct {
98 double server_time; /* Server time */
99 sockaddr_u *addr; /* Server Address */
100 queue *script; /* Server Script */
101 script_info *curr_script; /* Current Script */
102 } server_info;
105 /* Simulation control information */
107 typedef struct Sim_Info {
108 double sim_time; /* Time in the simulation */
109 double end_time; /* Time at which simulation needs to be ended */
110 double beep_delay; /* Delay between simulation "beeps" at which
111 simulation stats are recorded. */
112 int num_of_servers; /* Number of servers in the simulation */
113 server_info *servers; /* Pointer to array of servers */
114 } sim_info;
117 /* Local Clock (Client) Variables */
119 typedef struct Local_Clock_Info {
120 double local_time; /* Client disciplined time */
121 double adj; /* Remaining time correction */
122 double slew; /* Correction Slew Rate */
123 double last_read_time; /* Last time the clock was read */
124 } local_clock_info;
126 extern local_clock_info simclock; /* Local Clock Variables */
127 extern sim_info simulation; /* Simulation Control Variables */
129 /* Function Prototypes */
131 int ntpsim (int argc, char *argv[]);
132 Event *event (double t, funcTkn f);
133 void sim_event_timer (Event *e);
134 int simulate_server (sockaddr_u *serv_addr,
135 struct interface *inter,
136 struct pkt *rpkt);
137 void sim_update_clocks (Event *e);
138 void sim_event_recv_packet (Event *e);
139 void sim_event_beep (Event *e);
140 void abortsim (char *errmsg);
141 double gauss (double, double);
142 double poisson (double, double);
143 int yyparse (void);
144 void create_server_associations (void);
146 #endif /* NTPSIM_H */