1#	@(#)CHANGES	5.1 (Berkeley) 5/11/93
2# $FreeBSD$
3
4This new version is almost identical to the timed and timedc code
5that has been shipped for years by a workstation vendor.
6
7Among the many changes:
8
9improve `timedc msite` to accept a list of hostnames.
10
11change slave-masters to answer the packets generated by `timedc msite`
12    with the name of the real master, not their own.  This makes it
13    possible to "chase the chain" of slave servers to the ultimate
14    master.
15
16much improve the log caused by `timedc trace on`:
17    -made `timed -t` work.
18    -suppression of repeated entries, which both slowed down the daemon
19	(sometimes catastrophically) and tended to make disks fill up
20	even more quickly.
21    -better time stamps on log entries
22    -more messages
23    -dump information about slaves, master, and so on each time
24	a message asking the log be turned on is received, and
25	when the log is turned off.
26    -fewer CPU cycles
27
28use a hash table to keep track of slaves, instead of the stupid linear
29    list.  This becomes handy with hundreds of slaves, instead of
30    the original design limit of "a room with a few VAX's."
31
32separate the main protocol timer from that used to look for other networks
33    to master.
34
35time stamp packets received by the daemon, so that time corrections
36    are not made (even more) inaccurate by waiting in the internal,
37    timed queue while the daemon is processing other messages.
38
39made -n and -i work with subnets not named in /etc/networks
40
41compute the median of the measured clocks, instead of the average
42    of "good" times.
43
44vastly improve the accuracy of the clock difference measure by 
45    `timedc clockdiff`.
46
47use adjtime() when possible, and directly set the clock only when
48    necessary.
49
50when the requested adjustment is small, perform only part of it, to
51    damp oscillations and improve the long term accuracy of the
52    adjustments.
53
54fix uncounted core-dumps on machines that do not allow dereferencing 0
55    in both the daemon and timedc.
56
57fix "master loop detection".
58
59fix several cases in which multi-homed masters could get into shouting 
60    matches, consuming all available network bandwidth and CPU cycles
61    (which ever runs out first), and convincing all bystanders to stop
62    advancing their own clocks.
63
64refuse to behave badly when other machines do.  Instead of arguing forever,
65    go off and sulk when other machines refuse to play by the rules.
66
67increase the maximum number of clients.
68
69add "-F host,host2,..." to "freerun" or "trust" only some hosts.  This
70    is handy both when only some machines should be trusted to let
71    root use the `date` command to change time in the network.
72
73    It is also handy when one machine has some other way of adjusting
74    its clock, whether NTP or a direct radio or atomic connection.
75    "-F localhost" causes `timed` to "trust" only itself.
76
77    It is also handy to build a hierarchy of timed masters crossing
78    networks.  The TSP protocol has no provision of "goodness of clock",
79    no natural way to completely heal network paritions.  Judicious
80    use of -F or -G can cause each gateway to trust only itself and
81    machines closer to a central machine with a radio or atomic clock.
82
83add #ifdef code that supports NIS "netgroups" of trusted hosts, which
84    can be easier to administer than -F.
85
86add #ifdef code to compute an aged total adjustment.  This can be used
87    in systems that can make long term changes in their system clock
88    frequency, e.g. "timetrim" in the Silicon Graphics kernel.
89
90
91Problems observed by others that are unresolved include:
92
93Practically any users can send to the master TSP messages and this
94	way corrupt the reliability of the system.  Authentication
95	of messages should be provided.  Unfortunately, that would
96	require changing the protocol with all of the implied
97	compatibility problems.  Fortunately, the new -F and -G args
98	can be used to cause the daemon to ignore time changes from
99	untrusted machines.
100
101MAN.	The limit of 1013 on the number of slaves hosts should be doc'ed.
102
103	It should be dynamically allocated with no limit.  On a
104	large network, one host could possibly master over many
105	more than 30 hosts.   Given the timers in the code and
106	effectively in the protocol, and the time required by each
107	master to talk to each slave, it is not practical to have
108	more than 200-300 slaves.  The master cannot keep up because
109	the slave-chatting is single-threaded.  when the master
110	gets behind, slaves start demanding elections.  To
111	significantly increase the number of slaves would require
112	multi-treading things, and given that a network with more
113	than 300 directly addressable machines has worse problems
114	than keep the time of day right, not worth worrying about.
115
116UGLY,CODE. timedc/cmds.c has a lots of repeated code in it.
117
118****    The first thing is that each command is set up as if it
119	were an individual program taking argc and argv.  A more
120	conventional calling style should be used.  I don't think
121	any of the routines take more than a couple arguments.
122
123UGLY.	fxn definition syntax does't follow convention:
124	has type on same line.
125
126****	It needs to be fixed at least enough that tags
127	will work on it.  An entire cleanup might be nice later, but
128	is noncritical.
129
130LOBBY(mildly),CODE:	Would be very convenient if date(1) took a
131	+-<number> argument to set the time relatively.  With
132	the advent of timed it is now reasonable to synchronize
133	with WWV, which is nearly impossible to do "by hand"
134	with just an absolute date, and scripts are too slow.
135	format could be +-nn...nn.ss, where the '.' is required
136	to remove ambiguity.
137
138****	If you want to do it go ahead.  It sounds useful.  As far as
139	syntax goes, the normal format for the date should work just
140	fine for this.  If the date is preceded by a plus or minus,
141	the change is relative, otherwise it is absolute.
142
143
144Vernon Schryver.
145vjs@sgi.com
146