1251876Speter/*
2251876Speter * tvtots - tables for converting from Unix struct timeval's to
3251876Speter *	    NTP time stamp format.
4251876Speter */
5251876Speter#include <sys/types.h>
6251876Speter
7251876Speter#include "ntp_types.h"
8251876Speter
9251876Speter/*
10251876Speter * Tables to calculate time stamp fractions from usecs.  The entries
11251876Speter * in these tables are offset into using each of the two low order
12251876Speter * bytes plus the next 4 bits in a usec value (from a struct timeval).
13251876Speter * These are summed to produce the time stamp fraction.
14251876Speter *
15251876Speter * Note that these tables are rounded (not truncated) to the nearest
16251876Speter * low order bit in the fraction.  The timestamp computed should be
17251876Speter * +- 1.5 low order bits.
18251876Speter */
19251876Speter
20251876Speteru_long ustotslo[256] = {
21251876Speter	0x00000000, 0x000010c7, 0x0000218e, 0x00003255,
22251876Speter	0x0000431c, 0x000053e3, 0x000064aa, 0x00007571,
23251876Speter	0x00008638, 0x000096ff, 0x0000a7c6, 0x0000b88d,
24251876Speter	0x0000c954, 0x0000da1b, 0x0000eae2, 0x0000fba9,
25251876Speter	0x00010c6f, 0x00011d36, 0x00012dfd, 0x00013ec4,
26251876Speter	0x00014f8b, 0x00016052, 0x00017119, 0x000181e0,
27251876Speter	0x000192a7, 0x0001a36e, 0x0001b435, 0x0001c4fc,
28251876Speter	0x0001d5c3, 0x0001e68a, 0x0001f751, 0x00020818,
29251876Speter	0x000218df, 0x000229a6, 0x00023a6d, 0x00024b34,
30251876Speter	0x00025bfb, 0x00026cc2, 0x00027d89, 0x00028e50,
31251876Speter	0x00029f17, 0x0002afde, 0x0002c0a5, 0x0002d16c,
32251876Speter	0x0002e233, 0x0002f2fa, 0x000303c0, 0x00031487,
33251876Speter	0x0003254e, 0x00033615, 0x000346dc, 0x000357a3,
34251876Speter	0x0003686a, 0x00037931, 0x000389f8, 0x00039abf,
35251876Speter	0x0003ab86, 0x0003bc4d, 0x0003cd14, 0x0003dddb,
36262253Speter	0x0003eea2, 0x0003ff69, 0x00041030, 0x000420f7,
37251876Speter	0x000431be, 0x00044285, 0x0004534c, 0x00046413,
38251876Speter	0x000474da, 0x000485a1, 0x00049668, 0x0004a72f,
39251876Speter	0x0004b7f6, 0x0004c8bd, 0x0004d984, 0x0004ea4b,
40262253Speter	0x0004fb12, 0x00050bd8, 0x00051c9f, 0x00052d66,
41251876Speter	0x00053e2d, 0x00054ef4, 0x00055fbb, 0x00057082,
42251876Speter	0x00058149, 0x00059210, 0x0005a2d7, 0x0005b39e,
43251876Speter	0x0005c465, 0x0005d52c, 0x0005e5f3, 0x0005f6ba,
44251876Speter	0x00060781, 0x00061848, 0x0006290f, 0x000639d6,
45251876Speter	0x00064a9d, 0x00065b64, 0x00066c2b, 0x00067cf2,
46251876Speter	0x00068db9, 0x00069e80, 0x0006af47, 0x0006c00e,
47251876Speter	0x0006d0d5, 0x0006e19c, 0x0006f263, 0x00070329,
48251876Speter	0x000713f0, 0x000724b7, 0x0007357e, 0x00074645,
49251876Speter	0x0007570c, 0x000767d3, 0x0007789a, 0x00078961,
50251876Speter	0x00079a28, 0x0007aaef, 0x0007bbb6, 0x0007cc7d,
51251876Speter	0x0007dd44, 0x0007ee0b, 0x0007fed2, 0x00080f99,
52251876Speter	0x00082060, 0x00083127, 0x000841ee, 0x000852b5,
53251876Speter	0x0008637c, 0x00087443, 0x0008850a, 0x000895d1,
54251876Speter	0x0008a698, 0x0008b75f, 0x0008c826, 0x0008d8ed,
55251876Speter	0x0008e9b4, 0x0008fa7b, 0x00090b41, 0x00091c08,
56251876Speter	0x00092ccf, 0x00093d96, 0x00094e5d, 0x00095f24,
57251876Speter	0x00096feb, 0x000980b2, 0x00099179, 0x0009a240,
58251876Speter	0x0009b307, 0x0009c3ce, 0x0009d495, 0x0009e55c,
59251876Speter	0x0009f623, 0x000a06ea, 0x000a17b1, 0x000a2878,
60251876Speter	0x000a393f, 0x000a4a06, 0x000a5acd, 0x000a6b94,
61251876Speter	0x000a7c5b, 0x000a8d22, 0x000a9de9, 0x000aaeb0,
62251876Speter	0x000abf77, 0x000ad03e, 0x000ae105, 0x000af1cc,
63251876Speter	0x000b0292, 0x000b1359, 0x000b2420, 0x000b34e7,
64251876Speter	0x000b45ae, 0x000b5675, 0x000b673c, 0x000b7803,
65251876Speter	0x000b88ca, 0x000b9991, 0x000baa58, 0x000bbb1f,
66251876Speter	0x000bcbe6, 0x000bdcad, 0x000bed74, 0x000bfe3b,
67251876Speter	0x000c0f02, 0x000c1fc9, 0x000c3090, 0x000c4157,
68251876Speter	0x000c521e, 0x000c62e5, 0x000c73ac, 0x000c8473,
69251876Speter	0x000c953a, 0x000ca601, 0x000cb6c8, 0x000cc78f,
70251876Speter	0x000cd856, 0x000ce91d, 0x000cf9e4, 0x000d0aaa,
71251876Speter	0x000d1b71, 0x000d2c38, 0x000d3cff, 0x000d4dc6,
72251876Speter	0x000d5e8d, 0x000d6f54, 0x000d801b, 0x000d90e2,
73251876Speter	0x000da1a9, 0x000db270, 0x000dc337, 0x000dd3fe,
74251876Speter	0x000de4c5, 0x000df58c, 0x000e0653, 0x000e171a,
75251876Speter	0x000e27e1, 0x000e38a8, 0x000e496f, 0x000e5a36,
76251876Speter	0x000e6afd, 0x000e7bc4, 0x000e8c8b, 0x000e9d52,
77251876Speter	0x000eae19, 0x000ebee0, 0x000ecfa7, 0x000ee06e,
78251876Speter	0x000ef135, 0x000f01fb, 0x000f12c2, 0x000f2389,
79251876Speter	0x000f3450, 0x000f4517, 0x000f55de, 0x000f66a5,
80251876Speter	0x000f776c, 0x000f8833, 0x000f98fa, 0x000fa9c1,
81251876Speter	0x000fba88, 0x000fcb4f, 0x000fdc16, 0x000fecdd,
82251876Speter	0x000ffda4, 0x00100e6b, 0x00101f32, 0x00102ff9,
83251876Speter	0x001040c0, 0x00105187, 0x0010624e, 0x00107315,
84251876Speter	0x001083dc, 0x001094a3, 0x0010a56a, 0x0010b631,
85251876Speter};
86251876Speter
87251876Speteru_long ustotsmid[256] = {
88251876Speter	0x00000000, 0x0010c6f8, 0x00218def, 0x003254e7,
89251876Speter	0x00431bde, 0x0053e2d6, 0x0064a9ce, 0x007570c5,
90251876Speter	0x008637bd, 0x0096feb4, 0x00a7c5ac, 0x00b88ca4,
91251876Speter	0x00c9539b, 0x00da1a93, 0x00eae18a, 0x00fba882,
92251876Speter	0x010c6f7a, 0x011d3671, 0x012dfd69, 0x013ec460,
93251876Speter	0x014f8b58, 0x01605250, 0x01711947, 0x0181e03f,
94251876Speter	0x0192a736, 0x01a36e2e, 0x01b43526, 0x01c4fc1d,
95251876Speter	0x01d5c315, 0x01e68a0c, 0x01f75104, 0x020817fc,
96251876Speter	0x0218def3, 0x0229a5eb, 0x023a6ce3, 0x024b33da,
97251876Speter	0x025bfad2, 0x026cc1c9, 0x027d88c1, 0x028e4fb9,
98251876Speter	0x029f16b0, 0x02afdda8, 0x02c0a49f, 0x02d16b97,
99251876Speter	0x02e2328f, 0x02f2f986, 0x0303c07e, 0x03148775,
100251876Speter	0x03254e6d, 0x03361565, 0x0346dc5c, 0x0357a354,
101251876Speter	0x03686a4b, 0x03793143, 0x0389f83b, 0x039abf32,
102251876Speter	0x03ab862a, 0x03bc4d21, 0x03cd1419, 0x03dddb11,
103251876Speter	0x03eea208, 0x03ff6900, 0x04102ff7, 0x0420f6ef,
104251876Speter	0x0431bde7, 0x044284de, 0x04534bd6, 0x046412cd,
105251876Speter	0x0474d9c5, 0x0485a0bd, 0x049667b4, 0x04a72eac,
106251876Speter	0x04b7f5a3, 0x04c8bc9b, 0x04d98393, 0x04ea4a8a,
107251876Speter	0x04fb1182, 0x050bd879, 0x051c9f71, 0x052d6669,
108251876Speter	0x053e2d60, 0x054ef458, 0x055fbb4f, 0x05708247,
109251876Speter	0x0581493f, 0x05921036, 0x05a2d72e, 0x05b39e25,
110251876Speter	0x05c4651d, 0x05d52c15, 0x05e5f30c, 0x05f6ba04,
111251876Speter	0x060780fb, 0x061847f3, 0x06290eeb, 0x0639d5e2,
112251876Speter	0x064a9cda, 0x065b63d2, 0x066c2ac9, 0x067cf1c1,
113251876Speter	0x068db8b8, 0x069e7fb0, 0x06af46a8, 0x06c00d9f,
114251876Speter	0x06d0d497, 0x06e19b8e, 0x06f26286, 0x0703297e,
115251876Speter	0x0713f075, 0x0724b76d, 0x07357e64, 0x0746455c,
116251876Speter	0x07570c54, 0x0767d34b, 0x07789a43, 0x0789613a,
117251876Speter	0x079a2832, 0x07aaef2a, 0x07bbb621, 0x07cc7d19,
118	0x07dd4410, 0x07ee0b08, 0x07fed200, 0x080f98f7,
119	0x08205fef, 0x083126e6, 0x0841edde, 0x0852b4d6,
120	0x08637bcd, 0x087442c5, 0x088509bc, 0x0895d0b4,
121	0x08a697ac, 0x08b75ea3, 0x08c8259b, 0x08d8ec92,
122	0x08e9b38a, 0x08fa7a82, 0x090b4179, 0x091c0871,
123	0x092ccf68, 0x093d9660, 0x094e5d58, 0x095f244f,
124	0x096feb47, 0x0980b23e, 0x09917936, 0x09a2402e,
125	0x09b30725, 0x09c3ce1d, 0x09d49514, 0x09e55c0c,
126	0x09f62304, 0x0a06e9fb, 0x0a17b0f3, 0x0a2877ea,
127	0x0a393ee2, 0x0a4a05da, 0x0a5accd1, 0x0a6b93c9,
128	0x0a7c5ac1, 0x0a8d21b8, 0x0a9de8b0, 0x0aaeafa7,
129	0x0abf769f, 0x0ad03d97, 0x0ae1048e, 0x0af1cb86,
130	0x0b02927d, 0x0b135975, 0x0b24206d, 0x0b34e764,
131	0x0b45ae5c, 0x0b567553, 0x0b673c4b, 0x0b780343,
132	0x0b88ca3a, 0x0b999132, 0x0baa5829, 0x0bbb1f21,
133	0x0bcbe619, 0x0bdcad10, 0x0bed7408, 0x0bfe3aff,
134	0x0c0f01f7, 0x0c1fc8ef, 0x0c308fe6, 0x0c4156de,
135	0x0c521dd5, 0x0c62e4cd, 0x0c73abc5, 0x0c8472bc,
136	0x0c9539b4, 0x0ca600ab, 0x0cb6c7a3, 0x0cc78e9b,
137	0x0cd85592, 0x0ce91c8a, 0x0cf9e381, 0x0d0aaa79,
138	0x0d1b7171, 0x0d2c3868, 0x0d3cff60, 0x0d4dc657,
139	0x0d5e8d4f, 0x0d6f5447, 0x0d801b3e, 0x0d90e236,
140	0x0da1a92d, 0x0db27025, 0x0dc3371d, 0x0dd3fe14,
141	0x0de4c50c, 0x0df58c03, 0x0e0652fb, 0x0e1719f3,
142	0x0e27e0ea, 0x0e38a7e2, 0x0e496ed9, 0x0e5a35d1,
143	0x0e6afcc9, 0x0e7bc3c0, 0x0e8c8ab8, 0x0e9d51b0,
144	0x0eae18a7, 0x0ebedf9f, 0x0ecfa696, 0x0ee06d8e,
145	0x0ef13486, 0x0f01fb7d, 0x0f12c275, 0x0f23896c,
146	0x0f345064, 0x0f45175c, 0x0f55de53, 0x0f66a54b,
147	0x0f776c42, 0x0f88333a, 0x0f98fa32, 0x0fa9c129,
148	0x0fba8821, 0x0fcb4f18, 0x0fdc1610, 0x0fecdd08,
149	0x0ffda3ff, 0x100e6af7, 0x101f31ee, 0x102ff8e6,
150	0x1040bfde, 0x105186d5, 0x10624dcd, 0x107314c4,
151	0x1083dbbc, 0x1094a2b4, 0x10a569ab, 0x10b630a3,
152};
153
154u_long ustotshi[16] = {
155	0x00000000, 0x10c6f79a, 0x218def35, 0x3254e6cf,
156	0x431bde6a, 0x53e2d604, 0x64a9cd9f, 0x7570c539,
157	0x8637bcd3, 0x96feb46e, 0xa7c5ac08, 0xb88ca3a3,
158	0xc9539b3d, 0xda1a92d7, 0xeae18a72, 0xfba8820c,
159};
160