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