1181834Sroberto<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2181834Sroberto
3181834Sroberto<html>
4181834Sroberto
5181834Sroberto	<head>
6181834Sroberto		<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
7181834Sroberto		<meta name="generator" content="HTML Tidy, see www.w3.org">
8181834Sroberto		<title>ntpdsim - Network Time Protocol (NTP) simulator</title>
9181834Sroberto		<link href="scripts/style.css" type="text/css" rel="stylesheet">
10181834Sroberto	</head>
11181834Sroberto
12181834Sroberto	<body>
13181834Sroberto		<h3><tt>ntpdsim</tt> - Network Time Protocol (NTP) simulator</h3>
14181834Sroberto		<img src="pic/alice47.gif" alt="gif" align="left"><a href="http://www.eecis.udel.edu/%7emills/pictures.html">from <i>Alice's Adventures in Wonderland</i>, Lewis Carroll</a>
15181834Sroberto		<p>The mushroom knows all the command line options.</p>
16181834Sroberto		<p>Last update: <csobj format="ShortTime" h="25" locale="00000409" region="0" t="DateTime" w="61">21:32</csobj> UTC <csobj format="LongDate" h="25" locale="00000409" region="0" t="DateTime" w="223">Friday, June 16, 2006</csobj></p>
17181834Sroberto		<br clear="left">
18181834Sroberto		<h4>Related Links</h4>
19181834Sroberto		<script type="text/javascript" language="javascript" src="scripts/links7.txt"></script>
20181834Sroberto		<h4>Table of Contents</h4>
21181834Sroberto		<ul>
22181834Sroberto			<li><a href="#description">Description</a><br>
23181834Sroberto			<li><a href="#configuration">Configuration</a>
24181834Sroberto			<li><a href="#sample">Sample Configuration File</a>
25181834Sroberto		</ul>
26181834Sroberto		<h4 id="description">Description</h4>
27181834Sroberto		<p>The ntpdsim program is used to simulate and study the behavior of an NTP daemon that derives its time from a number of different simulated time sources (servers). Each simulated server can be configured to have a different time offset, frequency offset, propagation delay, processing delay, network jitter and oscillator wander.</p>
28181834Sroberto		<p>The ntpdsim program runs all the same selection, mitigation, and discipline algorithms as the actual ntpd daemon at the client. (It actually uses the same code). However, the input/output routines and servers are simulated. That is, instead of sending the client messages over the network to the actual servers, the client messages are intercepted by the ntpdsim program, which then generates the replies to those messages. The reply messages are carefully "inserted" into the input queue of the client at the right time according to the specified server properties (like propagation delay).</p>
29181834Sroberto		<p>Each simulated server runs according to a specified script that describes the server properties at a particular time. Each script consists of a series of consecutive acts. Each act runs for a particular duration and specifies the frequency offset, propagation delay, processing delay, network jitter and oscillator wander of the server for that duration. Once the duration of an act expires, the simulated server reconfigures itself according to the properties specified in the next act.</p>
30181834Sroberto		<h4 id="configuration">Configuration</h4>
31181834Sroberto		<p>The ntpdsim program is configured by providing a configuration file at startup. The crux of the simulator configuration is specified using a <tt>simulate</tt> command, the syntax of which is given below. Note that all time quantities are in seconds and all frequency quantities are in parts per million (PPM):</p>
32181834Sroberto		<p>&lt;<i>simulate_command</i>&gt; ::= <tt>simulate</tt> { &lt;<i>init_statement_list</i>&gt; &lt;<i>server_list</i>&gt; }<br>
33181834Sroberto		&lt;<i>init_statement_list</i>&gt; ::= &lt;init_statement_list&gt; &lt;init_statement&gt; | &lt;init_statement&gt;<br>
34181834Sroberto		&lt;<i>init_statement</i>&gt; ::= <tt>beep_delay</tt> = &lt;number&gt; | <tt>simulation_duration</tt> = &lt;number&gt;<br>
35181834Sroberto		&lt;<i>server_list</i>&gt; ::= &lt;<i>server_list</i>&gt; &lt;server&gt; | &lt;server&gt;<br>
36181834Sroberto		&lt;<i>server_list</i>&gt; ::= <tt>server</tt> = &lt;address&gt; { <tt>server_offset</tt> = &lt;number&gt; &lt;act_list&gt; }<br>
37181834Sroberto		&lt;<i>act_list</i>&gt; ::= &lt;<i>act_list</i>&gt; &lt;<i>act</i>&gt; | &lt;<i>act</i>&gt;<br>
38181834Sroberto		&lt;<i>act</i>&gt; ::= <tt>duration</tt> = &lt;number&gt; { &lt;<i>act_stmt_list</i>&gt; }<br>
39181834Sroberto		&lt;<i>act_stmt_list</i>&gt; ::= &lt;<i>act_stmt_list</i>&gt; &lt;<i>act_stmt</i>&gt; | &lt;<i>act_stmt</i>&gt;<br>
40181834Sroberto		&lt;<i>act_stmt</i>&gt; ::= <tt>freq_offset</tt> = &lt;number&gt; | <tt>wander</tt> = &lt;number&gt; | <tt>jitter</tt> = &lt;number&gt; | <tt>prop_delay</tt> = &lt;number&gt; | <tt>proc_delay</tt> = &lt;number&gt;</p>
41181834Sroberto		<p>In addition to the simulate command, other standard NTP configuration commands can be specified. These commands have the same meaning as in the ntpd configuration. Note that newlines are <b>not</b> significant within the simulate command even though they are used to mark the end of a normal NTP configuration command.</p>
42181834Sroberto		<h4 id="sample">Sample Configuration File</h4>
43181834Sroberto		<p>A sample ntpdsim configuration file is given below. It specifies two simulated servers, each of which has two acts.</p>
44181834Sroberto	<pre>
45181834Sroberto    # Client configuration 
46181834Sroberto    disable kernel
47181834Sroberto    server pogo
48181834Sroberto    driftfile ./ntp.drift
49181834Sroberto    statsdir ./ntpstats/
50181834Sroberto    filegen loopstats type day enable
51181834Sroberto    filegen peerstats type day enable
52181834Sroberto
53181834Sroberto    # Simulation configuration
54181834Sroberto    simulate {
55181834Sroberto        simulation_duration = 86400
56181834Sroberto        beep_delay = 3600
57181834Sroberto
58181834Sroberto        # Server 1
59181834Sroberto	server = louie.udel.edu {
60181834Sroberto	    server_offset = 0 
61181834Sroberto            duration = 50000 {
62181834Sroberto		freq_offset = 400
63181834Sroberto		wander = 1.0
64181834Sroberto		jitter = 0.001
65181834Sroberto		prop_delay = 0.001
66181834Sroberto		proc_delay = 0.001
67181834Sroberto	    }
68181834Sroberto            duration = 6400 {
69181834Sroberto		freq_offset = 200
70181834Sroberto		wander = 1.0
71181834Sroberto		jitter = 0.001
72181834Sroberto		prop_delay = 0.001
73181834Sroberto		proc_delay = 0.001
74181834Sroberto	    }
75181834Sroberto	}
76181834Sroberto
77181834Sroberto        # Server 2
78181834Sroberto	server = baldwin.udel.edu {
79181834Sroberto	    server_offset = 0.02
80181834Sroberto	    duration = 10000 {
81181834Sroberto		freq_offset = 400
82181834Sroberto		wander = 1.0
83181834Sroberto		jitter = 0.001
84181834Sroberto		prop_delay = 0.5
85181834Sroberto		proc_delay = 0.001
86181834Sroberto	    }
87181834Sroberto	    duration = 60000 {
88181834Sroberto		freq_offset = 200
89181834Sroberto		wander = 1.0
90181834Sroberto		jitter = 0.05
91181834Sroberto		prop_delay = 0.005
92181834Sroberto		proc_delay = 0.001
93181834Sroberto	    }
94181834Sroberto	}
95181834Sroberto    }
96181834Sroberto  </pre>
97181834Sroberto		<hr>
98181834Sroberto		<address><a href="mailto:skamboj@udel.edu">Sachin Kamboj</a></address>
99181834Sroberto		<script type="text/javascript" language="javascript" src="scripts/footer.txt"></script>
100181834Sroberto	</body>
101181834Sroberto
102181834Sroberto</html>
103