summaryrefslogtreecommitdiffstats
path: root/usr.sbin/xntpd/patches
diff options
context:
space:
mode:
authorwollman <wollman@FreeBSD.org>1994-04-21 00:33:33 +0000
committerwollman <wollman@FreeBSD.org>1994-04-21 00:33:33 +0000
commit1185c9048d38483a3f99f3065590713d8bcda610 (patch)
tree5b64f04197cf59cf404d915ac4a06650399db240 /usr.sbin/xntpd/patches
parentd9768fd9dbb9ffb082896c373f5e78f968079f68 (diff)
downloadFreeBSD-src-1185c9048d38483a3f99f3065590713d8bcda610.zip
FreeBSD-src-1185c9048d38483a3f99f3065590713d8bcda610.tar.gz
xntp3.3s from UDel
Diffstat (limited to 'usr.sbin/xntpd/patches')
-rw-r--r--usr.sbin/xntpd/patches/patch.1790
-rw-r--r--usr.sbin/xntpd/patches/patch.101925
-rw-r--r--usr.sbin/xntpd/patches/patch.11536
-rw-r--r--usr.sbin/xntpd/patches/patch.1266
-rw-r--r--usr.sbin/xntpd/patches/patch.1368
-rw-r--r--usr.sbin/xntpd/patches/patch.14116
-rw-r--r--usr.sbin/xntpd/patches/patch.1539
-rw-r--r--usr.sbin/xntpd/patches/patch.16267
-rw-r--r--usr.sbin/xntpd/patches/patch.1750
-rw-r--r--usr.sbin/xntpd/patches/patch.1899
-rw-r--r--usr.sbin/xntpd/patches/patch.19599
-rw-r--r--usr.sbin/xntpd/patches/patch.2129
-rw-r--r--usr.sbin/xntpd/patches/patch.201031
-rw-r--r--usr.sbin/xntpd/patches/patch.2154
-rw-r--r--usr.sbin/xntpd/patches/patch.22296
-rw-r--r--usr.sbin/xntpd/patches/patch.2380
-rw-r--r--usr.sbin/xntpd/patches/patch.24474
-rw-r--r--usr.sbin/xntpd/patches/patch.25474
-rw-r--r--usr.sbin/xntpd/patches/patch.2636
-rw-r--r--usr.sbin/xntpd/patches/patch.2786
-rw-r--r--usr.sbin/xntpd/patches/patch.28454
-rw-r--r--usr.sbin/xntpd/patches/patch.2952
-rw-r--r--usr.sbin/xntpd/patches/patch.33032
-rw-r--r--usr.sbin/xntpd/patches/patch.3073
-rw-r--r--usr.sbin/xntpd/patches/patch.3183
-rw-r--r--usr.sbin/xntpd/patches/patch.3289
-rw-r--r--usr.sbin/xntpd/patches/patch.3375
-rw-r--r--usr.sbin/xntpd/patches/patch.34303
-rw-r--r--usr.sbin/xntpd/patches/patch.35914
-rw-r--r--usr.sbin/xntpd/patches/patch.3642
-rw-r--r--usr.sbin/xntpd/patches/patch.37204
-rw-r--r--usr.sbin/xntpd/patches/patch.38226
-rw-r--r--usr.sbin/xntpd/patches/patch.3978
-rw-r--r--usr.sbin/xntpd/patches/patch.44719
-rw-r--r--usr.sbin/xntpd/patches/patch.4092
-rw-r--r--usr.sbin/xntpd/patches/patch.4150
-rw-r--r--usr.sbin/xntpd/patches/patch.4238
-rw-r--r--usr.sbin/xntpd/patches/patch.4348
-rw-r--r--usr.sbin/xntpd/patches/patch.549
-rw-r--r--usr.sbin/xntpd/patches/patch.6550
-rw-r--r--usr.sbin/xntpd/patches/patch.7274
-rw-r--r--usr.sbin/xntpd/patches/patch.844
-rw-r--r--usr.sbin/xntpd/patches/patch.983
43 files changed, 18787 insertions, 0 deletions
diff --git a/usr.sbin/xntpd/patches/patch.1 b/usr.sbin/xntpd/patches/patch.1
new file mode 100644
index 0000000..a6089ff
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.1
@@ -0,0 +1,790 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa12064; 26 Jan 94 16:33 EST
+Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa12284;
+ 26 Jan 94 16:26 EST
+Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
+ id AA16418 (5.65c-6/7.3v-FAU); Wed, 26 Jan 1994 22:26:48 +0100
+Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
+ id AA29418 (5.65c-6/7.3m-FAU); Wed, 26 Jan 1994 22:26:45 +0100
+From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
+Message-Id: <199401262126.AA29418@faui43.informatik.uni-erlangen.de>
+Subject: Re: Solaribum
+To: Mills@udel.edu
+Date: Wed, 26 Jan 94 22:26:38 MET
+Cc: Frank.Kardel@informatik.uni-erlangen.de, Piete.Brooks@cl.cam.ac.uk,
+ Paul_Vixie@corpmis.sjc.hw.sony.com
+In-Reply-To: <9401261207.aa10860@huey.udel.edu>; from "Mills@udel.edu" at Jan 26, 94 12:07 pm
+X-Mailer: ELM [version 2.3 PL11]
+
+
+> Frank,
+
+> Your command-line weenie sounds rather useful, especially in cases where
+> 1-pps signals, kernel mods, etc., are involved. Better be quick about
+> patches, though. Paul Vixie is burning rubber on changes.
+
+> Dave
+
+Ok, you overan me with 3.3c - thus the following patches will be
+relative to 3.3c around Jan 26th 11:something.
+
+The patches include additional sys and refclock variables, the
+adjtime fix from Lewis, doc fixes and a include botch fix for
+lib/numtohost.c.
+
+For examples how to add extra refclock variables see refclock_parse.c
+(as usual 8-). The variable mechanism is documented in doc/xntpd.8.
+
+Ok, here it goes...
+
+begin 644 patches-fau.Z
+M'YV09-*8,0.BQ1@05)X0>:(CA@N'#F<@5,APAHL:"E1HG+BPX<./,Q)<*4,&
+MA)(P;D#(L*$RA@X:-E[> !$C1PX:"EKHY/A$)$F3*%6RE.$2YDL<-&WBU,BT
+MJ5,5&3?&8%$#1%,%($",4!!"*T\6=D!8I)'TY@L8,5[(D!CC1L,<.F"P7!-&
+M#IDR;$ 4P0,'JU:_5-"DF0/"3!HV94",>>.&3I@T;@C#D?-&#.(VA->X>7,G
+M)9TW(.B@21RFCN@W<@B+#D,'Q!PZA_.Z*?/S,P@QB<DP+N/"[T@0=][485,R
+M#)S)9<:D89U8((@\PA4+)^X:3MW$<]ZT2?R&(/0Z<D*GV1X:-)LW;]:$1D.Y
+MSADT.7=.K:I3I]^M74=\#6NQ:DVS:*GE'UPPS*!##57191=>>O%U'V""$688
+M8M(U]EAD($Q6V669;=99>>N19AH:J*F&!FNNP<:&;+259!MN(.@V6V]9_1;<
+M<,4=)T=RR]'1G'?1+89C==>YIAUW0((G'GFVG9?>>NV]IT! Q5TD&YCO(!'
+M8W"0X0(.'D'T4 PQOI'EEG1T^:4.%A$5E0IEGLFEEV"*"5$,/I5T4DHKM233
+M@63]AU-]<6HYYY=Y L7G4$6YA6!92STE*51,@7 ##2S<D(-53,77@J68XD!?
+M?7YU <(6?KD@1$%TI)I$:'+4\1I):Y21AP(K@& JJKFJ6I =N(+@PJMVU+6<
+M964$NVNPOK9@!;/$&AL&LJ6F.@42(!!1Q!1#2)$$%%0D\803KH* Q9QO3GI5
+MI3'0 ,+[59U%:'MV@#OH_6UX-<<</!H1AX@A!%C&CN.\9D< +^8F*P_F8&:
+M8CNR!MD9*4K\6AIC2'A8&7.X"@>K(.#@5QAD% ="K0"[44<;N(5GFVB)T1'K
+MK"6A# (;@[7::Q(?MQ"6R+F2;/(<><S:!@C%RG$L8M#V;$7(P0H=L&M%^WAT
+MTDLGAC/-MP%\EQFEL=%J5BY<"X((0XQK1!)'5"%%$.&."\+:3!0!PA/@BNO$
+M%"*X*H6Y<X)P0L=9+>:&86> )S%CA6T,PF @[,B&Q';@!; 9.R;FL!QML.9"
+M5D-HMUUC<[ G&!CH %"YP#CEJZZ&KT) @TWL4#[IO/N5 ,,F-8P UGY0@CY
+M8FUT[D9)D%>6'6(^!GP\")NU%D:QATU+(63K05YY:FDPWEVY:*J9*A10,+OJ
+M'&70D32T2$M+[<ZG?ATV'5TP2WZP@0TO.DK%E4Q84$)+ VP8$X:\$,UH[5.:
+M]7B#D-&@+X%9(\P8@N*Z7#',1: )R&N4)@;3D*9D NR>&PKXN,.AIG,#3,D<
+MZI"Z@)F(-&,8 \<D\P:<C2$/GTN"&8(%,P@N$ 3="5%A*',T'HQP.S[H 0^*
+MQ88ZE,$'CY-0#<]SAY^((6&C89_\AJ.SD]DJ.'81(M9^>(?8W$9K.?M)&"13
+ME]8$L8=;%!O5C!:L,2*+,"C@4APB%Q;B&8\,*?A<8#CVP8"DD(1V1 QAT">'
+MRI5P<R@480&#!0?PP.$-Z",,8]B PP;:*F [@MX;6B,YYF!0B!KZS&+R,LK1
+MN.Q$K8$9P":8D@K>+(U>\N3)/)225)JIACZ\(W#,6, [A*%H0-Q>&N[B/( E
+MDF,Q*H-A9D.&.BXG1.Q#G_KJ$JSMI XE@VE#;WIUOUP-,I1%$DWFJL,C1+I/
+MD>M!D>$<@[T>'A&:02Q@7IX)Q!WFJH=S" -YSM >. @RB_ [X!>2]H6M=9%$
+MQ'DA] 2*3X+H<XY6"Z8B#YHL^/6K#')8:%T:FK-@090,$KVG)BVZH@S1)CS/
+M_-_S8,:^,9QG#&L0:4@=:M(:NF@T$]W.2H6X(S. M QND*%B;JJ>F(Y36/<C
+MVZIVM+SME>L%UA&-H=)$U?&5#W9.D5T,8)"#&<!KK&2Z2E9@LQT:W<TS0)W>
+M8R8GAL,($&!!)-\4'GG"Q<$U661[%5O+( .N%*8.9#B#YL)@L(?-@41W$"*5
+MC+JCI"8&-W2X@X^0*D2]+@D[CFG#Q_A'U.24 0XI-.Q@*R;:?@J1D<LQ8!K.
+M,$(V'!1RUI$#17T4'LA%K"2;!!AKK(9:U;S!L-K,'AMUNQW>#K.E,)KM9G;D
+M)0@!5EBO,L/DS@ #OR!U@82!3"5;,R'>3NRV_UL=29:3DO*"=)BBJ1!L5":<
+M10H4#CASPQDXZBF:Q$ &.#BKNPI"JK6.AS=^><)? T8]NMJ5#G@EB&<A TF_
+M8C.PGRUL5\R 6,46AK$'B^8TH0G06D46LU7D; \]N]K7W-=Y/TU,P4Z;VJZT
+M.+0?>R-0/3L'Z180O1FJRV[?"SE9U4&? (.!"T%@9"2K=L=0V&N/:4M"R.$&
+M9V6H'/(\<V 8WVVO=YD<,A\[G9+ :#%R*)B/JMF5>@*U<ZF##';ZI1S#' 1]
+M!A.A:WM8*SG,)B]D4-KV>M.58678L+,AB2;=P,DSNB9]IU-Q7/-,0A[[."^0
+M"_,Q&^;8(QDV8MEQ@UL'62[MAH&[WAVA,,5KFL:)#:3G;2#D!+:=@ 3%O>$I
+M8WSG"9DZU-<U]\WO?CWY.MB)=:PY."M1.!4[#.O1+X-=##.?Z57##O*STDX,
+M/]V<&#U&K@PD6ZJ9FOK.Q/B1M/.\T"*S#-));C@->$$I1QN7&O+"FSJ0Z^%-
+M2;A:[%7!#6G 0V'Z2H=YXYDQ)3%,O*/X9"29(;FVJ0(5A@ "%%2X-4A 0A.:
+M$$A=C@$\E:5#HT&<!D?.N.3O-?49_A=*AY($T67 0\%!$ 00'C(O1F4->#2W
+MW:'V\.3; R5W4"O)%0',Y5L.LFX;X\#!$%J7(#YR7E:;[2B" *DVQ>1/L(>2
+M,U!(#+K%:?H(PP,0^.!S00!!'*0N$(Q96,?)ZLI=LNVB+E?]XE9WV(HX,S$A
+M4OT-=YGWY%Z3(7@K-8@4)K@(#9MOH+YA>Q>-E1L KM_/>KF'C/UX&X9CRL]*
+M\97F9NK5*]>8BOEH#FYU051!\&\!7CVI@)]8M>G5K@#'H"TR(+!]G)VF.$#[
+MP%6G-MGNUY5K>_NWXL:I1J%Y[N<Y]-&0WV>Y4>])]!GVI /?>QD/QU?.^54'
+MAC5T4;..TR\,EO$2W??4NZQKU?6P.P^'=,0G7G&\9WSC@;0V4#^>9J2*7+AY
+M9G*FA7+AH7(LAT9< QGA]RKCQU1?X&)T("M/5W.&5'2% 6X1&$H&N&= !73O
+M521O0'0$9'2WE("])&1,QS%.IW\P%('\9G> UQR$@70EM(#8%H,3J'9L9V=O
+M1Q!PE!PQ6'?D<7<$EW=3Q'>5IX"%QH#21'XY=7%/=VV#UQIP8'A(TGV1Q#B-
+MQQW1EQ>21WD4LUJDA7DQM#*<MV:J=6"?)T1..'K^9WK0I(38]6UFX(0/Z!BG
+M]W17,!HI,6$FY'TI9'7(@3ZE%T WMWQ"QV!SM4!/)WY-Z(#'<3';85@.]4(+
+MQF)JB&,P9H,-.&Y?$(ES8&*4F#,2-5E'95EGE%FTD1)2, 5KD7MW(6BUD8DO
+M-H90ME>#Y6*BE7JKUWJM@76QIU_5-EE64D(VA5AE\ )<\@7S1!FVA09A\A%5
+M 1G'>!?*F";,R!@R4T,N (T680.R0XU-9(W+V(S<"(UV<A&)LB="X2<T ";+
+M)BC])8[(>(UPD(V-X8S=N(Y!T2=$<10Z$(]*46SJ(E8V8%9MD5:=DA4C\#5R
+ME@!#, 5?, 59, 544 1-D !M<1\..1L0*9%+4 19D 1$H)$BPY =608?^052
+M4 1&, 4A>04:F0.&U9#2]) 1^0564 2MJ#<)( /=E14UF9(KV01!@ 5IHRTK
+MN9,].2Y^X1<O !59814@ 4OM7R$445,=CP@Y6+'TU\Q<)#P<@-D$CPH>9,>
+MF9,4:9$8J9$WP)%HJ9(Y&9(C69(Q<)):090YV9(O&9,S.91Q"0(Y:05!( 5,
+MD 06^9-!"0* .6)%>91)601+69B':9%/F151Z1=4:97O%5/ L3!<66_\0Y"3
+M(CM B2E$D7MJE9=Q"9%0,)%%X 14D ), .%=9:..02O23<7*052\ 124)LS
+M )>YN9M,$ 374ILXD1]Z^9I$@)A00)LS@!',V9JZ^05&B90*(9G7^9Q34#Y"
+MB9E2F15P,@2BYYE:60>AZ975-)4J\ +]=9HL0!0289:L69RP*9O2>9OWB9.[
+MF01,T)N_&9PS,)RXZ9]?8 3'F9R_TYAR)IBO29B&B9BS.9U/F2LVB9_9&9FN
+MJ9.42:'! I7C297F.6Y8^9E;&8OLJ9GO29J28IHR( /S*0.XLY#]F99#D*!5
+M0 1'4 2$R00RH)&+F:$XF:,*&@1', 4:&0/$6:1?H"U6D 1#()G_]935F9LY
+MNJ';"9$Y"J526@27"0*9Z9[9@I8AY#T^"%0;Q$(9N##HLV6\55N-9AO8)S/&
+M@85^U1N$$J-FM19E66 W*I=&NJ,]^J-!.E9-BJ,)>IQ)NJ2)*JA/ZJ-?JI&%
+MA:$I*9@Y*J&5.9LQ8*",>:5.JJ5*.029^J&6&9YB.J)P0@1F&HAPER*Q8C [
+MQV1O6D)QBF0@4J>Z]3&)!X@BU!O$:!#&.([)N(P34@:*)6KH^!$1,:SU:*P;
+MDZS=R"8N\):50H_DB(W'*JW+*B8A,1)ZTH^, I Q"BGSF%3$:H]?L*U(M8_@
+MJBCM^(_O&)"Y)X]@M2Y2017,-IZ9V154":V(P:U@(18NP!+_,0-GD0-G02;_
+M6 ,N(0-DH2!AUB!]X9XL*F*0<:88LCD@()M0X&J)D:SMED*+5 ?'@1IC0YY@
+MJ:_VV:_D"3W:&JWMB@8#:Q$S(2@+*R!)$1<TT!!S41<3NQ<5J[)DVI$:NX8>
+M"[(@(+*Z1;*N8;*7) <I:Q53(A $(:S86JS8"&>",2/=^A&;DK7JRK5R-JT.
+M ;'AB*[/NK6,U;6\\;4.D0/\N"CN"(\W.Y"$(K;+2+9>.[?Q6A1V:Z[WVBGL
+MLA;P\CO[&J99@01!L)-?4 5.0*%$\ 78,I4% 0)-<$PP0F9# B.YY48$X;%?
+M 5/, 5)@ 43^01N,Z4@\ -AF@5!4F8@H :R0H6M]H,CMFA"I"TO>4NS44*K
+MT[9R-@<OP .8!$7'ZE:O(B,GT!H]AHHP@TXMATF@.S #<8JQE ?](D':486(
+M\4HH(C '9#5'TP:SA08I>R*58SK9P22PI!A!H1L90ADOH[U]1UJMU)7QU!JT
+M%#U M& !509',[X"K+Q+"VD"\TV1$3.@D5G+1 84TKY7V$.&@SB*$XBY)5!K
+MQ%O_P[_=NS&_1QYBL$8_P3C$@U\@]0)\:V[:45<C1 <]QAB$<46TVG>B 3E9
+M"[)/-P6T42&5@P>F\Q@"1UHKE!(5/%L7+$+KEAB0)1VBA1@"YWJ*57!AVJ*6
+M"Y:&VZE(89^:"0*,Z[B0*[F4:[F7F[EYL+DDTKF)\;FN);JD:[JH.P6J*P6L
+MZ[I"F2N\FP21&S=[,S? "0)K>9%- (F8 )5^9M3.@5R+ 7!DA46*04369&"
+M3,93^2E,Y$2N1<!74VZ-#,A4 ,E0@,C;LLAD;,D%A,E!I"$R- ?9 5.<G"M^
+M ;MU(!U#0KN$-UZ2%9>ZVT.\NU?YU1PIL<+$:[QS@+P;8\#,Z[S4&#.N1!K3
+M2WA!9(HA%QK:RWP?_+W[.S6:7+[GF[[34P;L>R393$ME,K^CU,#V6WGX&[TF
+M(D\HX;^, U!A(, 85<!^\2I3/#4*_$ O4T8E$\'B_*I'G#A-JV<9W#FSDAH!
+MX\&B!<(&)L(D#%Q&W+W?J\+"^[O$X\*L$<,80L.R8L,1XJS,E+R&Q<,L[ 8_
+M',0!YV5%7"$67- R_&A,S!E.C,)1W!I3C'I5#)]7/+BQPRXU(*,Q4 ,SD3N?
+M,M3V$I; Z@C@%14<A].[1Q1^05", 5$8!4\':@)\,5%0-56_061.Z7!,@("
+MP94$\<B1S)9-,-:7BM:!C)%G$\98\ )!<+I]@Z%1O4,,F=>I"@*M: ,P$-A8
+M'::9Z=.4(A4VD-1DF;CT<@,(B0-_NGM:W9)48+I'0 59 62:0=OL$R/F@"B
+MNY9#$ 1,P 1?T*.<:IN?'=H5.=JE_05!0 1*H)$T\)886M9?X\F0_-9K;:F!
+MZ=:2#-<B(-<O, 7J6;JSXP)X<-=:D==0?3P"0=B'/;ABA0-"C0-(8=1)(:-
+M&=GZ<J"_Z\:E>[JIN[I@"MZ)P=6P3054 )M4 5'( 7@&:A>W+A=#3?M'=9@
+M>MMF8-:ZG=:"S-:__<D +MS$;;J1BP4MT 1]L]?0[4_-_>#2?;'&[0;(70,/
+M 43A4>$7[@*Y]S!34$/&0A@RD.$@+N)*0^(>[J)/(58Y$&! *1':3113012;
+M8I]$^KOJC=_N#=_R_:CU[;@\KM] OJ.O>04 2@2C+063JRV'R919,-:X+4W_
+MS=L"/F)5'MR#/-P)7MPH#CDEOMQC[=P._M2H6M@^#:,U+@-%W2E[.@,W,)\P
+MH7O?3=_B#<?E3<?G3=\[SMX]'M_SW=02SM_^#=QJ?>4/:NB3S.6G^P*A@](Q
+M5[H-'N%/C=<2?N:J"@))X"U8D-R=3EJ;?KH@@.%XP.)A52EK40-RKF0S7@.H
+M:0.YA^.7VN?M/05%\-Z #N3J7=632^3HW;'O/;KC'<=S+-:$GMN*CI&(_KO)
+MON7$'>I8P-R";N:4'MV8;NKX"B<0&^<RX#N,O1,KD6QLOL5,/>OV[=6]_J6?
+M3=F6C=F:G0"<[=GH#=K!+MJDS002:9%$(.7]C>P$;N6^C>7-'M==7@5BHS1B
+M7N;1;>G4+J(7&P15@ 783K@;P>;<?0-M'CM[F@-Q/@,P,"J2G>/I?>Z\_@7L
+M79% S@1/< 1@_=X@H/(LK_*NS:2_KMZ6[02D7023*R[\7NC_KN7+GA@#S^AS
+M#?'1/N:77NUZS9CB.?$_7?$XT*<X4*,:OQ,S<'LL8)M*)NN!N>M?[>M\?NY.
+M\+CDPI#JF=MW3MYR;-X][^^[#?0!G^@_K]8$W^A.$'-T,.G3OO!*/^%DB@10
+M$/%./]UB@199+Q??_BD%*J._L_5,C1?65_/GWI*QO01-H.P*#^%DW>]4WNQ!
+MG^5T3_0O /@1+^UDWO?7;MBR<_53<?4LH=V_H^K369_EWO7G?IA"L 16L-:_
+MGO;$SO:2[[@E3^3'WOES'^!QS^S';^!=SNM)8/I)+_)!WM4E?_)3\-P-K_J5
+M8IL=;YN)+Q8V@"EP'NN 2I4%Q!@4TW[:[!C' [1!Q1V_2P;'! )=8<7TO8PD
+MHP:K]05?D/^#5>K!C_I]/757_,[:\NMM]&WH$3<FT&O$',.S=JB/Z:6JP;?Z
+M9D" ^1UD ?;=@ N( V8"U\-RZHWR$0'+A_GL7+![8VJOV.TYZ>?UTIVQTPI3
+MS@"^O4.7_(3> :Q[<TT%\#J]Y]P>X-)S>&1*6Z2-*6 $F)3VVPB_(]E,IPSH
+MYJQ>#I!1[L+QA;Q+Y?ORG%B;=ZR-6]R[?$<%]MV\:X%@C0#"0,XG PL< I1^
+M"K#+"<'2502A'[7;>S^PZ1U!.#&=+F#X^W[N E/0@$Y%YW3=Y"L"E>_R#3(@
+M)Y&& .."9'G,">@\"<@"2=X ?(&;S^?-0.27 &^@Z$L"%M &\,!!%P&!X,MJ
+M FD #G2,.0C^[ 6<4TA5[U/L055' ]9"'V1(SB$ED0$4L):PT[>8 BD R#F!
+M)T "!V$ 1'=A$!+&0-!'"=&@)21NH% 4ND$(" <G'"F$<V8%SE$]J$ H6B$K
+M1%SV:;#!0H(@"VEA18)-4: *Q"8JD M_X? 3@Y'0[9G!SY<&&QT/6SMOB CD
+M 8 C<&; )JQTG;#ID2EP(?%(H;N(<WM0-35!50CK;,<-D()U#L+TB]RFGJ8,
+M-7$-)$)J,9D'%!'IP Z -M6,(48&Z?(3SD/EJ0,-!?U=Q,S7]HS?)%1V-9 8
+M,C]W6 ;@8>GAA\MPZ35#5$4!*\4>!(BN4+O5-E:( Y;:% Q,NW BL0U%.+D,
+M86&*5$. "3!"<^>X1& O](/"[Q'NMS$H"==A2FR'<RW$N8$\< _YWDR4@&/J
+M91&F?ICF;.)*L!U7#P]V0-N1 T!>G9-^0?'FZ;PO8!0181%(BDO1]C5%0#@"
+M!6%>!(&.T 5.Q71H$JUB)3R)SJ[+C<68B/T@H(AB3/Z0!K#"1[&:I)_,6P*C
+M2Y0I,D)8D:R R4L"E^\)& $B$ 2BW*\S75J@JU$VMT$4OX >HVI5P @8 9Y4
+MDYQ;5ZA) L'M <*,1)NBDF[;C8_CB<$;PM";FH"XV"LM*C\,0_56'(^C@])Q
+MYZXYEJ[&*!-/7W_9'<G&8;&$#_B@+F-F? *)[/J=QL[X&4/C:"R-A# )I$:6
+M=.M8XUQ\C4(@-LY&1J8<R:!*7&N@2ODA1AQ8W(J&%9 "-* K5L>D5Q,W DS0
+M@S9@&E[';D<59L"-JWU8+@NZ-GPWD;I@D;-UWS$AN+MM4>2(P)%+<DNNR16!
+M)\>3HEP!O(_L\!BJP2=@E/28I$-Z^+ 9PC+^IAN# &], +[QD0''\8!?AB-"
+MX$G&$;FUJ!/)'(&D<TR)15(*!,GKYP.I8Y@BC&8@ ; [MK$AJU:5P%IJ*UO=
+MHTZ$4\P6L_H2(DUK;<E'-&ZFE440&=<J2XK)+\ EUX"7%!,XP&_Y(\ 5D)""
+M/,I;:E)=M4EW]1/8T9PD5W9R()'"&Z#J>F+BR@H)0.4Y@2-P6!)+EBD@,F D
+M@H $ !*_27C@/R$' LD*24DIF=&)" ]3B-TTAHO8%3JEI=Q*%V0+Q( N("G[
+M@*3,"6 QTTD!:7**E$H;2@(OX G *C:U<SX'ZZE5MD%#V(%E0AI2 F3@+6!#
+MJ:"8572Q?@ZMK"RV4O0$&@(D4V*,ILN5JP/P# <$0R@()0LPE/8I48X+1LEA
+M'"43B91^P51^2L4 <OR/IIP#G+)2KLM027HLHF%1EW4!5;XI4CDIUY3!4 PB
+M1Z=8A35@!TC*:]@!.!).&"(+Y)GLGZOT>R]K5E(6K!-Z3!2NU)7^LDWYRBH
+M+$&#L"26SL-6@91D>5G21XIQ \VR SU+BIE\U,.TW![54HA<S&Q)!K8EL+):
+MQ4AOI0DO ;<*5IBT1SS3(V"$-%F-Q&303$<V0$Z.JWDUG<P5GBR:0)-/ABNZ
+M):_ 1-.T5V4Q7S'!V-$5?..AH%G\(<,=K+-P \X"2T +<<$M%(C9)0;4 ,6Z
+M6%_S<D$!^C5*JMD:"A_5Q3UEM97E$_5%U\QT<?-3S,USIA"A"<?"FVY%&T+&
+MK*GM:MSK&X@M@2JX1>\B<T"*&X!WG8T,) !5-D/PT39B PD "J %) QO\T8
+ML ,=A""H --Q+%- "I"4>,]R8LYED@!V1-2B U] 5-*!T#DZCR7[DAELRJ6\
+M%Q7@.E]EKO":V,@<V9:#,"0G8*Z@2E, >,HJ#?0P[%1DF!R!R#$(DV7)68ZE
+MY20AFJR1P8EM ]U6V>7!>P,'$#V5P98K2J?!8 ,"<P\$BTY)9B1BMKF(N8)^
+M5L3"T'/PYZ0\E2K 1\@<__DPCR=4>)YPP@ALE_;11#B&^(1/-1 B!8&Q)P(3
+M S V@AZ$G0L7<%O,5%LJ 8M%(QII3(NVC3!05*&A0*Q+;GM"A-*!YP%QJT
+M"#P!*^!"<4!WF9&3K2>@@-%&0?EB+HR@5T"'\M OT$&3P$7ZH9--)NW0"<H>
+M8QL?&*)%](B&J%P1._U,X5B7<")@E R!*3I)I_3D7P$S:7 *T]$0.6))\(AG
+M@'4VAN(9+*IH2D :F=-R80[:H%.>3Q=UGV$T7Q+/U]E&*Z<5A:/+Q')I$RXZ
+M.O$H_!2C&L%T % RNA%I2T=$?VJ4#K!1*NI'WVB\*PE3:9 J%#':11?I5G*(
+MCU2_1-))&BMAUCTZEE3%!3#/K.9&9Z?F7$:HE&/P3A1P2=FH4 I6!T%LY1;T
+M\28_ DO0I76!EWJCAS"<B&:ZVJ5O*QHYA*3YKOSDTK2:!@MO[01@FAK>EM*L
+M6VPBFMZ$ @DGID+&XU=0P5_!B1<P!^1 EO!8+Z EH<"$( 6RP NP PB+F@K3
+MFO40ZI52R%FNL"T$) /Q\4X&T&(00HM%&1:JA$R[$3W]+Y "G[(%M[ 6XD*"
+M^*=Y(:!:+#(5.N! 'E :[Z$UH( QD *2PM2#%S;A7?R'J? ?A)I-0$@#B4P9
+M@:6C'I8 1)T;2H,D*(W4T0*" !3C'^^E]<!, 3+/6D,1D .30[\@E1;@!)R(
+MGVD99V!E>4! Y;*H$CDUIR\ G:K3\<9.W2D\?0'R]&T=5+9P3P-$M]M9O",@
+MD0F)!5 =A,42ITIGGH9-/HBSO.J X%EBU9\NB(AJ5HG6RZJH%[6;51R.ZE&3
+MS7\0J3:!I-H$DUI60.HV5:DL%02XU+D*4^'-M*2I-C7FX-3PH%.[$D^%-#\U
+MJ"8KHFI4W0!2Y:8T0=4MF\HX#/F?"FU%70T)\#\@9UH+$X94K5_@/@B$!! "
+M4$ WS"^2% 3P 3Z L:@)"N!_1\ )5($<]05<YT U/1A#,:Q+9,H>,L8RV0)=
+MH >(@((*-@D60FVK:2&?,E1^^E 9J]":&Q!/!$C*KRA;U>396$:%$_6@@;Y!
+M+T2K=Y.M]K&UHE;*M5I_G7Q]K?5U#-)6VQJ79B%N[:B[M;>2A-]ZVH0K<36N
+M_@JY'H13R5S-:8\A ]!5NE+7K9I0W2I8[5G+AJS2U8]A!,+K>+6.L-"\B@#T
+M:C>[4=]XAC9 ]AW$[S<#4FS6<VRO\&4A@9R!&O( ^)FH+VO" @L$ZM>RS&#0
+M,Q:!#U;8[%H5+FQ<E:MA1GR" "1725"P6 ,R@%[+AX$>K%FY;#D:-8U]PQ9
+MM2 1:,)V=:A90<->+$%A.J%L]4@M%@N7_DQDBH_,0"]U"-,H3[+9"F8F+T+:
+M@IISEC&XV9Y9 ZYIU603=VN;/LUC&DS+0)N5FO#J3S+-0!LIJ!N[R!2'<@*B
+MU:=Z3M];.BT"ZQ0X6=5X*F<+[:&MKF-ARVK7?9HVD6Q9'5I4"ZWFV<-A4,-F
+MH.BJ3=;+DEH8,!,T[-O$L20J!.75C+I7.^K!,JPX ;&BA);Z4E>J8YVI:*"F
+MWM30Q'H SDYU#)@5J':=H5I4+>=GI1>0MF6%TY=%::.JI9VJIJNJOE-.BV<]
+M+9T%M1=!U+[5L.H*;:U$55FJUMSJV59+L 8$D]59-0&NMMN7^FZI%D75M1@5
+M??7:LH!2#^O+6JG#5K$6VYCZ6)-M9,4#D[794LO+ZE.EK5!U YS5VH*4I$H*
+MA]I\0H7C"4J"@/O:U=*&$S "]#6VVM?1Y5I+KMI(N?!UO][6UJE;>6LW!*X&
+MEO\AV$R*AY+KJ20#8\ ,--<'&V&GJ[QEM>CVU=[;4=M0::VIW;#@M0J(5R=Y
+M[=KKQXVQ(I?DTL67"UM9*\N=KR87Y7;=;2AS^RL*^*\U5\#.0IP[7'5N+DRP
+M$,CGKDN@*W0=['.-KD:WFGY:>FIO:0 ^7;<85B*X6[X0=:<N2;QV:E9L'1"L
+M4F@W"+C!#&_69RK>HL%XJZGC%2CJE5K=GCN;KA8O,KV\D+=G,M,^*:ZP*0U0
+MNH-BFN9)S]MX9<;C5:]^EDZ>7L'%.&D"I%U-376<EM-*"P4N;:9MI^,6JZY>
+MROMY72_FI;=!5LE@5RXK:QLJ0AV\J';;$M36&S%"[T%5OK"6^>I3YYM[H*]
+M_;<6->!J5+Y:$S[J7S6L@O4)&M:"&VP/;F)=K!/+V,I4C.%PEVTLDKC/MJ?J
+M!8N[6:OM4=VX2C7&YEXQM7N];>\%MT94TP;?R4N\BF_U5:\'E4PLWZ^:;\.J
+MQWNZMQ;>YECJ^WJ1[YA0MT;V GM?7%N> *Y>W:B^]L7YU9"*?@TK866_%POA
+MN@%BRUCE;\-5MI*5V596[@%M*ZYFI;:=];-V7)0::15GS*VM,W>-IMV;6V#;
+M;G%]NSQ78BS8Y5IH,=[0O;L2E@,?7W0[5D3M0B6USY??\@7#FP^UPMFC<J?5
+MUH4D*: (F0!8(L+9T/X=8?XZ8OPKS0VP3#BX.N&=FQ7B[A3.E\C4"MM="(MW
+M'7 'YL(2./M28 +1LT2P&(8#9)B\FCW_EH:+P!INPU;R:AV$/O-G7D#FJA7)
+MBPX\,67J @2OY<0+GC@,@.)C)HKQ"[4"1Y6"$Z/B3WR3$(,+:,5L@!1_*])+
+M-67OIKB3.T$6LX%4O(IM,2Z.O0")=M!>1YNOONF#R \$&*I*54Q+517P517&
+MQ+@6\P9<S'>]L*R%<P="\#[B!_$IM@)#2JLR1CC,%V8F3V07C+@@P"NS>,S)
+ML<H>!.A@D5 0/&D'J 8QL#*VHY,K29%8][K>ZLQ\+W&IW@8T^)0_,3HJ3;U
+MNQ:V C?B[AJTZJHY]@K(-'*HXP>U&CR8&J-56\<S!(<,08\=*$/R"VFC">3C
+MNB$%^'$,R<3%"&>( 7):-0Z,*B7%75@FTV1)Q!O&@$>P5AM!)X\OF^R3T]%8
+M0<:[(RY@7T&[$X1R36XK8P IPP"EO(SOE6FR@/,)QE;&TY< ^L!3^A0)0*'8
+M(?BC35P _*P#:0 $\&.RG#Z^0!JXB&!9+#L@MEQPSC)!6,L#89": ;@L 1.
+M<T !_N_ H 3X/_L@.DP 6^@,'?4L@,#.JK\1)1AN6B<AS. F#>%^!)4L!T
+MH V4T+S*F1@B [9,%/L?'0 "2D ;$ %\%#(W$A+"CV$ O^S*5X<-1+Y)63N9
+MB%JF":]R&^8V;1$?X]L4 &R![5X>D,E<F5?>9?9-FCG_/:"G7 900 F8 RF
+M--/EV_R<GS,7< ,B@ 7<RP1@N=J &4 MB7ETYC\> -^0 MP"8TYB(%FTY$#
+M4@#KG .SX0S\ !'0 D2 #A !V7D[6ZZ5\9T_0QA 739+9N. &T&V#,;+97#
+M^0U09LN,F35S"2@)#[HT0V@R<)VS<\6AN87Y%A=,/*.=2V4"0 $8&C2K#PW]
+M!1C&&# =(%H))V81;0=(-(>^T&MT.Z]H_=>BU4>)QC.I6>GU-=Y<!7PS<&9U
+M>[-4_F4 G:%M-)ZA?ZTY[<[H$6VC3322!@&-F9 9,A30.?# %]@,V>B)I8_$
+M $4:LV/>SG. "E@!#3D%!O.2-LR$;$E#Y]><*&$;$2 "@UDN>R*Z?)C5-!_U
+MT EZ01OG*U"8(M>BU,QST\?^FL\<FD=':P@(9, -=.83QCS* &H>K[F1RO'H
+M(["=__)=Z" 4 XK0 "A,FR+S'"#.EGE2=VC:S)VGD@@(U,/RUP3F[8 ".BHU
+MHFA;VG10E64B=:CS'*C0H[I36R[UX9_-M&+.T<W00_]EG5"EK_0;R-(HK'GT
+M@-;<4?-T<69Y?)H-Z[$CD*MIDPBH%$X -+0!U) 83@"JMCSY;V DZD4-JWW$
+M"7C4Z=(K(\H=D8'< I8S6P@1WOE-P?C,![6Y<KJNB__Y57=G DSBZ[3BAD$
+M,.8O#9F=-8-&SF=C"'#F0]W NDS^JUV&FC2;9G2MFFUS:W[-?2 V/Q#YB:>+
+M!C.:RWDY?9CE$IV6\7+\P9UO&4Q[[+$<LNMRB;[+_>1DKRM.69M9,VY^DI&:
+M($SJOQ;8NDO'_M0*^ED?Y\Q\-I3S4&;5SSDZQ^SDPH^K\ZW&SM4Z 7AG\/R?
+M 3-H)L_F&3V[9RVJ!@ST>X[/\[D^W^?\[*$IY=3NU0$Z#0SHEKVN#/2=ILT&
+MVS@WZ+,1H>OVA,;5,#JW%ND-G1RB=HK6VRR:1)MH%$USS[2+[MMYFU/3)L/=
+MI''TAWUP.[H(]&:>+=CDL+ F"$0Z<!OIY/"DE4R 9=P%TTF' &8- C@VJ0[3
+M8_H)5#9?_:_3M/];T]NY3:_0.+VR0?;)!M@B&G:7[;]<K+$TH][29@=*?^FR
+M[:E!]9[NT],Z:I?JK'"J=T2JEA7@&C1#[#>$J!4U0TO6CAI8Y^QL(;E[=.SV
+MRYC[4KN'X+VIOW?Q#MJANGM3:_-MN9JWH(;>_+I5&Z-R#<Z^S8.MU4W[:9-M
+M4DV;=K4=Z-6(^5<_[J=&O(=U"^C=Q_IW*VMF;;[C-K1&WG^:?9MJ;*VMN;7@
+M^-:$6EQ;[YK6J,_UV^[47ME#Y^NNG"[9-7APU_!:7L-D8:5'[%$<N,GI""B9
+MTCC@PF]RF^@NE:*%ZQ$8_B6!DE0^$+]8FGX*'=Y[5.D/KP%!?)N2PFZ'\>93
+M#;!NWX^)<[LG3OLD6^U$5FGD4F+1,0 '..6.. -97+GJ43?0Q4LX%D]H8CP\
+MJ N[M3\IU\N/6MGE/R$BYTN_7 :?W];(#MIJMC$*NMXS_W#KJR!YO&C]*/J
+MAA/HXT)IB<.Z/G606)V-2@!W0#!0B(WZ,<H.&W\>A>Q"LS+K($-0P!J' QTU
+MDW_R)WT"N( <. %2VBIP<5)^G4^ <87,7'P%K !.2<9O\R4K Z\YDCL.2BZP
+M%4._P.2&;)2/;L'! ESY=E8!9%R6W^9/+LLYI2Z?Y+4<BMSR5#X8^ 5C:<XJ
+M((_ @?/L.LLA;2;C.H%3(O./P8]+.0PX 7 9W,&Z5X<- 14DE^2)@9=;\E]>
+M$C(YB-[DU]R3<_%0'LQ7^3 OY:<\E0OS<M[*7SEMCN6S/%W6<GY\RW,Y/-^K
+ME=R7.[54/CH'.C%WY6DWCJ^9G5NJ3??RUD%RO"1X 7Y<T9-YKN#'S'P%=-1E
+M+3A$@"M_S5DAA/?E9Q[/HSD#Q629O)IS<FRNS;FY0:=-X+P%B/.%+CBXP#F_
+MB&H6F6;CY"6,27'N4>H+^9@U]3,I.Z"Z*M;&+J"IQW"D[!)NC]/<"5:]&/,&
+M8<S5&T(B5N*UU^/9CL?9;"8E=6@!X:$%>,Q"BXZ7QXAS >8A#8@!-BN,78#
+M< $NX 7H9)G,)?QZN@0"R8%$G U"D00B@V-H*2< F:)R[/$"L/$&V=8)YV&4
+MAL\020[">2 9$V/2&1;1HH4A[QL@S8;X^!X$\S4&Z)=-!@V 7;#K==DN!@J[
+MP)#)?#TA^W5A$=BS:C?B[<(7:K)>RVM\0V^ZC"'%J 40 >/8+50W:+0;) %
+M]+*.V@*20&S/8:D=\OIC1/G6XSIH( % H*X7=]0#VP/[8-?KMOV6['5/V]<%
+M!A=(EQ^=M;OVMG)<UO71: $$(;N3]WN)V%,':*#/.T&6!:^CLZ)7AW['ZTCC
+MFIP S/[92P)I)^X/&*]/]L;0P("*,!;M7>' GW;Q'N$/0FP_[[4]3>QVW,[>
+M=?M?[^V=MIK^]NL^?!MP:5>OQ_T@"*OH/MT+@G5'\463PW=@?UPJNWM!^.[A
+M';P#=Q"?WDF\WFWO_#VQ_W="(>!9Q\TH\!H^P0N,!0]X&KR./[YO8,*_# N?
+MD$5[5I#OH^2UD^;HSMQ_4[BX?!UUC1 -<4(X_J>,MQO5_7.0>2EEYI\[@'TT
+M):$%=.L7P 5<@->I#"2D1 .<.#!87@ 90.50!+R[@#307]2ZPXJQ"<#'RW5T
+M7->_''E7[[G=S^"%W?[A9SMA%_%AX+ K^<6^$QJ[BX'LDAUX5?:$3$YE!F9/
+MGP'#-&@'*?SD0;M^P? &_L7C==+\X#/)>,?K+B"Z+X'"9 @Y=7]7[ #^4S3Y
+M^6?E>SW'^/5O(-BC@&%/QY! 1QV64Y[!%WAG#WK)N[2G]L5>RU?XQ'#A#<MH
+MU_#?GMA;>]2NZU<[QICOO*&\TW;:7N3U>J;_,YP>QQ-:%:\Z6+QP)[ZZ'CX@
+M2N0NK)1[F7?NEP\$T'B7A MMO+\G5E=>NZ=+20_D(_ZE[_0S^=,;E-MN[TN\
+MIK<M[AV^=^=W'^;I>PF_[_E=UQ^7VYCA53Z[A_ =.-H+>W5O[$=]L@<!RY[
+MAQMT/_.K_;57\-I^YZO\=._SQ;T0*?="J>7#?"Q/](O]R_?U'7[(>WKT#NHQ
+MO<?']R<^N.][80K<&7#EA?J'.,87HX7_DJC[C=?ZR,CBJ])[2?$5?GB/\AB?
+MWE=](X\^O@"2+Y6<HR"D_*5OVL,4F!\LNU[AHX"#?^:+0)IG97F S8O]%@#G
+MK;O@)_QV7K?B^8*PY_O\GQ]A>4'0IP%"?V ,/:)W^XM^A1\$I6Y3<@K=/8B!
+MC8>+B9E ^MF Z0^ZJ!\&V/"'@,,W0NM__68@]JO^CW #RGI8^NJ?XO9_@=/?
+MLXUX,RV]#:NK,UK0.A6RFXW:?&H7!?"EI @>EP _KSC=L!(#6)MK=BNQ7G&=
+MJ;P;4O\A@!F5G!&(_=Y\ '?;:?Q[-^W73T:E?_C#_N)_HL-F$H?(L7;[NH1'
+M/X)?UJ=Z6?$?\9?ZU7\$R_VG4#5?^]]8-8Z18'H!$_ TF'^Q'\VT+0E4V!:Y
+M$_+$0F;7]'<977]TF)PQ"VE_2UCWUW)]?]>?^.<=08 ]6_HG?>E>TMBW18V%
+M6]88PB+\"8"R'P&8?(%@%5@-4&KU?U3)_T>5!(#SWP!X?>& !((.Z'3Q@)G.
+MB/0 #@'G7\\F 3(-:1;.)*P(?]L!9(!4[7X. >M7:+T \5\5Z%EM7+/?YE4I
+M4(%E@!4(!A9E7U+O=_SU8@>"\@?\H6-<H.OW!7B!5V!4M@;^+6U@0Q HH77,
+M6#?U+45:T%\WI %6?QQ@]M=R;7_1G_<798!_F9P)6/UA)T6 'B,$\"1'@ HX
+M4+& !!D")FY=562@&2@'[!<V(.WGC>E_@ (&UF]E49?@4I%3T(%GX! X@7UA
+M#4O$L@#:551)$U &?H&?8,OTM)PL4@L%*!_\@3@.!EB'27\NR?AG_5%TAB!J
+MA0@F@[8."1C^F5W&("0H"5*"EN"D58"Q?P:9^]<)XH*@8 1&!#I4#8&2@00F
+M?0"@',@*?H*JE#<X@:U;.F 7A@1>++:@)T@QM"$K!"\XM4PW5IE-U"[8#C4!
+M'K0/MD+DCV1#E<Q8KT&-=6/1@G!"%W@+UH%@@9)E9?U8C$.012: 8&!5.ZAD
+M/%U*UM+E9 $A2<69-64AA#W6E05DB8+>& )8"F*$9 J9]61UA%(68R!0)75;
+M8/RG6]P!=!<66*W @3)A&$ 3!EVS'TTR!L:$<N!,6!.B@:N?[W?_]1?"GU#(
+M$]J!O!@>Z+"\!5496"%6_(&D%3>4 1:#&R R* (J@R'@,*@(XD(E(#3H';T-
+M5X#Y5PUR6]>@"]C^!5])H4XX%-)3>R#^IQ;4*P]+S^+5C8,^8$(8%+J%2R%<
+M*&K1A0&)7:@ >E=UE;\5,>F$V0(3:*]5$K)9Q:1\U(.WDR]XU "#3(TPZ $2
+M@T: ,5@(;H6VSC+(&6):BV!8. Q&@V2A6>CP6(,MX 'V B9@!YD,"!3F%$JA
+MFQ4*&H 161'8$'1?LV /F KFA#NA;$A/T89$5D5X&YJ"A:&LA!A"@*S?</!
+MT(-0"\HB4)%"04UVA+AH-]%A@[14"81P D%X,-A8WU<Y"!ORA;[ACA4Q^5A8
+MED6P*5"$.>!PB!'R6!IAF<42^A7B4Y5%'HZ$2,%?F!7<'H&A61=F0507BV&
+M!_P$GL6)<#P(&R^A%#CZO88/2.I@OG@)1"'OAQ/*@7. @KA,A(&U'YP@_$6(
+M:,"":!.J@4WAG_04RG# 6/"'(&*(&B)3.#4YA0_+4M9HY8/YBO/7U@6"5V%F
+MF!7:<\R@X=<57H9?(2-HR#B"Y-]$8@@91T3 6>A4I86JX5K("8Z($B*#^!N.
+M@@S5_O>S$(;1%SGX T*(26(Z:/\QB6+5@? D5F31%X63).J"D*%S:+%4@%B7
+M9>A;#8+DWV;H%1Z"-Z)OE2.*AI=A-,@M:!PDB9"("1I@!1D,V!J^?W%@3D$B
+M3HBA8!>V#@J'0PUQ&"7FA:I@@I@A HJNH"+&#C8$%-FIU1U"3U\B<V@//H>U
+M5UAB>VAED).F.)8 9-BA%T-C(0P'H6$X)?J)56+]YQ#.AQ$A23@H$HI%EIC%
+M'LJ%KM!*&&7!AU06F?(0EH<NP'GX"MZ'3:*6N!_.56.64N >WHIHELH"$U93
+M?:+YH32P#+98@WBV/(@YA<PP'B +LQ]09B$BB-8BM-B3.75EG4#"E(F(S&+\
+MURUBBR9BHC6N?(AGW8HH%3Y:;%W(928.6&CB,4@C?H:>X9J(6CF#C:!8^ A^
+M,J#1%& %V !VXD"&)VJ",2"?:"X^B^BB0T9PO0!CQ0MP@9$5+T'/(AD9BI,B
+MG$ %,(P4@L#($EB*D:'>](^5B5;A,%@OJHDX(IN(AWV&_.*.Z"_VB !C$^ Q
+M%HSKGUJ8#;*%W"+'V)/14XS6WT4HUEJY8::S,5Z+'>/ ""8VA[V@R-AQR05G
+M!<@%EC"-MT??=+%HAP9AQI@HGHO18D/(8^V*(^%,@![:AFW!L)ADS8H'H*WH
+M$;J$N>)X*!*VBBS!PQ@Q7F!0&EQP>KT$L2)_2*88#A7("%+3G(WMQ0)E4X ;
+M*D.7N"RB#^_?A@@'%E0^69#E$]I^6R#B2(IQB">BAU@7OH%*'>(8+J)>S!]5
+M^/S-B[/0R:@5ZHN=89LX8+V)IR%:F!KFB:RA-M@X%EI6HG45%QZ I" 2AS&2
+M*8@BXGA0O8Y>%2RX_VT*[^ ^5&B%!YC=M@3K%16UDF.X!DB&MI<%^!9QCIBA
+M9O@YIHQ<X<H(.H*&8&'I."2>C@CCGE@YLHZ!(G"(;]F&,AQ>F K:CFN5][B(
+M@8/A8]!XL4 !O^,3J#D\#,0CM&0\8HI]H$K W;B(JLK>1'8A8687VB4]7H9L
+MUX$%A=EQI](@!EW=9GD7+Q4HXH[Y7[ H.T)?D1B(!0.)6(M7>F5BQ2?W8XQE
+MA.V/':!OY3]R?\-@ .EV(1=_W!UG0)H*_%@"N3.6C]_@QQ.0B(./6 1)((58
+M.9X(4$&66.L5\]>I^%7MPM9$#<D'.Z2 <1W6.0/AJ,@=,H#DXZJX-J8$BN-]
+MZ"@ZD>CC12@KOBSMH=G8$J),:2-5PC6VBG>)$]D>FH2R(TKXLJB$'"&RN'A$
+M@5?2@<@LKEJRX>-X.!Y=;62054PQCFLD'+DAAHM]%U*X.NI==%:ZZ$SY"1]B
+M'MEQ:8XO(O/H.=Z+TV.^"#TV@Z&A]7@G8H-ZHNI81_*1\U:@:$^UA]N7#! 7
+MX(90XL52.]J1EB26&*-LDK,C2,@^5E.7DIZ%Q, TP8RV1"%P+/$CR^2$M'E4
+M"YD8#):,E^$A.:75B(JDFS@"-I)-#VJ8":Z&FZ!K.$G6?7TDA34HIH?[5B=)
+M.XZ/H*0R^40RD^*8,VE*MH\#31+#. 2/KR3\N#*A(K,D_<@BP@F0S;<4+_87
+MY>34HT%FAT9DJ9CIL)%6HA()$3*1Q)0722L66=2DV(@79(2TXD9H.)B1:"-(
+MN$72DPA529A)DI)B)%5"1OZ3?&.!F$:^D9:7I6<3D@7;8T0Y.:0X/6%5MT=F
+M$A*EM.@"T #AXD.F1QZ3'$-'&2XN?X.D,Q9,FH[#I)%H3!*.GU='Z1?^B@<E
+M[U!*ZH;QED5YUX6"#*3VQ5!IDC9E[_BRZ$@VTE[!3;Z/X4$L"4XR%;0DG$ +
+M'3=3 *ESN?@O' 8)<GJL&9=+!Y$'O!>X@3$12G0%GP)RLP0 *"R943G_7 S0
+M1;* ;0V1CJ3!"$FFCC@C26G7892S80NI _8)XF-.R5%>E$Y'7;E,@H];HJ3(
+M !*5,J/[.#Q^D]'2N-%45AP<3E2IW$R5H\1A854^>S_!IZ!5<I5E@%>9&("5
+M7X9B15;R)&8EP(!6Y@6N0\<E[L@+-LH&217E-K@5"4GK%9#.%2&&0,:4?"7J
+MP5.*DD"E+ @ERI -3]-#+YR6ZZ3^N%I2.:UE5T! KDLGY&S9>,F45^)?B3X&
+MEAL6;^D8R4&9HH,$+UR,N)<*4)@D*56 K4,$V#_'TLB5L= !M%3FY,V9;GU8
+M"5E LHINP &90IY)9-@5I4>5#E;!%& Z!%"2$JKB6\H'UF6\((!IEU( =^E=
+M@I>EAUL&<)"7M91?@%XJ6"8D>^E>G@WF87QYQZD ]*4*8%]:!?;2%6.YH#GU
+MX^VA*9P5AI)VXV'RD!W0.BDJ%H2DHM5(6^Z46J/:.$\6@/:DSR@<]@GK(179
+M3QZ+#646"2<,E 1+??@K-E^YI3[)!A2+-P&.>44ZE)H81 GVJ7:D&$M042Z9
+MVIWF55C\A'+EK^=1CEZ1X[KXL,2%(R5,V>Z%BUQF2AEIJ7]$(NI83/*)!UZ@
+MV"["CC_E#A@T2HG;(M]G6ZJ#BA@L"%0"C=:DJ0@G$)9&I2N)5-(AQ6/+M%@^
+ME1;.%$ #*#>YT%KY7Z:"-6.1>#,>B55FAW=079+WI'#HB.69J*!>^>Q)FFL5
+MI>DSIH>7)I=H-?*9AB4LB5@:CX-F8WEHX@&Y4,=E+Y0KJXEJ*7(5EPPF;$ET
+MH9!G0YI)9V*2;>81&$,.<-/E!%E#WI#;RP5)+[R: 2$1*8=M0_X-K7E<YDO)
+M90JI:W::=B6; $/NEL!F'"1L0GPV).5E0>:0IJ5HA19$6B0<)9,50#[7A;E9
+MNMU+Z>5KB5PZF+BF"" 1DF&E&@!585Z8^&6ZA*J4:AM$4F%1@6AF0!O0 O@
+M9L"51E&8#FW /6$Z& %- ,YS^4P!6@ ?]5N*F^\5HI2O43+H9A=#R7AT[29L
+M ,A]&TOD@REOUE/TIGRIQMV;]V6&.2GMF^FEG\'%Y0$ I\!)<!J<VP'"J7#.
+M#0VGC;0M1)P74<?5[=@>*X&,TRG^G/#"2@ J*ILGYG;H3EXLTZ8\R2L6E*\B
+MJ"E%\H=D8^YH9.** B5[:5U-A#]F3>DUBEDIH;%H1<*':&22J=29!H?!4L>*
+MC6(Q'!R(=BID5QU#YHH%65,F'4DXOIUJIS'&=O9P95U:%"*ZG2I"WKF-/3%]
+M9[N8.:*6+Z) UFB:F0GCV1EX1G5Z)WZQ:R(LMP?$>+,8"+_#<-C_760IV4JV
+MC_5C?D$OTP.L+)/320:-+9[9HR1Y=SZ><>?:*7E2F\ZE"^D@E9*<)SZFC[5D
+MH&=6('J*?H!GVDEW,8BD&$6Y!>*=OV<8.#39G<D(\1ET 9_I"$AY!TJ.; )7
+M-2[VGL-8\>E'(G\)8/09%1H;CY9**6FQE <C,=EX#I^!I_4I3?*:] JD>%-F
+MFB^+^;E629\WYD%9* J55 ER2!,$-FI!8(,99 C*(78P#Z4.E ' $5 $(O*/
+M ,,X: @$A4!1<6![HPX,( 24!B4!;$%"_#+>7"WY"[*5*^7UV%(^FB]E\EE^
+M+I^M8Y#5=WV:MF$KM'["F3$""!HHCJ"U(3AH@M*?JXIB>+/@GT )#+!_,H8/
+M!-&05+ 'C,%@8&$4H-M:+T$9)*!' RUU3>P.#RAB\6@H$'D!!2I.OHL;@6-C
+M5EP*CEQ;1Z:H>2L#.]8::"6&P_802P ?,0A\T;4($>I)P/$"2!P4QVEA)J@.
+M1&2.Y8R@/] $$[%,W!6N!2PR6[@>6V4PI7$F1U/)7^:$#)QY:'A0=M0$@0T4
+M9KG\H3Y ( H"K #\V%CAFO5&< (6((DJ%\\%H $:N!XJ0E[ P E3Y!JJ0]9
+M+G#"YD%XJ"\E$V<A,$0,)$A\1CDD!HIHU?$I!!HAR./0*G1+!4JF,&!D0R\+
+M%NJ^H A<*&/@A=X@S$3[P6UL)68H&GIU7!(M1!M*4+VA0A5A((<:$A&&2C P
+M@'&M02!*2Y(G\$F"Y8<R%8 HN"&(0@J&Z%2"B"JBC.C]^8@F3.;")'K#9"5F
+MA/R"B9H1FRA9D0$)EY\HF2**M@:DZ!EABGX;N(HJ"ALX$JUH&/J*4@:\2JLP
+M.'J@:>=5.1228E6!XYF0/GL+J7FH43*+>*="NA0RI'UG'DDH.*3#F$4J&V:D
+MVV=!TGV.F2N@6VDS1I)QY>KYD+X&;V'8U%,R79ID^HAIHJ >:0@*)M&4;:9,
+M*FHR@#V&EI88GG\S* R0?]J@DD'_&1H\>^8,$;J 'J$.* 2ZA,86ODL94('^
+MD),A!OI]:J#AITO))U:D$&E?V%Q.DR5HI+AA>9*I8$WJ5X*E+JA8FH'IF:X!
+MCT0AV)^.Z%!Z@QJE5V52REPLI0(#$NJ42J!-J)PQE?*>$:+24%R\ $> $\'*
+MN "/19/I&K1VH1 ,0Y@:IJA'8GHGR Z!:6-*O!2F,P1B*GHA99JD5_=W5J:#
+M*69ZF#X6G.EPB#5UF,#E:D*;/"\!QP'GS75JB<,,T0.PIGC 0??)0 [ )M6
+MQ& 2'17\\D"( "2 /52#0&8)P*$9 Q!/2PMD*EWMIG- @ 0"Y*:W*883 _2F
+MR:EL:D.J)YB$="H"/*<T6P* X2"G64%LRLHLI]CI'(#AR #;*73Z6\XG1R=\
+M1YNZIK>I>#H'S*892VW:!MRFT"F>5I[R 7/E8*"X)0 3Q&\:G&ZG"@AQ:IPB
+MI_(I>;H9-*?I:7<JG5*G">IUNJ!JI]QI=.H"@*?5Z7@JH6:G'DZ#"EHA<2Q
+MBD5NTB81ZFQ !X@!<P 9,.ET:M I9*8?> A"!(>A0C@&4@MA\"E$+\Z,MN'4
+ME C[RW:F'\@O_@LJVF@02XV!0(!%E('A 7*CGFPE%(5;09OH!T; @S+$T32O
+M@I.@'J (P@%,85DQ#J0%B= OP'?Z04<F2H@!@ ? @&Z" "?"3P$Y= Z-!%YP
+M'D!OQ%(8X*0F /K!JZ" ^B]EQ(I@PVAK_H>>T4.0'KI!>!!S]$C*P?_17P V
+M(6I[2IR6J.D#BJJBXJ<TVXM*T_00,FK%4*->+CAJ(@*H\J@=F8]:S@2IX 8)
+M0J3"!O]"B$ P=);8@WK2I(*I<X.4*DI$%E4J>G"ENA%*PD[%I3X/7NIU\:1F
+M,YL!F4H&F*F-(9H:;JRCP4N;NG? J7>!G,JJVJE' YX:&^RIZD61&L\ %9NJ
+MH,H7V! "!"?!>^)-ZLI 8Q-VD=QJ.:)*@H+4BIM0*82KR=.X^JW&2<_GNJA)
+MRHY_)[IZCWBKUR<;Z#M09:?I.+EDF14OSO=36-D$6->E$G:Q#:-+E$&;H"WS
+MSL#*\N1C1 #=()G\)!A!PJHV$*PPC\-ZL((C*9'"ZMY(* ?K6X*JB#P0R<O5
+M!"@$.@EHZ9/0/%I-V(6=D*QTR<'*_#5Q=XE E IY6;8'N.3.[0%G0]QU,60,
+MV1EMHK%:)' #A2*E[!5]@':&*.&LT]4R<:STK"'KR46P,JP.*PA0M*9+2.MD
+MMK2R #[KQ!KSK#Q1Z]2:/R&MVD32P+3^K+>.A"*U&JV3$M+*M#:M:P/+ [DL
+M ;O0%> $2*U^P<.4R*5U84G6 VL^?Z>/&S5A1JG'PZ.#.+1J^24E T AH/<$
+MO_1LJG'APQ<0@C@M*>2TX)/=!3J &: #K $Z0"X&!^@ <H ., ?H '3 ?9:;
+M,9C'4@(PQ7P&M4)D,$M%K:O3A*E(85&M:WBY1TE*=ESIBD*D#BC#+.5)E4XH
+M QA1$LRNC=Y=HK=*C8?7U5%)_:V0 1D@N,X6A*O&>8AB48@K1:&XJI=85./Z
+MN"HQ"*3DJ@-0KI8KYJJY<JZ>*^BJ ]@!.H 5(+J&*;5K8V"ZI@^H*U(Q!ZRN
+M^IA5\+KJ4?.K&A>[EA[ :\>97-FNK 'N:BOHKEC4[Q2KM :]*VKPN[)1S]"E
+MD/5 -B/J")<N_64@A1R@75 ,GQO1\3P,<W7!&<!7>70?6BU5&$P&QY(9X$7%
+M(G) M=:^R0JG1AD@L1$&6T!!( :4!+M",3+0K"N.0Q> MT6OVT&.1IO$' ($
+M"B #Z+ CW/7Z/%QLD*C]!FD(L:<$54&CXC3IP^/:4 PVA *<8PJ)"I!>N3DI
+M/;"86P0[P2II%FQ)@,%^@AOL=E9>+A,=U7>F-#0&(BQ+&L%J9BBL8K'"G@H%
+MP;0 P\*QPLH,>ZSH"G1L8H!U( PB2$J@:0 ,-BS4EI3>$Q]<!VM>?K!G+!V0
+MQM(!)*QFQ@70 8]L"XO?#1$MD1.15%P.-2P=JQ[8#'=L#-L"-*$*FM(2R*)K
+M'MH8"T@@LB'L"+O&G@V/;"1;$'P,54C"D<E*LN$!V+&B!:B'&EXP_WBRBP0>
+M KT%!&I&C:4K5&B%K"E;QH*P:*PJFV8XLI L'2#)QA(S U9I,WBR8<$!@8AX
+MLD]#'.&\(!/\Q"BKPR8 /"QY^<-R2D%L%WN;G:.^$55QQ)JSMH$2VT8<,)\!
+M:O'$MBC^$("!%@F=,RL-8)N@1<KC<;<NH0S'RB"'!3BL#F<1@,A-2GYK>(G$
+M<DI^*P#UN&:P;EQ#BT59 5NJ&\#0'J]5P!>@*#%*B4?_,R+8?;;",L$I.:P]
+MRMRJ K K%NU3$AF9%:<7_MA?M+2V@^P8+E$5ZPHYU[%4 :4-IT2*LDDE)1L0
+M=/!C.RU ZSC0<7?,I)29Y$]4"61PZN4% L-FX,=*$_,#(J+^$*M *.-@JV*1
+M*V?S9,B2L=5!(BO"_C*:657K!BP4%6T/P 6( -89?F8Z4+3< V/ 1^5/FI3'
+MEC2<77*& (L8N&L4Z HP%?@U3\!;RPAM;RV)'., =C5Z3&^"\[AAZUI/6SD8
+MF+=*7M"(9IL?*DP@.3F-A *"$.?4 (E-%0N;T7051V/6G8(=X,8:T)W.3P J
+M"2,XV $G /B1/Y6V#\0)8 6DMJ1M6-:6;5)U 8"&6F2P=BU28=O2J&= "J#7
+MF@Y2P!4@^8U.!P%+Y]IB=#\ ]V8$@ "DF9?FQM$FH*TJ-MI"9MKL0=BI:;%L
+MP!G0S#%_F=#ATHFJIKK:5(("R$MU00KP4<@!* .*1M[* >;M2V& ?+-6;*<6
+MW8JVL1M\-\*-<,9L89!UH \6!RB7SATU[@))M0<]2%9<>)L5C+>>4GE[WJ:W
+M%<=ZV]Z.3#T'?#O"0;<1 WW+\AUTIBW9*J85)N#'[H:Y47BI*]FA$ORG60$'
+M^]$Y<$.;\F9NCEB@P33'L82M^5+SD>=%I8\#;<&MJ:B%;*DFTUVWC6'L5N+Z
+MN)G4;"O7UK;M:V2@*G4!N:V[5N3. 4>N;[O7!K>ZE?DV.HU.(*[[&KS]L*E<
+M"+!!C &B!0JPY&X!,@"2>S9HLZ@9^)?<\B[,K?"6X\9TL=M\2[/=M^E2?EN'
+MG ?\[7?&1W5<IY>J$R]4H50I35#;"#6U33^;V()Q:!P Q<5Y<6><<Q%>E@$U
+M!*)+Z"JZI0>(Z\9]<6%<>*G1S7%0VNB:,.F;"53R:JE6+X9!O5$>I*[,'TS@
+M5]4VYR2B!.*>L\[<0X<"A ",;KRV;D)F1:Y#L06 N+(<KGGH;F><[:N+F,A0
+M3( ^!\IEN8C)=Q($3"G"+D='FR!T--M?]NL^ <'N)P?^/6:DVBA'T!UUMVFL
+M>YO% /^MG\OQW O]5+BTZA*UDU*O"^O6$ 0;;5;KY@RW+NJ:Z]YFNZZ'9NX^
+MN]'N/D?1A0#%K@J%[$J[&9VOL=']IY>N2$?2I71J63GGTKUM\)VS:^M N\EN
+MNMNI6;M%';9+G&J[C^VV.B=TJ]J(/N)1%HKRJN>D\9:K1M!&T/$J3]]JG]6N
+M I+\E.%)*(R\&2\W4J\ZA?P4I9DY^I"&!?(TK[:\R]-!]3#26F83E-;5=742
+M@1K0-JVE<(*XFH^XO)<+57%)S!2@@?*D7K R*6S,1(@4!SKH06"GB$(L2E9#
+MUIA7/ !+VCUT(SX W]0'_4UP4[IZ]"Y/22_'L/2>$DZO4!%0*!92[T2W1OR?
+ML()QT%1JO3E,U\O(?KUH0-A+"MD 4T%FJ]T OB&J5>J'N5( :L T7C@ALY3O
+MM"O]2VT2!"*_VBJVE-*#CM:+BM/A:T@)3&M<P#3%"! "S"RU^2)2]2NG0$K9
+M<9^4&?7D51Y"0F- 2'E1 RS =$CI497OX7M) :@XKZ#'+R0'HN\793JA3G6
+MZC1*Y6BV;^9TQ9$,=XC.\;[>4;YOP0#\"K^4+_'[QR&^OX5.$4'TOK&O\YLZ
+M3;ZMTYU;>T4]9P4^.YXD #AK4-22A$/; A6 M5I0=&M,]RI]"K!29O(I0$]?
+MU*S"L5A/GYJ%H3W!$]R3L=08?$\&1-4@P,!*5 GY%!"83V,(^@2%$, MRJ<P
+M^N9+\A-8!A+53Q[,7<"7Z4\H"_]T:L!+L!* BD4)4/;2I_ PP;^^Y<&U0-UR
+M'</\VP"GK$Q4!75!,2GEF%["1$51DLD)!2N!K"K4FS:MU5#=10S<FLA0-!0(
+M!4/!OSZP8_*;?&A#E B4:&HU0102/ -[4(;?#4R4!+=.< _E1$%14/ 2#"O%
+MOYG.%" ;S(*!+)PTW$,OM*U41?H%K,$!0',W 7_H9EQ*Y I?VJY44*PP2#"
+M-&$M@<"UVCV1.#7 .T%/Q +D @1=POH.HU'JV"2[V@Y6.MO@K5VFT;#=EJT
+MHJ-AH_U#_AK"7P!=0I(DPD_ (HPR+!..,-;J&W61DC#.NI<P?#$))KP(%Q6A
+M2&;9"4/"N$,VFK92PDR)Z3(NF,()@ @@UI*U;2UV=K:BHS)<* REK;] \"(L
+M EBQ=FNL1.%\P2>*5H+,M@8TC#8+HQT6>H >@/FQ$@M""9LM[0ARG1SPR<X0
+M4RE\0B^0%45G(%P(JR6(L)24"=?"FLPJ_ D7-5G-)#R7B"27L#FL"8>T*NHN
+M_ EG-^VP*"R1\"4P21%P!=#"(@ J;&*HP]U4*WPOZ<,>RH1BD0#$M.U.D3-T
+MPKY1+YP/_\*T23!<"P_#^5HQ'"QHOK[O^\3YXCW+V1P@,)%T#[ :EP*X9B%*
+M/;IG(L/HR1J3R'8-(D94FZ)!P]+P16' @A0()[>6#6_#K$PWS/SY#O>"@H0H
+MY22BT4MRZZ"M*PD1X"T8 >IONI23=)Z'R00UI6AG8-E@8K+.PNG28J(1TPO[
+M;*?"5IJ6W X,(+/VN6V!GLO ADNB\&MBZ\@F#+'_01"+!:K)1'R=\":8&7 "
+M$.,:E($<\!87*(J3.VR<("=(P%T\>*Q7]C =-(_.3VEQ0KRI ,3GK4YA,.4]
+M9VM?TS3YPN]"13Q#"</$\*NTQ"$(["F?&Y_\#JL.I"<*#RH\BH]"VL@H\G M
+M7"XI%N?26]R%^<*DRJ*"I-B7J;$(8("XQFF%7-RE2"I3<6U\%PQ+,H1K'!<C
+MQIB*8DRA ,1V"$/A4$#$W92,,Q%7Q@F 18R?9<8J;>T%8/0I@' 4)Y:P.59I
+M6 0](<.D!>?$RCP,1@O)4@8[$(E!GIH7*# >QOT+5(!Q>L"V=ALD9G;!'@Q!
+M#9=ED)4S[S0[M;!<PQB=2&A-* ,>C3+ R6<3(&M&BTPMK)YH!IP!=@8C\3T;
+M,?6:+VT0(;'5\& V._[3X@JK?"*4P2K3RES(!(Z '!X!)Z.K=ZPQ[BJ/;YM"
+M?8 OT%P$3!H'U.#41%9P!WH0Q#S/$R]S%^,0E+%*-ZG1SQ>'!"TE+$ 2#RP
+MI0?60 9(2A$P0GN\ E!L+4?#*<%/WUEH(%IHNG. KM%"!,E*PRD; <L'0 G0
+MR0<%#SZG#55TY@"$\$&G^)H&:%EC0#H-N7+ %I"3U U! !00K?EI1T 7<(OA
+M/2A:1KO1I@"(@7'P!7B58,@WZ^8>=QFN1"(B$\A20(=K)L-//[+,L":+Q$F#
+MFVPH(\C B9T, IL.!_* K,C8Q?I9)I4&Z &,K@B;*8_(4@!U1Q,(RA4NIQ2@
+M)@;DL%JC*"^[9S(,XR@WQ)*R&60IX\GWD0GK*8/*W0$M= "9RM,IS38H#WR%
+M<B4,#Q,!UFWBRRBCR<?2HZQ3U,J6,!%P*\L<>;)&.RZ=Q!(GEYS8%)WV6KBD
+M+'\BS+*:3"N_R8"0G S!U<EW,K5<<>C)UW*??(\ RA,#JAS:JLK%\J&\*2?*
+MVYF/;!IL$,YRI)R3V,N+S+1,!PBP'+*9,$.@!KIR'_8IA\JP;\'L(:,&P+*\
+M+-T2R@]$JRS(O,K?<J,L!_3+=4&MS-L(S 2S)I,PMZ6\\B(;4F@R$;.PG"I3
+MS*PR2'(L)\OZ<@32+(_++G-= C*OR];RHH0M]YR9(HV"D'@\93)KVS*S1WV)
+M/PPSQ\ILP'?&,;?)HW#1? 7<S": 0B$09Y82LX7[/Q7+L;#>@#''S/PRS5RR
+M-B6'7+H\,(, 3;((,3)O$'<M"E VN[55,SE;MV(Q'V:G8@%!>JLR)<P/QR1'
+M\[(L<BC-7O/=[ ]#S5*S-)$*WP%M\[U4-P\FI@H5@#%SL";G;1#\NLE4@&F3
+MG3PI<$,0H-'R<6Q:5D#I%KI85(7)RJ2<]R5ND#E_&X\ND5%ZI&P>FN:<Z+X7
+M)?' Q"]URH0!/Y8ZC<XP@NP<_"ZB)#/#G#J9RFBS;NLU:RH4BL!L*M, H_-?
+M1AA $;B!XF:YN+GHJ)!*X%4>8M0]$3*T "C Y;($Q ;#DRO<O_U_V_.6^V_2
+ME[]SXBP\C\Y;+FM .FEF9BU^5LCV88LH/]8[NVNZ&VVV5MQF'/"%NSUS+"B
+M>N ^L\D[ /V3/P^<&X@) 2_3B>#+*<\3R6,,QE3LL$J:?,:,'""P.NS HVY
+MS0$K0!J@UYH=LK-4VN:NS*FS!%UQ$ ;#G"05NU&8REPY5\R-SH*4S/!RGL\G
+MPP.-]T30@E3[_#B@T'2K_5RJX<_ZL_&*.S7$_;-ZD,G55@XTP=ES$#(#= ]M
+M0'?*/VX'+4C%SBVT#P "T]!9P5^FY4)GL1NOH3+@<N:>$CV5]+H4)F$@RK$R
+MI%P/8,R5;:S,=FM#4S(+-!C]*0313S02W8=.T!7T!9U$G!'_Z:"L14?1$_23
+M)D*7;23T27?10=&PBK\)<]*7;#2NG ; T)F4#(TZR\]3B4S7*1O/*T#N,4<G
+MSVZT'<U(=\I]]&UVKJ%SF#03;<YQTF>T[ LN,[*LP7^6.K$O667P:SIXMMO9
+MA#LL3TH9<:EKS[8+?+&("1/HN;N#52HT0RCYB>(,W\7,:3)YV1C[RVKQ.'0S
+MG[<#)R$B2:G,\_+\=#A'*(FS:DN;R4^K;>.<.D'.DO-10CE3 9:S(=?'5=.D
+M<QAG;X+.5H'H3-JJSJ5S;W$Z/[?H=!C7.JL ]"T.U3W?9K/S.>UHV,X$0?NT
+M,/?*N_/E\CZC ,-TQWR= ,\6B?!\N1#/]K3Q'+Q1TN!T5L \I[.A:J.!1B40
+M[\_T7#U_"M?SBI ]V]/VM/<\2)L. 373#$TKQ%3 ^-Q1J]#F,WTI J3/Z!HX
+M31B4H_\T[ 9.MP;NL_]D3^/0MUE(W3\#T0#T$"U SU $]!IP1#?4ZR91'473
+MSS)# ^U"RQQ^[?9LN4#2%C29,$EKT*MM C H&]6/0QX=0B-1#R\%[4>? ">T
+M/9U"FU/?L^E02#/5[#09\U+S8RD;4>V5R=.E&B0M26?07/5'=U5?TN!T)FWP
+M<M)YM2=MU/'5(Q0C'3/+/XX!"G!*NP:I=($FO#VW;S5M]DH3P]5QA[D[D%2[
+MPSG97GE+84F+I=F.U6DS(NJ$W 418N5+F[C2*W/^=#B7*B2U-$V;4-."];IT
+M30\!D3-VHDV31MSTY7S(I=6;LW,Q3EL%GS.&&3ICT>!T;FTZMP9M-2,M7(<'
+M[W0\'5C/T_AT6ET[.\[Y=.[,3P>_O'-2K=LFQP(U:KVI&-2J4%JM4"//5#4C
+M[5"GRLUS1/T\4PS1,T5A45O/V+,:=Q]OSR<U6?U1MTS/<FQ,4)?48G-3S6^B
+MU.2E2LU2Z]?L,TQM7<// '9H0#_;U. T3NV2.2!)PT[]/PO1&S 1#50;T2J=
+M6%U4B]=]*%(-5.FV9_4R;6'CT1]T'"U5T]6Q[5WM5+_1'[0>75<G 'KU'_UA
+MPRHK-"&]5'O86/5:/4-;V(WU3?TPY,_P+C?J Q!,CW$/G>4^V %T$5U 5]A$
+M-6M]8O=A3'2'G58_U9C;%+UB6]%.Q),]E;S87#08_46#T.6<&+UBE]$)'5R-
+M1M//-FH3W49CU5"U'$UB5]4F]D<'8I-.*G9LVV*#U8#UDAU(Q]AF]8S-.A78
+M,70Y6ES;V12F)OU76]DY-C@M5V/0=+2%W687M=OSG.W2I=6!]K4+6-O3@W4I
+M;5BKTHBU98EIL]*K;6--X3;3%N?;3!)U7 Y+G#/4[*TSJU)C:J=855R=0^U>
+M<>ETBBQ*(U)V@*,K3F]Q<$#*6<;!M25DZTSQEFZ_L%YP&4NMG)*&?$W_%SC
+M09LN<9CZZJEM>_@.XB]8DF+Y58F-58K%5AP[0AR 6B#:V;93\YI><>U:ICM%
+M34I_F7*<,Q2\'W1'G$>9Q(W9_*0ZA]LF0*S+*2W;XR]5P@3(JK">P!#J$AZ6
+M$HCQ7MRNJL.T&C.<&KZ2#H&BV,$_,58VU+PCY*:Y2TOUU!&V(3- .[S@6\51
+M6]D!$/?*0<A4)2O4M';]6;LHW</M1+_0%'<"D";8<C,VF_;.[7(!U,?PS_W5
+MJ=PJ5W9TV\"<*D?.H71I0LD-H,(!VRUQ:G+SW D=<;KCTB9_6<N-;G_2.G>O
+M*W-_&W' 1)?3X7.=G+3[;7=JS.YM6G'S<BP=S5T2!%@@]T7WI1V;-X!08P-
+M<>&2PXUQ0]@:M\0-5%/<4K3('4!SW#JPSBS0K7(L739W=D/0)??)S="EW+$;
+M%WURO]SGG$#W=W?9J%PFMW1KW7/WS8UA#KNO-M4-='>G/W?/3:H-W5>W)Z=W
+M2]J(H.6M>)\ 7G;2[>H>WBV1TVW(Z'3YG-1M=>_<DG>G=G73W?P8XLUUL]Y>
+M][KI:HH*\$*"-!:;<;'V.UUKX]Z5[CKMS^I1MUP95RJMM\ !2@##; $[E$0B
+MJA0!/L!ULGQW5,EM\BU;:R?:@E[;49%F.]1KLGQ;WWV<D%9ZG &C1(,=IES=
+M-*V:9R8$4BQ=E-9XR[_R 63C5UDWBNJD=%S+VAXQK6UKHW'A9<HV\&%1P?=K
+M1GRK ,8$Z?":A9?@]S81'I!T.<GRW7QKWY#)=@)]5QP)> ->?4^G:6[V/7U'
+M)M:WION7E=_CL7)0$J3?%#>S#85V4PF28N-T@;=R !RP!A0<[])MAK[(,!N5
+MR'% O$NMVC>[@7,,'NUI0!?D 5.W1ZQ0J QM0.Y4+S'1*+&')@: RI0!<8M%
+MI0 !. QC.D3@U'<1D('#=P6X&$7NTB:]+BT%[WJ^Z0/HVP8LS8=9\ W^#7/J
+M]VU:;F?<7K2P;04,;_R;1QS!H@8[%&9&]L"M3X#<*J'DN.#V"=>=3KB0G/'-
+MY)[=V0:NR>W&I^%WOE3QT@M1CT@E*K3:\%T*OH(CIKXL$_V"1P8QN&Q6--#@
+MHC7YC8-O=B3"#MZ#!TP_^,H@A+M+K.YV5H7G2^5HZXL[S;4@<4-<R#;A3#2"
+M"T"E *,/F$FH "G.'O+IAWA(,4;H(33OK"XZ9"+?[.Y>"D.F67A88%+QH7#
+M!E8#&$[(B.$=%1E><I_A:'<:/D"OFV6;NCFD)>.B].?;C+?B;'(8?LJ<%F,X
+MZ6;BNMDHMMOM4ZOA;+CJC8X7#@'3&[XQ3RF^R1P>MSH!=[C*W:G-4<W91K6$
+MP^)X.&UBPOD9^C@)1[SUX:1#K;Q]QP K " >@PCB!7DQ7O$>Y%0V%IV-4S*P
+MV9EZCJN;;FY?P[D0!QO<B7 <<!;UC_8,PMVF?#@LO@4XY'<!1$Z(&^#;+L_<
+M89(E(E78'333)OCS LWM/@X"&S\&A4<F_;,%76'[W'^92IX&= %3-ZRL-P/)
+MA_2;J[$E!HTWK!W&_=\9@Z:+D^_8&<-M]C6$Q#I%_[S&<=F9KF+@5?^G&?.^
+M7#3T3FO45_[-WK=/^:Q+F\W?I=-Y:Q6<M^]O^XW9P@L=4/R]C^_8.GE0WI-3
+MPLMW4'Y$$^68FU&.E)_>7/-9WI3'MCDYJZM#<^5BU ^- H#CD'+'?)2[ &^W
+MD2V4K]C:>&'NAV\!%O1/OIWHM8=Y5?V.B]+C!6']GU'FS_)E?BG'M@8N ZW;
+MLN:1LFO^0J_2:WE;'I7/WU0Y!UQ5P^7J]NRKQA%,5GD"@#]GY?S85LY#JW)@
+MN6LFEA_1%[GA&BL#R7];"J"6J]PX-#=.F]<%/718()D33&CXQFUD$TS0.:G6
+MF5<<X'DUOG'S+F2YNEEI%];I^:4LF[MK\?EMOEC;MZ0M/_Z+F\0 .3FKFS?B
+MJS-R[?O*Y2H 71Y9-]N.C5!S*=S>JID*SH)'XB[X9T")OT_G+0U^WF;B-[A(
+MS(FG!\?$U(U,^P! ^"A..I3B1C@2[HO[XW4!\12,\](+.3%>B!_@XO8Q[NIJ
+MX<HX_.2-"S ]4NA4XCC#10H%XV;XV8XYG9V9^9 M5NN>KOA:08<3H]#,F_K
+M/9Z/6]T#>4HK=-^F*CE+7@:XY(CX6G27 *S>LB/^H"N_$3H,3J&_%!;Z2X&A
+M8V[E]XC H?/@M^F''J+K3D0XFP:+WV:R^!)>B^\=8P N_J(7LKQX$HZBRP$J
+MNA\NC._I-)M$'J/39LCX%FZC=^'->$C-HSL1/GKG-HT+Z>&YVKV&&^E4=SR>
+MI,_C<GB37H?CXX6)?HV39P[[N57 A/OA\&T>3I"CY%3Z9VZEN^0=%Z&DH!,U
+MWP\ANH(5BMZR<8Z5V[1;N4YM<W=N_3-"EY3'S.<M6BY)?7(@M9G^YN;GI/J?
+M;JKWY^G:<1<P:1>R AK@H*, K#2;&ZN/W6,)IYAJ/T%)35F1;!+)I,2FB3&H
+MG*\V<![[UM_ ]Z0;H-LJC[GXO7\#W^-X&8<H;;0,5+R4X()*X$85<CR8#NXR
+MH"R3(^AM$5Z>%JFF]C:^K4X(!^^!&#%]^$I$P,J08[0:* *E2C 0'@[1GM$>
+M8(N<;CN<J-?H7\"-_H4WQ(\Z.?ZC"V^8.C5.I%_J)BZ2GA?'X?6XIVZ'A^HJ
+M=Y2^K$-F;?>0OHYCP4:4X5=RN^Q*NARNV2A)Q:[> -_:[/CYY59QJ #!]]$-
+M<P=8(0!KT-FHR<$WCS[MWJ9 .Z=>CPL!L0W#20YUIT@[9#9T;^,DA"'C!\#)
+MK\DN%"[L#5F $S $G.QE.'&:M</LD S73@3\*.+0T9X^Z.'X.3D(B>IG&F-(
+MLQO(-/MG0#$C.#+?C"SZ=/1O?.AJ:B6C 2)WMM&.[]+D<IR\-1?+:+L>@RS'
+M;NZRITO2.;A,A,IM22^[F'NY/"=/:QASI->O \IT.NA>0(CN'#1M5MU6T9KZ
+MR[ZDDSW?R5WT.A6Q6>J'P47(:N;U8%.VA>VT&9PKE$R<J E:P(@C2@G[D["P
+MNP?N![7ZL.N>$CL00;''$D#%OJW,T!8:NW# L3/ODO#'WHTSZC@ZR?Z,U^OE
+M.,JN9(.S,L=(?*@3W92Z>FZI3^Z5-S?N$8OLDWG[;KZ; -"XI(Z-\V\J^SI^
+MC9_CW[(\3K?;XY_ZDWZ0(^W$&^7-OJ_BAOC-5K9E;!KY]S:ZC]9].VV6LU?J
+M@LD3W+-?[7)[[1ZTU^-#NW&DR!CM8/O>OJJ+[95:E T21^93&M->KSOM@3?4
+M+K4WRU7[^1ZO@?"DVMQ^N]OM7KO>WJXMZTK[J_O"YTOVG&UFMJ/M8(USQ[:[
+M[7#[SR[":^UU>VR#MQM^*?P0G\&W\!7'$<_>_N]4=^=\F]WI-P7LFS;?W2_T
+M"O!/B^&1-"+]O.I18W, 15.[!J_S'3V5S/%H_ #5=[NZ 93@'4:/T>8YADD'
+ME- 8IAE-JHW0=, @_U6+T2IW^4Q>)O*F@QA>QY]N0FYEOC&#SP,VZ>3D1O)H
+M>(ZKG\?/H_5_7K:Y++I:X)X\_"[H@P!C7QSN@$SB+D L[HR[21Z6/>Z1>PQ"
+MOQ_.$@G:GKKC\I=SG*RYI^ZJNW'@N3>X^WH*$+I;\+$[U5VZQ\FG^Z($S ?L
+M=4%*\+D7\\<\\7;!)P"S._'FPW?J>X-F\[8C3.AH[PXV_.[\* G2N&_/JGI*
+M.\%G\%8L\X<#$+YWB0W@?4KE^+?O/>BZTP/Z55*@OQ2J,O]=K_O?^WKQG9#'
+MQ@OY0?O&X30O>K'=_))).(7DZX34Y9_":=*G\ X$;IU#ST.ZQ/7][5S$Y?J\
+M@3ZOJW']][WT?\/BG!(!GM#[<=DO0[\&./1,A6:<*4X]M@>9C'B.OV$1=P8G
+M&-Q:20&.IAX5*$H^*C#(Y;I<"S%KM$R^TA$ :80T[Y*3VA>W21YO#3&8?>B[
+M%\E@#<.^P5/DBX>8ZN\"(>.$Y&CT-J?[\N#;'(MG,HQR<K4"%0.^M\->.B0.
+MI@.U$OH<4(F7?C2X";#5Z["&>A$^*?7I)[JE%*B3#D]XEB*!2^'!\KTDOM_O
+MY/O('H[K\)!Z^AZW:_#Q^\I^RT_Q![S,#JJ7RC6["B^E%^_P794^< ;B,3D5
+M_J)W]GL*#" FTSCC.J)4TU,E.'W($EDV,SU]XO[37R5!O>HPU#LA1?U1#SDD
+M]1V[,\U49'4%T_-!$@?GG.])[,:9<7.N)Z(\/?4O13)M3DGU*%KI9-6C",13
+M5B_7,Q5<O6E?;\,)]_:3$-9/'_$84$'6BVRY_;KFH*OU$8@DWM:_]:Y?7#_7
+MNW&&.D'_U^NU*X JKE-L5+L]D.U0--5S^C0_BY/QM_@P[L;A]?OY7N^$+RV$
+M>KI4USMTNQR-/KXSXS@Z=FT-\^_H>Q2?LC?V GR1GD"CT9B;@D_8,_A?.&UO
+MW^<,)7ND+HV#\7;VFZVS1]SL.(E?XHO2!OSM+MDK\/R;<=ZLZ_6G.ND0D//C
+M=53.0-^721_^:Q"0,_#\FP.ODKOW43A\_ZIW]L2;H3Z(:_/:2*]AD4_>HGP@
+M3\ETY+[11SZNX:/&P2]'_PCODS<[CY ?WT=^Q0N9*?D#^PB>%-0$(-4%-N/<
+M'J_F#EG%-N:/+4_. _CD?GT4+I@/Y:1:4?Z9'^7#>JSLA(!HAYD38CH$]JLM
+MG!^6UU8>?F_/[E[FCOV=OV+K^0EY:%[G8^"K$F=N;K[G_UFB_QB#YB S;'[B
+M9O*:OJUKFS/5N+E_7L&K9N\Z53X&/+?J>O#$K@_GN_>^J:N'!QM5<2MB?&R>
+M2(.MRAT$9'BP/@8,YCV\G\]4&.O6>0P1Z#,5I7Y^OF,33#TVCZ_H'TPG@W=N
+MR #1)W[:S8YWYT,U(WUUI^=O-WL>V[KGL;)JGC_G\6/S/UV?D_KW>:@M3^OG
+M?[J +U-/2CA^TN!0[/A=4H]/8_=E'C&U_EA<Z]EZ!.25+7%K ;<#L0C%\K,D
+M?'5'L.BVCR*;T$6741& E( +%+>ZZ=RK]"S]N*&/,_7'O0D U2_W@092K'JG
+MVRE]<=_07_71O<>OJTWWXP9\&S./!G@ "A 04_R1>'[F<XNW[++._#[!]9'X
+M8+;>WZ:&_DZ>ELWYQ7%@_C@ ^[&YY5*6TP%_OMJFU2/[Z3YFG_FD*O6B)$S!
+M!ZM;<D1_>KV:,(&@6_"WPP=_FI'P6P$+OS'H\.LFY!"F+O$O]"+_2G_5/_2Q
+M6W*]>]O0 &I]_^S/\53]O_3J8_63?*>&\>.\R#U(H=Q/$!W_Z0WR5_4P/W1_
+M$IO\_1O*CU.H_+$RR^_R/_?EO<S/O]'\.7,E>/.G]SF_XK\&D%(\/U\>D\OY
+M=/X%OITX^K>INGGT)_W'_KB1[%?5V7FS7^_/_=WYD,WM5_AK.+:/9$OY'O2X
+MS\%[^U6UN@GNZ\WB_KE?[F?RPO_6QFDOUZ,Z'27OZ_BA?LZPEE-'4#]66/U)
+M_?\YP%\0\<@T[Y[RCM0XNP/Q:IX;_%W_ <Z/*?SMC6;#DSB/4?G9'_+/DFM_
+M2P^;N_T(=ALN]S_&=/H[+=S#YIJ)ZKWWG[U]OS;L T3U@3^?6_^F[E>N2_M)
+MODI^IS?NC.;/KV5U6_G%'!Y_A;_('^)O>8,"J/E9_D0..#_EE\Z/NL< ]+GU
+M_/QR0#\B'U!NZ(?GP_T9_6)FJ+^EG^KO/F>::_TMV)Q]0;9HG^ROVF>-F[!%
+M^[)]'S]STU]F]H?BX_W%^'Y_H[3@'[DOR:7[&[FA^XY_L+EX7UU@WM?\\_'M
+MX:!_48FH7SOLWV<=\WCT*3P>,[WX!+2-/57;@/0 X=XG(PS=@$T+):;J6AG,
+MO9(*F &-&[FKT,9@*J,X4LXHZ(]@@7QOKK7YZV0DU_PGK+5V&AK'#?@0F:BM
+M^L9MA8-2W//D=+#+\:%-^_)GLAP.WL2MDU$XV&[A4-YM)QS% %EW 9 B1IL
+M4>B :)H> ZC,=/ U0**HU8![B!1XVNYM$#B5X .&4B@&FD#@&AJM]/ UP -V
+M,GASC90^(/I#$O@*?-?= 0&!B@%XEW# ]377$@4R >!.311H/^$/,'LJ_^!
+M FE?_+T\W4:EC4=AVJ>9S%Q]ZS92RINM#D@*O+!-^18#_R9G'?%D#8"BF<6)
+M MD7SD "X*RMO+7&\6M1,MA]L[C-WS"PD88+].003%( 6X Q@)VLZ@#O6@>Z
+M ^T \$!YH-@L*T#2V>]U#O!TI).%F3EP:?<.C ?:R380R3EI@CW0%Q@/),VI
+M4L)0@D#Q%D/PU[<JV0?2Z69Q*+%!X#TP'^@01 BJX=:!43J"(#[0("@VFP3B
+M4"XI&[&V#":0$UA* P=N D4,GL"Q&C10.,<I(,XQ AMG*@#5W#JP%!@+/ 7F
+MSG:"4316H$(P6) '#*>A<6Z!@\#YVVXMW_0(S*I9W%1S:1<MET#P)HBT:PH.
+M:8*![\"8X(^K&I@5<+@%T1Q[7#4E&_LL.5=*<^/,S_@Q3C9WFU/0R\55LUR(
+M!<D8?K<_GD"GS-;' \&1MM9W?1A'("--D<=84PM"V99VL3.<&T7'\G9T\[)%
+M!0,HQI75%EZ0DM6<Z; 5V#IL%T$[W3^PC)<*++") ;"!,"?57)[-"%CN$PBF
+MU;Z"0[2$X%[&GE85Q.PAM=B!I\&,TVEP*[AR(F- !ON!DD%;7)ZN,F@6)&-<
+M!G4MMI66H)D-5T8;] M.)4"#$3;18&W0<E$:_.AXVL(L>D$23C6PL786U**0
+M >9[!!.78/VF$[@.O W^FS2#H0'IH%^+#8@2;)]4\N9[V,%4("=0FJ 5Q GJ
+M!&^"J:\WX.H+%;@P PK"ZUJ!1$$[H$JPMA5OT]\=]L*#"[/QH!E@.SANZPXR
+M!G-\KX%Q7WF0_K9N&YB, JV!!$*:(#QM';@#Q ?>!(N"<I1EWVV&..<_ PY:
+M^\9S.$#]G&/0/<@8+-5M _&!0,'&FE=&S=+Q0FG9A*H")4*9A:@A<51/D1VD
+M" ,6[0J/DLFK0[0NXJ=@CE9>%R^ !;(B1HB4L1&&I$H3CY8L8 :JZ!6S@!&N
+M"!M%906(D0S@+" 1*! <"'1 39/)0!T 8' *\B2YI008I+@[%M/"KU"RL ?!
+M>CP6GB2KU<9 ZM5SV5F!+%)@OZ#2TU6*2'B/,!&&DF)/,8&[D/J(=G0E--1H
+M#"@$6T*G19A((L*Q !/2CL2$\ 0B1IG0XW0FM'CM3/0DE:QGS[=*(M#QRK89
+MI@H.+,).A8LP1XB-<!0J"C=>NY@L$\I+#_0&:A0F"E\#QA\:X::PBY2O,O/1
+M.&H<;+XHSNT!5=@/RM5EV_H?. 72"<?/&N8]H162<59PI@,]AA'@"3"T:>+1
+MUH( 0CR^'0L/KM8$I/O9_S*"?9DK3MJOJ<<&&,P(#:9Z$S\#(,GO\*<"7/Q9
+MY3 &FSVF@E3O-O,L1$Q!!OH?)0,Y &(*7!AH*/-QGRH>R+:/2RT-<D*?0!7.
+MS;QEV$*"4X?A4<(&(!.P]38)]#XWR6J,7AC8P]F- 0!H\\)S29B.T9 OQ,P%
+M#"$E7+U"7^8 0$A>*A9V #5XMCYQ8$>K#4$\V=;L"#X1*[CF5:@-4:+O0P-@
+M#,E+?!02X<6+J><X2D=L"KA5)$/N$;5",C(I/!2F#%4\'B6YQ<FK88%Y.@KA
+M"%V&*KU/!/>H1\@F. H-DEQ:VY#HCRX)^X,O$AU]@'Y)U:,AH4G*T822NJJ@
+M#'.&Y"."A3YK%!03 ##T#-=/J:"7H0*)GC(UI"E5#:TFO*,YX<N":9%<42HE
+MEI0/+Y.4@S=)AD M01XU?TA&0D/I7YKH>>1+BAZ!D!9)U".##ID)>R1^VA,]
+M#9>%4<.Q LJ.%2!J1KBF792&ABJA-9PA20U'!Q^C^("AD.L(9F";'@0,!L:
+MCV($LH@"Q-JP# 0S>4*="[LI-(K#A9!PVY3V42%=D#Y6SH$00#<D+D*J,%T$
+MB;)<29C<R@\M#Y-S*:ZXE@B%MB8LS,L/<,@]XAK"GV!'7\.K(00)LH7I4 $L
+M:XZ'R,/DH?)P><@\;!XZ#Y^'SD,LAE^E:1(,$K%05[P\8Q#ZQ^J05\@MB$C4
+MB6"'_2.:R^S0[")"LAT:ER1D2:784M%E<6B3NAC!"0,2A\-3BW1)VQ25,!Y"
+M#^^'^,/\H?X0>0A:@5CT*1AN,PY]EIRCHK>' A/1&=H."Y9QE38)94+&L']D
+M!:!D'P/?WY0OHJ'+R@/TS\Q-OI$VA/HA0W B>"!,9YHG#\2:E@21DA&)^&-=
+M$#&(>B$3Q08Q$L%!-&U]$.E1$Y &(I@(#\'$X!\(&UX MA.4A>QAB5.P\WAX
+MQC8>IA"Q6, **,(KC$V4)+9:)0%/3@J@!C>DH(+P"G^%M E3%E9/%\(KW!4J
+M2> &%['/1U!$K^#D*(V0,1830 [SCVODB"@",/\,PWPCE,.?E.)$^B%&M)R1
+M)&IAYI\PP!D13F CB29PDRP,]*S:"^W@LB5$U(G8!*@"X:[R!R %DZ+*@9_H
+M!(M8&T2HX'5 W_8PF*Y,$;93W@0!43A!<9(5 (E$R<11\!/*P"C!A%C$TB0R
+MLBJ(E$360^6O< _&6&\*2J(X+P,8KND]#"=^128 L\H(D3, <E!;\3& "&*
+M$O%U2X5/A"B$DXB.PI2\(3P+K<3T8!\PEAAV.$34$K,:C3/RA$W!+7,D*V*1
+M)*0#S(3QU@H!5U%&9 *A9D*)IQ)EHB&18\"8ZF,A3'PCOS&,0;=!O>9 O.-H
+M$]<5!(=4(IS /\1I $0,-J!#>:N@!F5+=X#F"VJH"2T709%?(=K*<F'^@0)H
+M 8P OH,: $OB":"ZZ2)F ?:)4XE^XC\QH$C50$[H/$8DI1'M3#5PBQAE,"@B
+M%'5/3*#1Q1CQHOB3\B<"%*<3D0IN@;<@;X 5HV0$1:R(1HFF&'0(-.8[4)!4
+MMK RK@[O'S[QB5@YXR@J%#^*-0#P"!: 5_B;*"A"% ^*SJN;8D!1I\@KY-IY
+MEWZ*$D4R!D71JH%4#"IF%%\3ES"GHA' HSA4' +L%$.*W8)O 1^#HWA2!$ZD
+M%+4ST*&@AN3$&5/9(FI0!0X2&J2I1#ZQIBA5K ($ :X> T6?XG$"J$C),/^X
+M%>&*1L6'XEPQJ3A3+%@Q%?>*4D78QD:QK?A6C %@%4>*6T7G55?QBJA2K+T0
+M-=X%1(TL8&7K!F O>.*4]I2*-$5NFDU1,=2SB2MV09J*=47.8F"CH7A4!"Q.
+M%'F%7$30(AFCC3A8#"TV@4:+V@*1HE91;\!5K")Z%>$&8$7'(G:#*E!6^'X@
+M<50=@(V*$QGC"F#5R"CJ$YU7Q$4Q8D_QLPA8I&0D%S.*>46+XDUPJ2A=="T*
+M%J.*SL7B(LHEMIA5)"DZ 3B*ST64"TH1MPA: 6S8"P!?\\1/ > +4P#K$(=A
+M%K=I00".8FDHH[A<K"Z2,4PN;X/)172QJ7A:]"O:%_F)&44W(A& HXA?C&T<
+M%F>+)44RQGQ1O'A;;"S6C]8Y(2H:Q??C(&%6.$@0$$V*F<7XHO-JP>A9_"].
+M)0H_0@!O08]HOVA:?"^F%IN+J\4 8VN1C %B%#&6?[8%W<7$(B6#PSA>=##J
+MJ\(?,HKP!UEQ)Y!BR3$^<=**68$C0)0A+&$#@"]R%(6,4P B8X=1M6BY0#(J
+M&4F,$<7I(FJQHLADG$HX&1,;*\8FXY 1R\A=1"S2%IU75\8B8XTQM_A@1%0E
+M-B2+/$:R1.'+*F6YB!D) >H&'B,CH_/*S0AG'!@M&5&,;49O01/@S;@ML#-"
+M&8&*_<438Y21DD%G[#,6&;&++$8](Y\QSMAE1#!^%^>,BL8ZHYBQP4AFU%?9
+M.& <,8XH#E'@7: CT_IE!9 I R=3(DF@@CBR0<NPNM!17*B@@(L,.6 04""&
+M$OY8,X@90CPA)4 F.#@\#\J)H$8?@*CQCU5JA-GD&MDLA9-LX1=@UXA*O%!,
+M)7Z-NT12XUDF+7-J](VD&E,"JT9L6#;IU5A!C#6"T58#M,9' ]Z(?7)L++0,
+MG$J(RL:7#3\0'?-M]+0$&WT RT1PHYC!IF:Y^-!Y$O]8YB9^S*_1W%C-$#:^
+M&XN-[<;DWO_O-5#Z*9Q0,N2-WD8? +"QWHANA)\43@I7'SKD@'( R_)OG"-P
+MR'@$3K+^(8( -8$@<"F".S!;IR5""9!Q*J&."362#/ .EHNUC&G XU@R**6%
+M' ]UE(R.HQ/MP*#.:@V<',F YB:5HR^1= "A$SG2 09.])(WA$^._-?$,XX<
+MMCB$*D=[7[QQ\&?W*Q!&]PI7;"[]TEJP#-4:F*-E)\(8E8U6DW6,J'%:HF*M
+M)IQ7;S;(P,")%/5V2XI@1K@:A9\?%M6*W=37\%]TEQ8A4C_%1>Y/Z^@#X#KN
+M[)@ 7T?[QH]B.J4%+-BM!,9-7(SS7(IFZ_C-Z#K"'2D7]HVPXVN*XT1N%#@F
+M&\4,MQFVX[YPL( NV1A*0#!\,!J^8^7 [QAWW$G,':6.]:.5 )HOZ.1]>K.I
+M8RI0"#2LHU'0N?!*?'F,2YX61P,Z3H*%./BN Z"HG"@9K;Y_B2@&P]0&0#I.
+M)>!R^Q/3P&)@(&![U /JUM8E#I'>X^AQN'9C4S<-%LP/2X)7R>J1XSAR;#OV
+M'4.#@HF_(]CQN1,#>*)('^6.I(WJH]<1\+B3.%(< ;2/U\?N(Z-"!F!]K#RZ
+M)!@5,P#AH\R1J0!:L_7-&_4NY\9E8OM1,)5"&%VE')N/B\<#@[VP\$AL7#=:
+M*<Q-IHVDB!3 3(-_G!<R'JM[,<<"I+FD@+!_+,[HS'Z-^L8-@LZA]OB54>=,
+M)]A3^ )!XE_F\^B\HG;!'E-]/<&2 +YNA9!Z%+<M'WV/[P778\KI]4C&B#W&
+M$HX& 10*I+H)]Y@!TSW"'X2/2D'@HW0!!_FNR[\)'X^/7R@9I ^(C*&.>9=L
+M 6 N*9/VB3O_GAS=#Y.'J&/V\?IX^4#_&A^##N6'[F/IC$F !42"^E]W$)R
+M-;R/Y,<HI'W#^YA^%#VN'\<-[<><6L!QX-@O$#;.'QM3(@3[(Q%2 ?GYV@[L
+M'W.-_<=C@O(Q =F$S#]N!W(/ ,=JRK?Q\*B'5#M:+E2.^T(F0@-R3P:!]/O]
+M_^P4$0@A9/\PQ<+MJ+:-J"1A,<<J02 2??! L\FP67@RF#E[76N0C&':F )4
+M 80 9IJ!P&$FUPCX8;,0'=H*=J[^F6\$>.)P2"XT[OB0 $-'">/Q-G.#)#O.
+M(9N0;L<(&Q_ )Q=^O'4\=QJ/H\BDX\HI7R-Z](Y1,A0F+05B%<<B--,X@&Y4
+M'M0Q0H050 L #\"-%#BP,;Q<K+TB03'AF'"-DB'.!B(+Z 8!$1BG\J!PB"AT
+M]T +_ .@!6$ !T ]RS_L*>1YHI4$B7"1-H&)3#EJ(@N/K4A/"RCR.\,I 4!.
+M)$Z1J4C%FL8OX!B0U+N\(GD#L<B^!BUR:0-IN$52,A)YW,)+('TPZ#CW,QVX
+M"X!;?2V8#B6#7^#5\G*-S7:'=@A0A(FA!_"<L= DS< SF(&$I.F 8*3#(F.,
+M<-I?@37((PJ@$N-7!*@Q)#V1 DD:8F(P;:46Q$CR8X0&\SW$3//1WF<Z$)/Q
+MM?@ [+G:($DRE07).QN0#$4A@X7T65K+0H,<2.3E 0AK_1I6)%#2(0GXL7,U
+MU7)LZB9GI SQHB"-?!A0(^U@?0=L9 ]!&]F-]$:^L\"1/#UQ)!O F% T$#W^
+M*S)+7@;V6-^A'8E2>$=6#-H?=H%Y9#VR-Z#(>>=E9?J(CQR%&?>NG+,"X*0Y
+M'H\KNYKQ@!I2$+ER;"L &VTRWYE28UKF4Z $8*+4! XB_)*1I KMWU2$C,0I
+M4@8+@QFVPH'&W#3'VR"84]@# )I]F6NRJ*.H>=OH)$, (K2C%=EQCM>:!-.U
+M3S)YQ<GRGF]R*F'%PCCUN(23I9(^S#),A'62+,V, 4H 8C$R '92!J"B @?2
+M%L@H2#_X@Y@"!("H8C*$)ZL$)0#R)"LM.FE@$[!MV)1<0"Q#9#HN!,"31&T4
+M?B(3/LEJRF&F%?,^,:[L*6AR61D)8[A$,BG-$QQ4)MUF4B(RAE'2.9B4Y$@^
+MQ@9]]JRG9%02,YE)F4Z:)#4S3+VLY%F+E$6;; VX)]-FB3R$UPER+2B6]$R:
+M&T&3!H5E([JMW0:=; UZU"Z49P,> .0B$:+S\ %L*#\X%R<R1L:I1;E?DZ_!
+M*+N2$ :PY%/O)VFBA#^B*&>3I9HY'D;R./F>-$E^</QVTLF29'72.7.=S$YN
+M)P$)&TKOI!L /+E[) B\ -237$KQ9'H2L!&?5#K^!5]=]<E;QWUR.Y&?K)$1
+M,OB3(@?CRA+G("):<6P$S7*4EHL=)5&2>1=#'$4FA'0M58DH@P9,XX8YT [<
+M##88_"@7P=(AH)!G8!RD:"X.%HC@PFM*9,2GA%/:%I IIZLQ@ O@$TE#U*UL
+M(LL G<@B9=T' I$8, $(_@Y<E1@A@%^1#Y"JG$CX%;EZ[,F_S!XM&4EX!$7-
+M\5 YH+1DY('+@U5\80YXN40+[Y--9:$E4RFLU+N0*DT'@[S 'GN2S<6>S#@M
+M*\%XJLGE'GDI.2DKT,R<#9Z49(S\5J_21_"KA ,$*S&5["M-):>2.3"@T4T:
+M)^=SN4E9F?(+26FYV'&UG"8(TTIS97F/!;"=X@%0;%J#LDI@I<BA6(D^(%;F
+M6=03L\KX#ET@0I0&2 .D*]\E:CSDI+Q25K"U207VRJB5T!E_FL)27:F<O%Q,
+M!40^=SQ]Y:5R6!FNY%<:6E(GE 5DI<;28^FOE+< +"V6V$I'WL'2-2D"\ '<
+M*TLU>,B/8Q&B'&6I)%EV+-DL8<"+ X+RBO6?W&>Q.3*05AP\Y51"3TG^*DK.
+M\9"2<RVE9!.2*4D3B%#^)J"2+HFF6I22*GF29.J]2_YKM<$EI?LLDQ>B9#>V
+M!D][ "! I6=A U&H/!I,(1*5=:_(P"PQ)?"H5#SHC225^B9L5-RR9@FN3.2)
+M*X.2S %/)4!R+#FJ[%2:*@6 XJU6I5Z!5=ER454:RA9!>\A2C;:R]>*KI%MR
+M+.V6'LODEX\ 6>EALY^]*\UG54D1P(WR=<:GS%=Z*_>5=4ND7^12%<>IZ<X,
+M+)4#!DN(9<*R20FQ;%B& UN7#K")Y;L$6.;QV]6,+$.7=TN]"\@2)R8E^UQN
+M+*LI)4M*TLGRJ('PXE/&+,D > >:Y>WR<2FZQ%G*+ $1.\L$0/_0L<'MD-61
+MFX26YZ;G)%&2/:FRA%C2*RL.',H>95+!?.:][%U^*PLM4 B<9? K9&F^!%VB
+M+PD.H\M=8.721<E?6UDJO^B5*8"7)3,R+3FB>$8N+5@#K@0X!')E9U6.!$4%
+M:6B3O,B%Y4L-7=FZE$-&"&E]"S3GW,]OYPCV:V]D)TA_PLG_).%KW.%>;$[J
+M*+6714OVY((2:;F17$IV)$,&6;VGY822>VFAS%PR]2X.6,LL&OW2Y82Y')LY
+M+JLIZ4M/R^[2&G;#1!_D,(67:Q21I,H2DJ>Y5)_M+)N1_4L9XAD @,DZZU3J
+MK#Q.!4Q*Y1!R5W.TU$ANS)26 R>F90T*) FU- (L)\=J*S079LZ05#F?VEQ2
+M*-<*'LJM99.R:RF?S H8^B28?[DI105S^H;!)$K.*1,D69D2T]6Q<SE!&RQ,
+M*D./S\JI93+K).FT><Z\L9PS7H(K90F@!)"_')GU858&K8NS0?]L.T6:V4YM
+M 21_(\018IL25/F(7.NQU1YPUQI*YME \F=G8_]I ]IM4LR!ORD#;""$\SP
+M9-PS&,M\HSGE#?&E=$0EZV:9I8?TI".J)JE6@V0*V X,(LE=S53B0ZG;\K#Q
+M*961[;P1Y51RD*F9Z9]](6P8!X855A? )3D':F6R:DB0E2\S9//QKD4/)&.H
+M,=-F#4QM9A-R"M'-G$K8'-\EZL?FXV"AY>C-W%L*%998)(%N%YOCVP5@@%C$
+M6.*6QC,_9MPRB::K[&I1+1TT<P"GS2'S0>,"4&0R,O<W=C829"13O'(V2'.I
+MM?R2F4SQ5JZQ!<?2.:0M-%4 HLR')F3&<,54ROFA,F.94XE5IC6S.?/*3&7*
+M,F4(I8=:9F#CEHG2; WH,@M1!<E>YM'@E[D="&;>\5R.Q$PEES$S&6F\FV)6
+M**64)TEGIGH"#/%96&%E*6\&U4S8)#931-FAS$@^!Y.6#DJ'@NE@G\77^F+^
+M-/^95LF<X3)!*WFK46L5'MF0G,QE(AG+>-+4/$I:,0F02\L3IE/R-S$0%*2T
+M,*N66DWM0 R"JWG4Q$,FKR8&H<;GX!NRC_4++&LR**&:)LP'9=,RP%#5Y! N
+M,Q59,$J4I ,B;1A2N&JES]B'H2#W(5I*+@ _-!29,6$9ZB:5(S<3(MC._*>%
+M,S.;V\P-1CESW BQ3&<V(=>9A 27HSG3G?GL:2/$,T$K'@_'I,>#3,9B^2]$
+M0SH5[D5S4SGQ$-FRV4QJ$PX,Y4:R)(J2K$G),&W,;A S+9M5Y!J2$,F#\UKJ
+M)'F2:TIMP29SL!#<[%LR!WXZK[8W6Q/ -3(%Z%%$ 0 T X&1C=(/_C"R4:R=
+M9U9I> ;2L\F!22E@6W./K(>=1 6BX.$\>$N6-[)6-I)5B/(9HM)BZ1U$AS&
+MF"PL8)7(88V)*E%%*B/EF%066Z/^YD>)+( ><@O8)O8I0B8EBS9A_Z7'JIQP
+M)4H",87XD*Y(P3DU-"@%#V=/":7L4'3$2(+<0*5H2V0([0EED8&H(" '2$<@
+M!70R0+C/ (D 5.B/J13 .%<&,D[JA4TH3C*!&0I,9?X+;:#^PHVS#9#CI''.
+M))8NXPI]2@9ED&19NT#]EZ '.,XWP(P34JCS&IOPO! ?:!/1WDM R2#T<IN<
+M@J"<1$XI)_7B<M&% BFT!DQ48 3U !"N99"K&'/JP;)>4@X1"XFEV)1#HB%Q
+8FY81&X3S0IV3=,A,,"*D#\@ 8@"PUU,"
+
+end
+
+--
+ Frank Kardel (kardel@informatik.uni-erlangen.de)
+ All SCSI disks will from now on be required to send an email
+ notice 24 hours prior to complete hardware failure!
+
diff --git a/usr.sbin/xntpd/patches/patch.10 b/usr.sbin/xntpd/patches/patch.10
new file mode 100644
index 0000000..1771b5f
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.10
@@ -0,0 +1,1925 @@
+diff -c COPYRIGHT:1.1.1.16 COPYRIGHT:1.21
+*** COPYRIGHT:1.1.1.16 Wed Feb 2 18:09:17 1994
+--- COPYRIGHT Wed Feb 2 18:09:18 1994
+***************
+*** 1,6 ****
+ /******************************************************************************
+ * *
+! * Copyright (c) David L. Mills 1992, 1993, 1994 *
+ * *
+ * Permission to use, copy, modify, and distribute this software and its *
+ * documentation for any purpose and without fee is hereby granted, provided *
+--- 1,6 ----
+ /******************************************************************************
+ * *
+! * Copyright (c) David L. Mills 1992, 1993, 1994 *
+ * *
+ * Permission to use, copy, modify, and distribute this software and its *
+ * documentation for any purpose and without fee is hereby granted, provided *
+***************
+*** 55,58 ****
+ * Torsten Duwe <duwe@immd4.informatik.uni-erlangen.de> (Linux Port)
+ * Paul A Vixie <vixie@vix.com> (TrueTime GPS driver)
+ * Jim Jagielski <jim@jagubox.gsfc.nasa.gov> (A/UX port)
+! */
+--- 55,58 ----
+ * Torsten Duwe <duwe@immd4.informatik.uni-erlangen.de> (Linux Port)
+ * Paul A Vixie <vixie@vix.com> (TrueTime GPS driver)
+ * Jim Jagielski <jim@jagubox.gsfc.nasa.gov> (A/UX port)
+! */
+diff -c doc/xntpd.8:1.1.1.12 doc/xntpd.8:3.24
+*** doc/xntpd.8:1.1.1.12 Wed Feb 2 18:10:44 1994
+--- doc/xntpd.8 Wed Feb 2 18:10:45 1994
+***************
+*** 446,451 ****
+--- 446,467 ----
+ .Ip notrust 10
+ Treat these hosts normally in other respects, but never use them as
+ synchronization sources.
++ .Ip limited 10
++ These hosts are subject to limitation of number of clients from the
++ same net. Net in this context refers to the IP notion of net (class A,
++ class B, class C, etc.). Only the first \*(L"client_limit\*(R" hosts
++ that have shown up at the server and that have been active during the
++ last \*(L"client_limit_period\*(R" seconds are accepted. Requests from
++ other clients from the same net are rejected. Only time request
++ packets are taken into account. \*(L"Private\*(R", \*(L"control\*(R",
++ and \*(L"broadcast\*(R" packets are not subject to client limitation
++ and therefore are not contributing to client count. History of clients
++ is kept using the monitoring capability of
++ .IR xntpd .
++ Thus, monitoring is active as long as there is a restriction entry
++ with the \*(L"limited\*(R" flag. The default value for
++ \*(L"client_limit\*(R" is 3. The default value for
++ \*(L"client_limit_period\*(R" is 3600 seconds.
+ .Ip ntpport 10
+ This is actually a match algorithm modifier, rather than a restriction
+ flag. Its presence causes the restriction entry to be matched only if
+***************
+*** 469,474 ****
+--- 485,505 ----
+ considered an alternative to the standard NTP authentication facility. Source
+ address based restrictions are easily circumvented by a determined cracker.
+ .PP
++ .B clientlimit
++ .I limit
++ .PP
++ Sets \*(L"client_limit\*(R" to \*(L"limit\*(R", allows configuration
++ of client limitation policy. This variable defines the number of
++ clients from the same network that are allowed to use the server.
++ .PP
++ .B clientperiod
++ .I period
++ .PP
++ Sets \*(L"client_limit_period\*(R", allows configuration of client
++ limitation policy. This variable specifies the number
++ of seconds after which a client is considered inactive and thus no
++ longer is counted for client limit restriction.
++ .PP
+ .B trap
+ .I host_address
+ [
+diff -c doc/xntpdc.8:1.1.1.2 doc/xntpdc.8:3.4
+*** doc/xntpdc.8:1.1.1.2 Wed Feb 2 18:10:46 1994
+--- doc/xntpdc.8 Wed Feb 2 18:10:47 1994
+***************
+*** 539,544 ****
+--- 539,555 ----
+ Ignore all NTP mode 7 packets which attempt to modify the state of the
+ server (i.e. run time reconfiguration). Queries which return information
+ are permitted.
++ .Ip notrap 10
++ Decline to provide mode 6 control message trap service to matching
++ hosts. The trap service is a subsystem of the mode 6 control message
++ protocol which is intended for use by remote event logging programs.
++ .Ip lowpriotrap 10
++ Declare traps set by matching hosts to be low priority. The number
++ of traps a server can maintain is limited (the current limit is 3).
++ Traps are usually assigned on a first come, first served basis, with
++ later trap requestors being denied service. This flag modifies the
++ assignment algorithm by allowing low priority traps to be overridden
++ by later requests for normal priority traps.
+ .Ip noserve 10
+ Ignore NTP packets whose mode is other than 7. In effect, time service is
+ denied, though queries may still be permitted.
+***************
+*** 549,554 ****
+--- 560,582 ----
+ .Ip notrust 10
+ Treat these hosts normally in other respects, but never use them as
+ synchronization sources.
++ .Ip limited 10
++ These hosts are subject to limitation of number of clients from the
++ same net. Net in this context refers to the IP notion of net (class A,
++ class B, class C, etc.). Only the first \*(L"client_limit\*(R" hosts
++ that have shown up at the server and that have been active during the
++ last \*(L"client_limit_period\*(R" seconds are accepted. Requests from
++ other clients from the same net are rejected. Only time request
++ packets are taken into account. \*(L"Private\*(R", \*(L"control\*(R",
++ and \*(L"broadcast\*(R" packets are not subject to client limitation
++ and therefore are not contributing to client count. History of clients
++ is kept using the monitoring capability of
++ .IR xntpd.
++ Thus, monitoring is active as long as there is a restriction entry
++ with the \*(L"limited\*(R" flag. The default value for
++ \*(L"client_limit\*(R" is 3. The default value for
++ \*(L"client_limit_period\*(R" is 3600 seconds. Currently both
++ variables are not runtime configurable.
+ .Ip ntpport 10
+ This is actually a match algorithm modifier, rather than a restriction
+ flag. Its presence causes the restriction entry to be matched only if
+diff -c hints/linux:1.1.1.1 hints/linux:1.2
+*** hints/linux:1.1.1.1 Wed Feb 2 18:10:58 1994
+--- hints/linux Wed Feb 2 18:10:59 1994
+***************
+*** 1,29 ****
+
+! Requirements: kernel 0.99.14 or newer, libc 4.5 or newer
+ ------------
+
+! With this configuration, xntp should build an run right out of the
+! box (see generic hints for how-to), with one big limitation: tickadj doesn't
+! work yet. This is especially painful since PCs are usually equipped with
+! untuned, badly-drifting quartzes, values up to 200 ppm being no exception.
+! Because the loop filter algorithms are limited to compensating no more than
+! 100 ppm, currently only one workaround is possible:
+! Compile your own kernel and adjust linux/include/linux/timex.h,
+! line 67 (in pl14):
+!
+! #define CLOCK_TICK_RATE 1193180 /* Underlying HZ */
+!
+! Since this is surely not true for your hardware, adjust the hundreds
+! to match your quartz. Adding 100 compensates for a drift of -83.8 ppm
+! (1/CLOCK_TICK_RATE). The number gets rounded to the nearest 100 so don't
+! bother to tune any finer.
+!
+! Fixing tickadj is already in my work queue, so the previous comment should be
+! obsolete RSN. If you really need to run xntp on any earlier versions of the
+! kernel or libc, or have any other question not covered in the READMEs / hint
+! files (sorry, necessary comment in the Linux community ;-) feel free to ask
+! me (duwe@informatik.uni-erlangen.de)
+!
+! xntp3.3b of 1993/12/06 : remember to change #define ntp_adjtime adjtimex to
+! __adjtimex in the Linux section (line 316). This is hopefully done if you
+! (don't :-) see this paragraph in the xntp3.x distribution.
+--- 1,9 ----
+
+! Requirements: kernel 0.99.14y or newer, libc 4.5.8 or newer
+ ------------
+
+! With this configuration, xntp should build an run right out of the box
+! (see generic hints for how-to). If you really need to run xntp on any earlier
+! versions of the kernel or libc, or have any other question not covered in the
+! READMEs / hint files (sorry, necessary comment in the Linux community ;-) feel
+! free to ask me (duwe@informatik.uni-erlangen.de)
+diff -c include/ntp.h:1.1.1.17 include/ntp.h:3.23
+*** include/ntp.h:1.1.1.17 Wed Feb 2 18:11:18 1994
+--- include/ntp.h Wed Feb 2 18:11:18 1994
+***************
+*** 612,617 ****
+--- 612,620 ----
+ struct mon_data *hash_prev; /* previous structure in hash list */
+ struct mon_data *mru_next; /* next structure in MRU list */
+ struct mon_data *mru_prev; /* previous structure in MRU list */
++ struct mon_data *fifo_next; /* next structure in FIFO list */
++ struct mon_data *fifo_prev; /* previous structure in FIFO list */
++ U_LONG lastdrop; /* last time dropped due to RES_LIMIT*/
+ U_LONG lasttime; /* last time data updated */
+ U_LONG firsttime; /* time structure initialized */
+ U_LONG count; /* count we have seen */
+***************
+*** 621,627 ****
+ u_char version; /* version of incoming packet */
+ };
+
+!
+ /*
+ * Structure used for restrictlist entries
+ */
+--- 624,635 ----
+ u_char version; /* version of incoming packet */
+ };
+
+! /*
+! * Values used with mon_enabled to indicate reason for enabling monitoring
+! */
+! #define MON_OFF 0x00 /* no monitoring */
+! #define MON_ON 0x01 /* monitoring explicitly enabled */
+! #define MON_RES 0x02 /* implicit monitoring for RES_LIMITED */
+ /*
+ * Structure used for restrictlist entries
+ */
+***************
+*** 645,654 ****
+ #define RES_NOPEER 0x20 /* don't allocate memory resources */
+ #define RES_NOTRAP 0x40 /* don't allow him to set traps */
+ #define RES_LPTRAP 0x80 /* traps set by him are low priority */
+
+ #define RES_ALLFLAGS \
+ (RES_IGNORE|RES_DONTSERVE|RES_DONTTRUST|RES_NOQUERY\
+! |RES_NOMODIFY|RES_NOPEER|RES_NOTRAP|RES_LPTRAP)
+
+ /*
+ * Match flags
+--- 653,663 ----
+ #define RES_NOPEER 0x20 /* don't allocate memory resources */
+ #define RES_NOTRAP 0x40 /* don't allow him to set traps */
+ #define RES_LPTRAP 0x80 /* traps set by him are low priority */
++ #define RES_LIMITED 0x100 /* limit per net number of clients */
+
+ #define RES_ALLFLAGS \
+ (RES_IGNORE|RES_DONTSERVE|RES_DONTTRUST|RES_NOQUERY\
+! |RES_NOMODIFY|RES_NOPEER|RES_NOTRAP|RES_LPTRAP|RES_LIMITED)
+
+ /*
+ * Match flags
+diff -c include/ntp_request.h:1.1.1.7 include/ntp_request.h:3.7
+*** include/ntp_request.h:1.1.1.7 Wed Feb 2 18:11:27 1994
+--- include/ntp_request.h Wed Feb 2 18:11:28 1994
+***************
+*** 429,438 ****
+--- 429,456 ----
+ U_LONG processed; /* packets processed */
+ U_LONG badauth; /* packets dropped because of authorization */
+ U_LONG wanderhold;
++ U_LONG limitrejected; /* rejected because of client limitation */
+ };
+
+
+ /*
++ * System stats - old version
++ */
++ struct old_info_sys_stats {
++ U_LONG timeup; /* time we have been up and running */
++ U_LONG timereset; /* time since these were last cleared */
++ U_LONG badstratum; /* packets claiming an invalid stratum */
++ U_LONG oldversionpkt; /* old version packets received */
++ U_LONG newversionpkt; /* new version packets received */
++ U_LONG unknownversion; /* don't know version packets */
++ U_LONG badlength; /* packets with bad length */
++ U_LONG processed; /* packets processed */
++ U_LONG badauth; /* packets dropped because of authorization */
++ U_LONG wanderhold;
++ };
++
++
++ /*
+ * Peer memory statistics. Collected in the peer module.
+ */
+ struct info_mem_stats {
+***************
+*** 546,551 ****
+--- 564,570 ----
+ struct info_monitor {
+ U_LONG lasttime; /* last packet from this host */
+ U_LONG firsttime; /* first time we received a packet */
++ U_LONG lastdrop; /* last time we rejected a packet due to client limitation policy */
+ U_LONG count; /* count of packets received */
+ U_LONG addr; /* host address */
+ u_short port; /* port number of last reception */
+***************
+*** 553,558 ****
+--- 572,589 ----
+ u_char version; /* version number of last packet */
+ };
+
++ /*
++ * Structure used for returning monitor data (old format
++ */
++ struct old_info_monitor {
++ U_LONG lasttime; /* last packet from this host */
++ U_LONG firsttime; /* first time we received a packet */
++ U_LONG count; /* count of packets received */
++ U_LONG addr; /* host address */
++ u_short port; /* port number of last reception */
++ u_char mode; /* mode of last packet */
++ u_char version; /* version number of last packet */
++ };
+
+ /*
+ * Structure used for passing indication of flags to clear
+diff -c include/ntp_stdlib.h:1.1.1.7 include/ntp_stdlib.h:1.2
+*** include/ntp_stdlib.h:1.1.1.7 Wed Feb 2 18:11:31 1994
+--- include/ntp_stdlib.h Wed Feb 2 18:11:31 1994
+***************
+*** 79,84 ****
+--- 79,85 ----
+ extern char * mfptoa P((U_LONG, U_LONG, int));
+ extern char * mfptoms P((U_LONG, U_LONG, int));
+ extern char * modetoa P((int));
++ extern U_LONG netof P((U_LONG));
+ extern char * numtoa P((U_LONG));
+ extern char * numtohost P((U_LONG));
+ extern int octtoint P((const char *, U_LONG *));
+diff -c include/ntpd.h:1.1.1.7 include/ntpd.h:1.6
+*** include/ntpd.h:1.1.1.7 Wed Feb 2 18:11:38 1994
+--- include/ntpd.h Wed Feb 2 18:11:38 1994
+***************
+*** 93,100 ****
+
+ /* ntp_monitor.c */
+ extern void init_mon P((void));
+! extern void mon_start P((void));
+! extern void mon_stop P((void));
+ extern void monitor P((struct recvbuf *));
+
+ /* ntp_peer.c */
+--- 93,100 ----
+
+ /* ntp_monitor.c */
+ extern void init_mon P((void));
+! extern void mon_start P((int));
+! extern void mon_stop P((int));
+ extern void monitor P((struct recvbuf *));
+
+ /* ntp_peer.c */
+diff -c lib/Makefile.tmpl:1.1.1.14 lib/Makefile.tmpl:3.25
+*** lib/Makefile.tmpl:1.1.1.14 Wed Feb 2 18:12:06 1994
+--- lib/Makefile.tmpl Wed Feb 2 18:12:07 1994
+***************
+*** 31,37 ****
+ uglydate.c uinttoa.c utvtoa.c machines.c clocktypes.c \
+ md5.c a_md5encrypt.c a_md5decrypt.c \
+ a_md512crypt.c decodenetnum.c systime.c msyslog.c syssignal.c \
+! findconfig.c
+
+ OBJS= atoint.o atolfp.o atouint.o auth12crypt.o authdecrypt.o authdes.o \
+ authencrypt.o authkeys.o authparity.o authreadkeys.o authusekey.o \
+--- 31,37 ----
+ uglydate.c uinttoa.c utvtoa.c machines.c clocktypes.c \
+ md5.c a_md5encrypt.c a_md5decrypt.c \
+ a_md512crypt.c decodenetnum.c systime.c msyslog.c syssignal.c \
+! findconfig.c netof.c
+
+ OBJS= atoint.o atolfp.o atouint.o auth12crypt.o authdecrypt.o authdes.o \
+ authencrypt.o authkeys.o authparity.o authreadkeys.o authusekey.o \
+***************
+*** 44,50 ****
+ uglydate.o uinttoa.o utvtoa.o machines.o clocktypes.o \
+ md5.o a_md5encrypt.o a_md5decrypt.o \
+ a_md512crypt.o decodenetnum.o systime.o msyslog.o syssignal.o \
+! findconfig.o
+
+ $(LIBNAME).a: $(OBJS)
+ ar rv $@ $?
+--- 44,50 ----
+ uglydate.o uinttoa.o utvtoa.o machines.o clocktypes.o \
+ md5.o a_md5encrypt.o a_md5decrypt.o \
+ a_md512crypt.o decodenetnum.o systime.o msyslog.o syssignal.o \
+! findconfig.o netof.o
+
+ $(LIBNAME).a: $(OBJS)
+ ar rv $@ $?
+diff -c /dev/null lib/netof.c:3.1
+*** /dev/null Wed Feb 2 18:13:07 1994
+--- lib/netof.c Wed Feb 2 18:13:07 1994
+***************
+*** 0 ****
+--- 1,25 ----
++ /*
++ * netof - return the net address part of an ip address
++ * (zero out host part)
++ */
++ #include <stdio.h>
++
++ #include "ntp_fp.h"
++ #include "ntp_stdlib.h"
++
++ U_LONG
++ netof(num)
++ U_LONG num;
++ {
++ register U_LONG netnum;
++
++ netnum = num;
++
++ if(IN_CLASSC(netnum))
++ netnum &= IN_CLASSC_NET;
++ else if (IN_CLASSB(netnum))
++ netnum &= IN_CLASSB_NET;
++ else /* treat als other like class A */
++ netnum &= IN_CLASSA_NET;
++ return netnum;
++ }
+diff -c /dev/null parse/README.new_clocks:3.2
+*** /dev/null Wed Feb 2 18:14:30 1994
+--- parse/README.new_clocks Wed Feb 2 18:14:30 1994
+***************
+*** 0 ****
+--- 1,203 ----
++ Here is an attempt to scetch out what you need to do in order to
++ add another clock to the parse driver:
++
++ Prerequsites:
++ - Does the system you want the clock connect to have
++ termio.h or termios.h ? (You need that for the parse driver)
++
++ What to do:
++
++ Make a conversion module (parse/clk_*.c)
++
++ - What ist the time code format ?
++ - find year, month, day, hour, minute, second, status (synchronised or
++ not), possibly time zone information (you need to give the offset to UTC)
++ You will have to convert the data from a string into a struct clocktime:
++ struct clocktime /* clock time broken up from time code */
++ {
++ LONG day;
++ LONG month;
++ LONG year;
++ LONG hour;
++ LONG minute;
++ LONG second;
++ LONG usecond;
++ LONG utcoffset; /* in seconds */
++ LONG flags; /* current clock status */
++ };
++
++ Conversion is usually simple and straight forward. For the flags following
++ values can be OR'ed together:
++
++ PARSEB_ANNOUNCE switch time zone warning (informational only)
++ PARSEB_POWERUP no synchronisation - clock confused (must set then)
++ PARSEB_NOSYNC timecode currently not confirmed (must set then)
++ usually on reception error when the is still a
++ chance the the generated time is still ok.
++
++ PARSEB_DST DST in effect (informational only)
++ PARSEB_UTC timecode contains UTC time (informational only)
++ PARSEB_LEAP LEAP warning (prior to leap happening - must set when imminent)
++ PARSEB_ALTERNATE backup transmitter (informational only)
++ PARSEB_POSITION geographic position available (informational only)
++ PARSEB_LEAPSECOND actual leap second (this time code is the leap
++ second - informational only)
++
++ These are feature flags denoting items that are supported by the clock:
++ PARSEB_S_LEAP supports LEAP - might set PARSEB_LEAP
++ PARSEB_S_ANTENNA supports ANTENNA - might set PARSEB_ALTERNATE
++ PARSEB_S_PPS supports PPS time stamping
++ PARSEB_S_POSITION supports position information (GPS)
++
++ Conversion is done in the cvt_* routine in parse/clk_*.c files. look in
++ them for examples. The basic structure is:
++
++ struct clockformat <yourclock>_format = {
++ lots of field for you to fill out (see below)
++ };
++
++ static cvt_<yourclock>()
++ ...
++ {
++ if (<I do not recognize my time code>) {
++ return CVT_NONE;
++ } else {
++ if (<conversion into clockformat is ok>) {
++ <set all necessary flags>;
++ return CVT_OK;
++ } else {
++ return CVT_FAIL|CVT_BADFMT;
++ }
++ }
++
++ The struct clockformat is the interface to the rest of the parse
++ driver - it holds all information necessary for finding the
++ clock message and doing the appropriate time stamping.
++
++ struct clockformat
++ {
++ unsigned LONG (*convert)();
++ /* conversion routine - your routine - cvt_<yourclock> */
++ void (*syncevt)();
++ /* routine for handling RS232 sync events (time stamps) - usually sync_simple */
++ unsigned LONG (*syncpps)();
++ /* PPS input routine - usually pps_simple */
++ unsigned LONG (*synth)();
++ /* time code synthesizer - usually not used - (LONG (*)())0 */
++ void *data;
++ /* local parameters - any parameters/data/configuration info your conversion
++ routine might need */
++ char *name;
++ /* clock format name - Name of the time code */
++ unsigned short length;
++ /* maximum length of data packet for your clock format */
++ unsigned LONG flags;
++ /* information for the parser what to look for */
++ struct timeval timeout;
++ /* buffer restart after timeout (us) - some clocks preceede new data by
++ a longer period of silence - unsually not used */
++ unsigned char startsym;
++ /* start symbol - character at the beginning of the clock data */
++ unsigned char endsym;
++ /* end symbol - character at the end of the clock data */
++ unsigned char syncsym;
++ /* sync symbol - character that is "on time" - where the time stamp should be taken */
++ };
++
++ The flags:
++ F_START use startsym to find the beginning of the clock data
++ F_END use endsym to find the end of the clock data
++ SYNC_TIMEOUT packet restart after timeout in timeout field
++ SYNC_START packet start is sync event (time stamp at paket start)
++ SYNC_END packet end is sync event (time stamp at paket end)
++ SYNC_CHAR special character (syncsym) is sync event
++ SYNC_ONE PPS synchronize on 'ONE' transition
++ SYNC_ZERO PPS synchronize on 'ZERO' transition
++ SYNC_SYNTHESIZE generate intermediate time stamps (very special case!)
++ CVT_FIXEDONLY convert only in fixed configuration - (data format not
++ suitable for auto-configuration)
++
++
++ The above should have given you some hints on how to build a clk_*.c
++ file with the time code conversion. See the examples and pick a clock
++ closest to yours and tweak the code to match your clock.
++
++ In order to make your clk_*.c file usable a referenc to the clockformat
++ structure must be put into parse_conf.c.
++
++
++
++ TTY setup and initialisation/configuration will be done in
++ xntpd/refclock_parse.c
++
++ - Find out the exact tty settings for your clock (baud rate, parity,
++ stop bits, character size, ...) and note them in terms of
++ termio*.h c_cflag macros.
++
++ - in xntpd/refclock_parse.c fill out a new the struct clockinfo element
++ (allocates a new "IP" address - see comments)
++ (see all the other clocks for example)
++ struct clockinfo
++ {
++ U_LONG cl_flags; /* operation flags (io modes) */
++ PARSE_F_NOPOLLONLY always do async io - read whenever input comes
++ PARSE_F_POLLONLY never do async io - only read when expecting data
++ PARSE_F_PPSPPS use loopfilter PPS code (CIOGETEV)
++ PARSE_F_PPSONSECOND PPS pulses are on second
++ usually flags stay 0 as they are used only for special setups
++
++ void (*cl_poll)(); /* active poll routine */
++ The routine to call when the clock needs data sent to it in order to
++ get a time code from the clock (e.g. Trimble clock)
++ int (*cl_init)(); /* active poll init routine */
++ The routine to call for very special initializations.
++ void (*cl_end)(); /* active poll end routine */
++ The routine to call to undo any special initialisation (free memory/timers)
++ void *cl_data; /* local data area for "poll" mechanism */
++ local data for polling routines
++ u_fp cl_rootdelay; /* rootdelay */
++ NTP rottdelay estimate (usually 0)
++ U_LONG cl_basedelay; /* current offset - unsigned l_fp fractional par
++ time (fraction) by which the RS232 time code is delayed from the actual time.
++ t */
++ U_LONG cl_ppsdelay; /* current PPS offset - unsigned l_fp fractional
++ time (fraction) by which the PPS time stamp is delayed (usually 0)
++ part */
++ char *cl_id; /* ID code (usually "DCF") */
++ Refclock id - (max 4 chars)
++ char *cl_description; /* device name */
++ Name of this device.
++ char *cl_format; /* fixed format */
++ If the data format cann not ne detected automatically this is the name
++ as in clk_*.c clockformat.
++ u_char cl_type; /* clock type (ntp control) */
++ Type if clock as in clock status word (ntp control messages) - usually 0
++ U_LONG cl_maxunsync; /* time to trust oscillator after loosing synch
++ */
++ seconds a clock can be trusted after loosing synchronisation.
++
++ U_LONG cl_cflag; /* terminal io flags */
++ U_LONG cl_iflag; /* terminal io flags */
++ U_LONG cl_oflag; /* terminal io flags */
++ U_LONG cl_lflag; /* terminal io flags */
++ termio*.h tty modes.
++ } clockinfo[] = {
++ ...,<other clocks>,...
++ { < your parameters> },
++ };
++
++
++ Well, this is very sketchy, i know. But I hope it helps a little bit.
++ The best way is to look which clock comes closet to your and tweak that
++ code.
++ Two sorts of clocks are used with parse. Clocks that automatically sent
++ thier time code (once a second) do not nee entries in the poll routines because
++ they sent the data all the time. The second sort are the clocks that need a
++ command sent to then in order to reply with a time code (like the Trimble
++ clock).
++
++ For questions: kardel@informatik.uni-erlangen.de. Please include
++ an exact description on how your clock works. (initialisation,
++ TTY modes, strings to be sent to it, responses received from the clock).
++
++ Frank Kardel
+diff -c /dev/null parse/README.parse_clocks:3.1
+*** /dev/null Wed Feb 2 18:14:33 1994
+--- parse/README.parse_clocks Wed Feb 2 18:14:33 1994
+***************
+*** 0 ****
+--- 1,263 ----
++ The parse driver currently supports several clock with different
++ query mechanisms. In order for you to find a sample that might be
++ similar to a clock you might want to integrate into parse i'll sum
++ up the major features of the clocks (this information is distributed
++ in the parse/clk_*.c and xntpd/refclock_parse.c files).
++
++ ---
++ Meinberg: 127.127.8. 0- 3 (PZF535TCXO)
++ 127.127.8. 4- 7 (PZF535OCXO)
++ 127.127.8. 8-11 (DCFUA31)
++ 127.127.8.28-31 (GPS166)
++ Meinberg: start=<STX>, end=<ETX>, sync on start
++ pattern="\2D: . . ;T: ;U: . . ; \3"
++ pattern="\2 . . ; ; : : ; \3"
++ pattern="\2 . . ; ; : : ; : ; ; . . "
++
++ Meinberg is a german manufacturer of time code receivers. Those clocks
++ have a pretty common output format in the stock version. In order to
++ support NTP Meinberg was so kind to produce some special versions of
++ the firmware for the use with NTP. So, if you are going to use a
++ Meinberg clock please ask whether there is a special Uni Erlangen
++ version.
++
++ General characteristics:
++ Meinberg clocks primarily output pulse per second and a describing
++ ASCII string. This string can be produced in two modes. either upon
++ the reception of a question mark or every second. NTP uses the latter
++ mechanism. The DCF77 variants have a pretty good relationship between
++ RS232 time code and the PPS signal while the GPS receiver has no fixed
++ timeing between the datagram and the pulse (you need to use PPS with
++ GPS!) on DCF77 you might get away without the PPS signal.
++
++ The preferred tty setting for Meinberg is:
++ CFLAG (B9600|CS7|PARENB|CREAD|HUPCL)
++ IFLAG (IGNBRK|IGNPAR|ISTRIP)
++ OFLAG 0
++ LFLAG 0
++
++ The clock is run at datagram once per second.
++ Stock dataformat is:
++
++ <STX>D:<dd>.<mm>.<yy>;T:<w>;U:<hh>:<mm>:<ss>;<S><F><D><A><ETX>
++ pos: 0 00 00 0 00 0 11 111 1 111 12 2 22 2 22 2 2 2 3 3 3
++ 1 23 45 6 78 9 01 234 5 678 90 1 23 4 56 7 8 9 0 1 2
++
++ <STX> = '\002' ASCII start of text
++ <ETX> = '\003' ASCII end of text
++ <dd>,<mm>,<yy> = day, month, year(2 digits!!)
++ <w> = day of week (sunday= 0)
++ <hh>,<mm>,<ss> = hour, minute, second
++ <S> = '#' if never synced since powerup else ' ' for DCF U/A 31
++ '#' if not PZF sychronisation available else ' ' for PZF 535
++ <F> = '*' if time comes from internal quartz else ' '
++ <D> = 'S' if daylight saving time is active else ' '
++ <A> = '!' during the hour preceeding an daylight saving time
++ start/end change
++
++ For the university of Erlangen a special format was implemented to support
++ LEAP announcement and anouncement of alternate antenna.
++
++ Version for UNI-ERLANGEN Software is: PZFUERL V4.6 (Meinberg)
++
++ The use of this software release (or higher) is *ABSOLUTELY*
++ recommended (ask for PZFUERL version as some minor HW fixes have
++ been introduced) due to the LEAP second support and UTC indication.
++ The standard timecode does not indicate when the timecode is in
++ UTC (by front panel configuration) thus we have no chance to find
++ the correct utc offset. For the standard format do not ever use
++ UTC display as this is not detectable in the time code !!!
++
++ <STX><dd>.<mm>.<yy>; <w>; <hh>:<mm>:<ss>; <U><S><F><D><A><L><R><ETX>
++ pos: 0 00 0 00 0 00 11 1 11 11 1 11 2 22 22 2 2 2 2 2 3 3 3
++ 1 23 4 56 7 89 01 2 34 56 7 89 0 12 34 5 6 7 8 9 0 1 2
++ <STX> = '\002' ASCII start of text
++ <ETX> = '\003' ASCII end of text
++ <dd>,<mm>,<yy> = day, month, year(2 digits!!)
++ <w> = day of week (sunday= 0)
++ <hh>,<mm>,<ss> = hour, minute, second
++ <U> = 'U' UTC time display
++ <S> = '#' if never synced since powerup else ' ' for DCF U/A 31
++ '#' if not PZF sychronisation available else ' ' for PZF 535
++ <F> = '*' if time comes from internal quartz else ' '
++ <D> = 'S' if daylight saving time is active else ' '
++ <A> = '!' during the hour preceeding an daylight saving time
++ start/end change
++ <L> = 'A' LEAP second announcement
++ <R> = 'R' alternate antenna
++
++ Meinberg GPS166 receiver
++
++ You must get the Uni-Erlangen firmware for the GPS receiver support
++ to work to full satisfaction !
++
++ <STX><dd>.<mm>.<yy>; <w>; <hh>:<mm>:<ss>; <+/-><00:00>; <U><S><F><D><A><L><R><L>; <position...><ETX>
++ *
++ 000000000111111111122222222223333333333444444444455555555556666666
++ 123456789012345678901234567890123456789012345678901234567890123456
++ \x0209.07.93; 5; 08:48:26; +00:00; ; 49.5736N 11.0280E 373m\x03
++ *
++
++ <STX> = '\002' ASCII start of text
++ <ETX> = '\003' ASCII end of text
++ <dd>,<mm>,<yy> = day, month, year(2 digits!!)
++ <w> = day of week (sunday= 0)
++ <hh>,<mm>,<ss> = hour, minute, second
++ <+/->,<00:00> = offset to UTC
++ <S> = '#' if never synced since powerup else ' ' for DCF U/A 31
++ '#' if not PZF sychronisation available else ' ' for PZF 535
++ <U> = 'U' UTC time display
++ <F> = '*' if time comes from internal quartz else ' '
++ <D> = 'S' if daylight saving time is active else ' '
++ <A> = '!' during the hour preceeding an daylight saving time
++ start/end change
++ <L> = 'A' LEAP second announcement
++ <R> = 'R' alternate antenna (reminiscent of PZF535) usually ' '
++ <L> = 'L' on 23:59:60
++
++
++ For the Meinberg parse look into clock_meinberg.c
++
++ ---
++ RAWDCF: 127.127.8.20-23 (Conrad receiver module - delay 210ms)
++ 127.127.8.24-27 (FAU receiver - delay 258ms)
++ RAWDCF: end=TIMEOUT>1.5s, sync each char (any char),generate psuedo time
++ codes, fixed format
++
++ direct DCF77 code input
++ In Europe it is relatively easy/cheap the receive the german time code
++ transmitter DCF77. The simplest version to process its signal is to
++ feed the 100/200ms pulse of the demodulated AM signal via a level
++ converter to an RS232 port at 50Baud. parse/clk_rawdcf.c holds all
++ necessary decoding logic for the time code which is transmitted each
++ minute for one minute. A bit of the time code is sent once a second.
++
++ The preferred tty setting is:
++ CFLAG (B50|CS8|CREAD|CLOCAL)
++ IFLAG 0
++ OFLAG 0
++ LFLAG 0
++
++ DCF77 raw time code
++
++ From "Zur Zeit", Physikalisch-Technische Bundesanstalt (PTB), Braunschweig
++ und Berlin, Maerz 1989
++
++ Timecode transmission:
++ AM:
++ time marks are send every second except for the second before the
++ next minute mark
++ time marks consist of a reduction of transmitter power to 25%
++ of the nominal level
++ the falling edge is the time indication (on time)
++ time marks of a 100ms duration constitute a logical 0
++ time marks of a 200ms duration constitute a logical 1
++ FM:
++ see the spec. (basically a (non-)inverted psuedo random phase shift)
++
++ Encoding:
++ Second Contents
++ 0 - 10 AM: free, FM: 0
++ 11 - 14 free
++ 15 R - alternate antenna
++ 16 A1 - expect zone change (1 hour before)
++ 17 - 18 Z1,Z2 - time zone
++ 0 0 illegal
++ 0 1 MEZ (MET)
++ 1 0 MESZ (MED, MET DST)
++ 1 1 illegal
++ 19 A2 - expect leap insertion/deletion (1 hour before)
++ 20 S - start of time code (1)
++ 21 - 24 M1 - BCD (lsb first) Minutes
++ 25 - 27 M10 - BCD (lsb first) 10 Minutes
++ 28 P1 - Minute Parity (even)
++ 29 - 32 H1 - BCD (lsb first) Hours
++ 33 - 34 H10 - BCD (lsb first) 10 Hours
++ 35 P2 - Hour Parity (even)
++ 36 - 39 D1 - BCD (lsb first) Days
++ 40 - 41 D10 - BCD (lsb first) 10 Days
++ 42 - 44 DW - BCD (lsb first) day of week (1: Monday -> 7: Sunday)
++ 45 - 49 MO - BCD (lsb first) Month
++ 50 MO0 - 10 Months
++ 51 - 53 Y1 - BCD (lsb first) Years
++ 54 - 57 Y10 - BCD (lsb first) 10 Years
++ 58 P3 - Date Parity (even)
++ 59 - usually missing (minute indication), except for leap insertion
++
++ ---
++ Schmid clock: 127.127.8.16-19
++ Schmid clock: needs poll, binary input, end='\xFC', sync start
++
++ The Schmid clock is a DCF77 receiver that sends a binary
++ time code at the reception of a flag byte. The contents
++ if the flag byte determined the time code format. The
++ binary time code is delimited by the byte 0xFC.
++
++ TTY setup is:
++ CFLAG (B1200|CS8|CREAD|CLOCAL)
++ IFLAG 0
++ OFLAG 0
++ LFLAG 0
++
++ The command to Schmid's DCF77 clock is a single byte; each bit
++ allows the user to select some part of the time string, as follows (the
++ output for the lsb is sent first).
++
++ Bit 0: time in MEZ, 4 bytes *binary, not BCD*; hh.mm.ss.tenths
++ Bit 1: date 3 bytes *binary, not BCD: dd.mm.yy
++ Bit 2: week day, 1 byte (unused here)
++ Bit 3: time zone, 1 byte, 0=MET, 1=MEST. (unused here)
++ Bit 4: clock status, 1 byte, 0=time invalid,
++ 1=time from crystal backup,
++ 3=time from DCF77
++ Bit 5: transmitter status, 1 byte,
++ bit 0: backup antenna
++ bit 1: time zone change within 1h
++ bit 3,2: TZ 01=MEST, 10=MET
++ bit 4: leap second will be
++ added within one hour
++ bits 5-7: Zero
++ Bit 6: time in backup mode, units of 5 minutes (unused here)
++
++
++ ---
++ Trimble SV6: 127.127.8.32-35
++ Trimble SV6: needs poll, ascii timecode, start='>', end='<',
++ query='>QTM<', eol='<'
++
++ Trimble SV6 is a GPS receiver with PPS output. It needs to be polled.
++ It also need a special tty mode setup (EOL='<').
++
++ TTY setup is:
++ CFLAG (B4800|CS8|CREAD)
++ IFLAG (BRKINT|IGNPAR|ISTRIP|ICRNL|IXON)
++ OFLAG (OPOST|ONLCR)
++ LFLAG (ICANON|ECHOK)
++
++ Special flags are:
++ PARSE_F_PPSPPS - use CIOGETEV for PPS time stamping
++ PARSE_F_PPSONSECOND - the time code is not related to
++ the PPS pulse (so use the time code
++ only for the second epoch)
++
++ Timecode
++ 0000000000111111111122222222223333333 / char
++ 0123456789012345678901234567890123456 \ posn
++ >RTMhhmmssdddDDMMYYYYoodnnvrrrrr;*xx< Actual
++ ----33445566600112222BB7__-_____--99- Parse
++ >RTM 1 ;* <", Check
++
++ ---
++ ELV DCF7000: 127.127.8.12-15
++ ELV DCF7000: end='\r', pattern=" - - - - - - - \r"
++
++ The ELV DCF7000 is a cheap DCF77 receiver sending each second
++ a time code (though not very precise!) delimited by '`r'
++
++ Timecode
++ YY-MM-DD-HH-MM-SS-FF\r
++
++ FF&0x1 - DST
++ FF&0x2 - DST switch warning
++ FF&0x4 - unsynchronised
++
+diff -c parse/parsesolaris.c:1.1.1.5 parse/parsesolaris.c:3.11
+*** parse/parsesolaris.c:1.1.1.5 Wed Feb 2 18:14:49 1994
+--- parse/parsesolaris.c Wed Feb 2 18:14:49 1994
+***************
+*** 65,71 ****
+ {
+ "parse", /* module name */
+ &parseinfo, /* module information */
+! 0, /* not clean yet */
+ /* lock ptr */
+ };
+
+--- 65,71 ----
+ {
+ "parse", /* module name */
+ &parseinfo, /* module information */
+! D_NEW, /* not clean yet */
+ /* lock ptr */
+ };
+
+diff -c scripts/support/bin/monl:1.1.1.1 scripts/support/bin/monl:1.2
+*** scripts/support/bin/monl:1.1.1.1 Wed Feb 2 18:16:01 1994
+--- scripts/support/bin/monl Wed Feb 2 18:16:01 1994
+***************
+*** 143,149 ****
+ {
+ chop;
+ split;
+! ($host, $count, $mode, $version, $lasttime, $firsttime) = (@_[$[, $[+2 .. $[+6]);
+
+ $Seen{$host, $mode} = 1;
+
+--- 143,150 ----
+ {
+ chop;
+ split;
+! ($host, $count, $mode, $version, $lasttime, $firsttime) =
+! (@_[$[, $[+2 .. $[+4, $#_-1,$#_]);
+
+ $Seen{$host, $mode} = 1;
+
+diff -c util/tickadj.c:1.1.1.16 util/tickadj.c:3.17
+*** util/tickadj.c:1.1.1.16 Wed Feb 2 18:16:23 1994
+--- util/tickadj.c Wed Feb 2 18:16:23 1994
+***************
+*** 1,4 ****
+! /* tickadj.c,v 3.1 1993/07/06 01:11:05 jbj Exp
+ * tickadj - read, and possibly modify, the kernel `tick' and
+ * `tickadj' variables, as well as `dosynctodr'. Note that
+ * this operates on the running kernel only. I'd like to be
+--- 1,4 ----
+! /*
+ * tickadj - read, and possibly modify, the kernel `tick' and
+ * `tickadj' variables, as well as `dosynctodr'. Note that
+ * this operates on the running kernel only. I'd like to be
+***************
+*** 6,11 ****
+--- 6,46 ----
+ * mastered this yet.
+ */
+ #include <stdio.h>
++
++ #ifdef SYS_LINUX
++ #include <sys/timex.h>
++
++ struct timex txc;
++
++ int
++ main(int argc, char ** argv)
++ {
++ if (argc > 2)
++ {
++ fprintf(stderr, "Usage: %s [tick_value]\n", argv[0]);
++ exit(-1);
++ }
++ else if (argc == 2)
++ {
++ if ( (txc.tick = atoi(argv[1])) < 1 )
++ {
++ fprintf(stderr, "Silly value for tick: %s\n", argv[1]);
++ exit(-1);
++ }
++ txc.mode = ADJ_TICK;
++ }
++ else
++ txc.mode = 0;
++
++ if (__adjtimex(&txc) < 0)
++ perror("adjtimex");
++ else
++ printf("tick = %d\n", txc.tick);
++
++ return(0);
++ }
++ #else /* not Linux... kmem tweaking: */
++
+ #include <sys/types.h>
+ #include <sys/file.h>
+ #include <sys/stat.h>
+***************
+*** 513,515 ****
+--- 548,551 ----
+ exit(1);
+ }
+ }
++ #endif /* not Linux */
+diff -c xntpd/ntp_config.c:1.1.1.19 xntpd/ntp_config.c:3.24
+*** xntpd/ntp_config.c:1.1.1.19 Wed Feb 2 18:16:36 1994
+--- xntpd/ntp_config.c Wed Feb 2 18:16:37 1994
+***************
+*** 58,63 ****
+--- 58,64 ----
+ * statsdir /var/NTP/
+ * filegen peerstats [ file peerstats ] [ type day ] [ link ]
+ * resolver /path/progname
++ * netlimit integer
+ *
+ * And then some. See the manual page.
+ */
+***************
+*** 94,99 ****
+--- 95,102 ----
+ #define CONFIG_PIDFILE 25
+ #define CONFIG_LOGFILE 26
+ #define CONFIG_SETVAR 27
++ #define CONFIG_CLIENTLIMIT 28
++ #define CONFIG_CLIENTPERIOD 29
+
+ #define CONF_MOD_VERSION 1
+ #define CONF_MOD_KEY 2
+***************
+*** 114,119 ****
+--- 117,123 ----
+ #define CONF_RES_NOTRAP 8
+ #define CONF_RES_LPTRAP 9
+ #define CONF_RES_NTPPORT 10
++ #define CONF_RES_LIMITED 11
+
+ #define CONF_TRAP_PORT 1
+ #define CONF_TRAP_INTERFACE 2
+***************
+*** 179,184 ****
+--- 183,190 ----
+ { "pidfile", CONFIG_PIDFILE },
+ { "logfile", CONFIG_LOGFILE },
+ { "setvar", CONFIG_SETVAR },
++ { "clientlimit", CONFIG_CLIENTLIMIT },
++ { "clientperiod", CONFIG_CLIENTPERIOD },
+ { "", CONFIG_UNKNOWN }
+ };
+
+***************
+*** 217,222 ****
+--- 223,229 ----
+ { "notrap", CONF_RES_NOTRAP },
+ { "lowpriotrap", CONF_RES_LPTRAP },
+ { "ntpport", CONF_RES_NTPPORT },
++ { "limited", CONF_RES_LIMITED },
+ { "", CONFIG_UNKNOWN }
+ };
+
+***************
+*** 817,825 ****
+ errflg = 0;
+ if (ntokens >= 2) {
+ if (STREQ(tokens[1], "yes"))
+! mon_start();
+ else if (STREQ(tokens[1], "no"))
+! mon_stop();
+ else
+ errflg++;
+ } else {
+--- 824,832 ----
+ errflg = 0;
+ if (ntokens >= 2) {
+ if (STREQ(tokens[1], "yes"))
+! mon_start(MON_ON);
+ else if (STREQ(tokens[1], "no"))
+! mon_stop(MON_ON);
+ else
+ errflg++;
+ } else {
+***************
+*** 965,970 ****
+--- 972,981 ----
+ peerkey |= RESM_NTPONLY;
+ break;
+
++ case CONF_RES_LIMITED:
++ peerversion |= RES_LIMITED;
++ break;
++
+ case CONFIG_UNKNOWN:
+ errflg++;
+ break;
+***************
+*** 1413,1418 ****
+--- 1424,1483 ----
+ set_sys_var(tokens[1], strlen(tokens[1])+1, RW |
+ ((((ntokens > 2) && !strcmp(tokens[2], "default"))) ? DEF : 0));
+ }
++ break;
++
++ case CONFIG_CLIENTLIMIT:
++ if (ntokens < 2)
++ {
++ syslog(LOG_ERR,
++ "no value for clientlimit command - line ignored");
++ }
++ else
++ {
++ U_LONG i;
++ if (!atouint(tokens[1], &i) || !i)
++ {
++ syslog(LOG_ERR,
++ "illegal value for clientlimit command - line ignored");
++ }
++ else
++ {
++ extern U_LONG client_limit;
++ char bp[80];
++
++ sprintf(bp, "client_limit=%d", i);
++ set_sys_var(bp, strlen(bp)+1, RO);
++
++ client_limit = i;
++ }
++ }
++ break;
++
++ case CONFIG_CLIENTPERIOD:
++ if (ntokens < 2)
++ {
++ syslog(LOG_ERR,
++ "no value for clientperiod command - line ignored");
++ }
++ else
++ {
++ U_LONG i;
++ if (!atouint(tokens[1], &i) || i < 64)
++ {
++ syslog(LOG_ERR,
++ "illegal value for clientperiod command - line ignored");
++ }
++ else
++ {
++ extern U_LONG client_limit_period;
++ char bp[80];
++
++ sprintf(bp, "client_limit_period=%d", i);
++ set_sys_var(bp, strlen(bp)+1, RO);
++
++ client_limit_period = i;
++ }
++ }
+ break;
+ }
+ }
+diff -c xntpd/ntp_monitor.c:1.1.1.10 xntpd/ntp_monitor.c:3.9
+*** xntpd/ntp_monitor.c:1.1.1.10 Wed Feb 2 18:16:48 1994
+--- xntpd/ntp_monitor.c Wed Feb 2 18:16:48 1994
+***************
+*** 58,64 ****
+ static struct mon_data *mon_hash; /* Pointer to array of hash buckets */
+ static int *mon_hash_count; /* Point to hash count stats keeper */
+ struct mon_data mon_mru_list;
+!
+ /*
+ * List of free structures structures, and counters of free and total
+ * structures. The free structures are linked with the hash_next field.
+--- 58,64 ----
+ static struct mon_data *mon_hash; /* Pointer to array of hash buckets */
+ static int *mon_hash_count; /* Point to hash count stats keeper */
+ struct mon_data mon_mru_list;
+! struct mon_data mon_fifo_list;
+ /*
+ * List of free structures structures, and counters of free and total
+ * structures. The free structures are linked with the hash_next field.
+***************
+*** 93,99 ****
+ * Don't do much of anything here. We don't allocate memory
+ * until someone explicitly starts us.
+ */
+! mon_enabled = 0;
+ mon_have_memory = 0;
+
+ mon_free_mem = 0;
+--- 93,99 ----
+ * Don't do much of anything here. We don't allocate memory
+ * until someone explicitly starts us.
+ */
+! mon_enabled = MON_OFF;
+ mon_have_memory = 0;
+
+ mon_free_mem = 0;
+***************
+*** 103,108 ****
+--- 103,109 ----
+ mon_hash = 0;
+ mon_hash_count = 0;
+ memset((char *)&mon_mru_list, 0, sizeof mon_mru_list);
++ memset((char *)&mon_fifo_list, 0, sizeof mon_fifo_list);
+ }
+
+
+***************
+*** 110,122 ****
+ * mon_start - start up the monitoring software
+ */
+ void
+! mon_start()
+ {
+ register struct mon_data *md;
+ register int i;
+
+! if (mon_enabled)
+ return;
+
+ if (!mon_have_memory) {
+ mon_hash = (struct mon_data *)
+--- 111,128 ----
+ * mon_start - start up the monitoring software
+ */
+ void
+! mon_start(mode)
+! int mode;
+ {
+ register struct mon_data *md;
+ register int i;
+
+! if (mon_enabled != MON_OFF) {
+! mon_enabled |= mode;
+ return;
++ }
++ if (mode == MON_OFF)
++ return; /* Ooops.. */
+
+ if (!mon_have_memory) {
+ mon_hash = (struct mon_data *)
+***************
+*** 142,148 ****
+ mon_mru_list.mru_next = &mon_mru_list;
+ mon_mru_list.mru_prev = &mon_mru_list;
+
+! mon_enabled = 1;
+ }
+
+
+--- 148,157 ----
+ mon_mru_list.mru_next = &mon_mru_list;
+ mon_mru_list.mru_prev = &mon_mru_list;
+
+! mon_fifo_list.fifo_next = &mon_fifo_list;
+! mon_fifo_list.fifo_prev = &mon_fifo_list;
+!
+! mon_enabled = mode;
+ }
+
+
+***************
+*** 150,161 ****
+ * mon_stop - stop the monitoring software
+ */
+ void
+! mon_stop()
+ {
+ register struct mon_data *md;
+ register int i;
+
+! if (!mon_enabled)
+ return;
+
+ /*
+--- 159,177 ----
+ * mon_stop - stop the monitoring software
+ */
+ void
+! mon_stop(mode)
+! int mode;
+ {
+ register struct mon_data *md;
+ register int i;
+
+! if (mon_enabled == MON_OFF)
+! return;
+! if ((mon_enabled & mode) == 0 || mode == MON_OFF)
+! return;
+!
+! mon_enabled &= ~mode;
+! if (mon_enabled != MON_OFF)
+ return;
+
+ /*
+***************
+*** 176,182 ****
+ mon_mru_list.mru_next = &mon_mru_list;
+ mon_mru_list.mru_prev = &mon_mru_list;
+
+! mon_enabled = 0;
+ }
+
+
+--- 192,199 ----
+ mon_mru_list.mru_next = &mon_mru_list;
+ mon_mru_list.mru_prev = &mon_mru_list;
+
+! mon_fifo_list.fifo_next = &mon_fifo_list;
+! mon_fifo_list.fifo_prev = &mon_fifo_list;
+ }
+
+
+***************
+*** 194,200 ****
+ register int mode;
+ register struct mon_data *mdhash;
+
+! if (!mon_enabled)
+ return;
+
+ pkt = &rbufp->recv_pkt;
+--- 211,217 ----
+ register int mode;
+ register struct mon_data *mdhash;
+
+! if (mon_enabled == MON_OFF)
+ return;
+
+ pkt = &rbufp->recv_pkt;
+***************
+*** 220,225 ****
+--- 237,243 ----
+ md->mru_prev = &mon_mru_list;
+ mon_mru_list.mru_next->mru_prev = md;
+ mon_mru_list.mru_next = md;
++
+ return;
+ }
+ md = md->hash_next;
+***************
+*** 240,245 ****
+--- 258,269 ----
+ md->hash_next->hash_prev = md->hash_prev;
+ md->hash_prev->hash_next = md->hash_next;
+ *(mon_hash_count + MON_HASH(md->rmtadr)) -= 1;
++ /*
++ * Get it from FIFO list
++ */
++ md->fifo_prev->fifo_next = md->fifo_next;
++ md->fifo_next->fifo_prev = md->fifo_prev;
++
+ } else {
+ if (mon_free_mem == 0)
+ mon_getmoremem();
+***************
+*** 252,257 ****
+--- 276,282 ----
+ * Got one, initialize it
+ */
+ md->lasttime = md->firsttime = current_time;
++ md->lastdrop = 0;
+ md->count = 1;
+ md->rmtadr = netnum;
+ md->rmtport = NSRCPORT(&rbufp->recv_srcadr);
+***************
+*** 260,266 ****
+
+ /*
+ * Shuffle him into the hash table, inserting him at the
+! * end. Also put him on top of the MRU list.
+ */
+ mdhash = mon_hash + MON_HASH(netnum);
+ md->hash_next = mdhash;
+--- 285,292 ----
+
+ /*
+ * Shuffle him into the hash table, inserting him at the
+! * end. Also put him on top of the MRU list
+! * and at bottom of FIFO list
+ */
+ mdhash = mon_hash + MON_HASH(netnum);
+ md->hash_next = mdhash;
+***************
+*** 273,278 ****
+--- 299,309 ----
+ md->mru_prev = &mon_mru_list;
+ mon_mru_list.mru_next->mru_prev = md;
+ mon_mru_list.mru_next = md;
++
++ md->fifo_prev = mon_fifo_list.fifo_prev;
++ md->fifo_next = &mon_fifo_list;
++ mon_fifo_list.fifo_prev->fifo_next = md;
++ mon_fifo_list.fifo_prev = md;
+ }
+
+
+diff -c xntpd/ntp_proto.c:1.1.1.19 xntpd/ntp_proto.c:3.21
+*** xntpd/ntp_proto.c:1.1.1.19 Wed Feb 2 18:16:51 1994
+--- xntpd/ntp_proto.c Wed Feb 2 18:16:52 1994
+***************
+*** 49,54 ****
+--- 49,55 ----
+ U_LONG sys_processed; /* packets processed */
+ U_LONG sys_badauth; /* packets dropped because of authorization */
+ U_LONG sys_wanderhold; /* sys_peer held to prevent wandering */
++ U_LONG sys_limitrejected; /* pkts rejected due toclient count per net */
+
+ /*
+ * Imported from ntp_timer.c
+***************
+*** 373,378 ****
+--- 374,394 ----
+ return;
+
+ /*
++ * See if we only accept limited number of clients
++ * from the net this guy is from.
++ * Note: the flag is determined dynamically within restrictions()
++ */
++ if (restrict & RES_LIMITED) {
++ extern U_LONG client_limit;
++
++ sys_limitrejected++;
++ syslog(LOG_NOTICE,
++ "rejected mode %d request from %s - per net client limit (%d) exceeded",
++ PKT_MODE(pkt->li_vn_mode),
++ ntoa(&rbufp->recv_srcadr), client_limit);
++ return;
++ }
++ /*
+ * Dump anything with a putrid stratum. These will most likely
+ * come from someone trying to poll us with ntpdc.
+ */
+***************
+*** 2165,2168 ****
+--- 2181,2185 ----
+ sys_badauth = 0;
+ sys_wanderhold = 0;
+ sys_stattime = current_time;
++ sys_limitrejected = 0;
+ }
+diff -c xntpd/ntp_request.c:1.1.1.14 xntpd/ntp_request.c:3.15
+*** xntpd/ntp_request.c:1.1.1.14 Wed Feb 2 18:16:55 1994
+--- xntpd/ntp_request.c Wed Feb 2 18:16:55 1994
+***************
+*** 916,921 ****
+--- 916,922 ----
+ extern U_LONG sys_processed;
+ extern U_LONG sys_badauth;
+ extern U_LONG sys_wanderhold;
++ extern U_LONG sys_limitrejected;
+
+ ss = (struct info_sys_stats *)prepare_pkt(srcadr, inter, inpkt,
+ sizeof(struct info_sys_stats));
+***************
+*** 930,936 ****
+ ss->processed = htonl(sys_processed);
+ ss->badauth = htonl(sys_badauth);
+ ss->wanderhold = htonl(sys_wanderhold);
+!
+ (void) more_pkt();
+ flush_pkt();
+ }
+--- 931,937 ----
+ ss->processed = htonl(sys_processed);
+ ss->badauth = htonl(sys_badauth);
+ ss->wanderhold = htonl(sys_wanderhold);
+! ss->limitrejected = htonl(sys_limitrejected);
+ (void) more_pkt();
+ flush_pkt();
+ }
+***************
+*** 1311,1317 ****
+ struct interface *inter;
+ struct req_pkt *inpkt;
+ {
+! mon_start();
+ req_ack(srcadr, inter, inpkt, INFO_OKAY);
+ }
+
+--- 1312,1318 ----
+ struct interface *inter;
+ struct req_pkt *inpkt;
+ {
+! mon_start(MON_ON);
+ req_ack(srcadr, inter, inpkt, INFO_OKAY);
+ }
+
+***************
+*** 1325,1331 ****
+ struct interface *inter;
+ struct req_pkt *inpkt;
+ {
+! mon_stop();
+ req_ack(srcadr, inter, inpkt, INFO_OKAY);
+ }
+
+--- 1326,1332 ----
+ struct interface *inter;
+ struct req_pkt *inpkt;
+ {
+! mon_stop(MON_ON);
+ req_ack(srcadr, inter, inpkt, INFO_OKAY);
+ }
+
+***************
+*** 1497,1502 ****
+--- 1498,1507 ----
+ md = md->mru_next) {
+ im->lasttime = htonl(current_time - md->lasttime);
+ im->firsttime = htonl(current_time - md->firsttime);
++ if (md->lastdrop)
++ im->lastdrop = htonl(current_time - md->lastdrop);
++ else
++ im->lastdrop = 0;
+ im->count = htonl(md->count);
+ im->addr = md->rmtadr;
+ im->port = md->rmtport;
+diff -c xntpd/ntp_restrict.c:1.1.1.10 xntpd/ntp_restrict.c:3.10
+*** xntpd/ntp_restrict.c:1.1.1.10 Wed Feb 2 18:16:57 1994
+--- xntpd/ntp_restrict.c Wed Feb 2 18:16:57 1994
+***************
+*** 1,4 ****
+! /* ntp_restrict.c,v 3.1 1993/07/06 01:11:28 jbj Exp
+ * ntp_restrict.c - find out what restrictions this host is running under
+ */
+ #include <stdio.h>
+--- 1,4 ----
+! /*
+ * ntp_restrict.c - find out what restrictions this host is running under
+ */
+ #include <stdio.h>
+***************
+*** 60,65 ****
+--- 60,80 ----
+ U_LONG res_timereset;
+
+ /*
++ * Parameters of the RES_LIMITED restriction option.
++ * client_limit is the number of hosts allowed per source net
++ * client_limit_period is the number of seconds after which an entry
++ * is no longer considered for client limit determination
++ */
++ U_LONG client_limit;
++ U_LONG client_limit_period;
++ /*
++ * count number of restriction entries referring to RES_LIMITED
++ * controls activation/deactivation of monitoring
++ * (with respect ro RES_LIMITED control)
++ */
++ U_LONG res_limited_refcnt;
++
++ /*
+ * Our initial allocation of list entries.
+ */
+ static struct restrictlist resinit[INITRESLIST];
+***************
+*** 70,81 ****
+--- 85,102 ----
+ extern U_LONG current_time;
+
+ /*
++ * debug flag
++ */
++ extern int debug;
++
++ /*
+ * init_restrict - initialize the restriction data structures
+ */
+ void
+ init_restrict()
+ {
+ register int i;
++ char bp[80];
+
+ /*
+ * Zero the list and put all but one on the free list
+***************
+*** 108,113 ****
+--- 129,146 ----
+ res_found = 0;
+ res_not_found = 0;
+ res_timereset = 0;
++
++ /*
++ * set default values for RES_LIMIT functionality
++ */
++ client_limit = 3;
++ client_limit_period = 3600;
++ res_limited_refcnt = 0;
++
++ sprintf(bp, "client_limit=%d", client_limit);
++ set_sys_var(bp, strlen(bp)+1, RO);
++ sprintf(bp, "client_limit_period=%d", client_limit_period);
++ set_sys_var(bp, strlen(bp)+1, RO);
+ }
+
+
+***************
+*** 150,155 ****
+--- 183,302 ----
+ else
+ res_found++;
+
++ /*
++ * The following implements limiting the number of clients
++ * accepted from a given network. The notion of "same network"
++ * is determined by the mask and addr fields of the restrict
++ * list entry. The monitor mechanism has to be enabled for
++ * collecting info on current clients.
++ *
++ * The policy is as follows:
++ * - take the list of clients recorded
++ * from the given "network" seen within the last
++ * client_limit_period seconds
++ * - if there are at most client_limit entries:
++ * --> access allowed
++ * - otherwise sort by time first seen
++ * - current client among the first client_limit seen
++ * hosts?
++ * if yes: access allowed
++ * else: eccess denied
++ */
++ if (match->flags & RES_LIMITED) {
++ int lcnt;
++ struct mon_data *md, *this_client;
++ extern int mon_enabled;
++ extern struct mon_data mon_fifo_list, mon_mru_list;
++
++ #ifdef DEBUG
++ if (debug > 2)
++ printf("limited clients check: %d clients, period %d seconds, net is 0x%X\n",
++ client_limit, client_limit_period,
++ netof(hostaddr));
++ #endif /*DEBUG*/
++ if (mon_enabled == MON_OFF) {
++ #ifdef DEBUG
++ if (debug > 4)
++ printf("no limit - monitoring is off\n");
++ #endif
++ return (int)(match->flags & ~RES_LIMITED);
++ }
++
++ /*
++ * How nice, MRU list provides our current client as the
++ * first entry in the list.
++ * Monitoring was verified to be active above, thus we
++ * know an entry for our client must exist, or some
++ * brain dead set the memory limit for mon entries to ZERO!!!
++ */
++ this_client = mon_mru_list.mru_next;
++
++ for (md = mon_fifo_list.fifo_next,lcnt = 0;
++ md != &mon_fifo_list;
++ md = md->fifo_next) {
++ if ((current_time - md->lasttime)
++ > client_limit_period) {
++ #ifdef DEBUG
++ if (debug > 5)
++ printf("checking: %s: ignore: too old: %d\n",
++ numtoa(md->rmtadr),
++ current_time - md->lasttime);
++ #endif
++ continue;
++ }
++ if (md->mode == MODE_BROADCAST ||
++ md->mode == MODE_CONTROL ||
++ md->mode == MODE_PRIVATE) {
++ #ifdef DEBUG
++ if (debug > 5)
++ printf("checking: %s: ignore mode %d\n",
++ numtoa(md->rmtadr),
++ md->mode);
++ #endif
++ continue;
++ }
++ if (netof(md->rmtadr) !=
++ netof(hostaddr)) {
++ #ifdef DEBUG
++ if (debug > 5)
++ printf("checking: %s: different net 0x%X\n",
++ numtoa(md->rmtadr),
++ netof(md->rmtadr));
++ #endif
++ continue;
++ }
++ lcnt++;
++ if (lcnt > client_limit ||
++ md->rmtadr == hostaddr) {
++ #ifdef DEBUG
++ if (debug > 5)
++ printf("considering %s: found host\n",
++ numtoa(md->rmtadr));
++ #endif
++ break;
++ }
++ #ifdef DEBUG
++ else {
++ if (debug > 5)
++ printf("considering %s: same net\n",
++ numtoa(md->rmtadr));
++ }
++ #endif
++
++ }
++ #ifdef DEBUG
++ if (debug > 4)
++ printf("this one is rank %d in list, limit is %d: %s\n",
++ lcnt, client_limit,
++ (lcnt <= client_limit) ? "ALLOW" : "REJECT");
++ #endif
++ if (lcnt <= client_limit) {
++ this_client->lastdrop = 0;
++ return (int)(match->flags & ~RES_LIMITED);
++ } else {
++ this_client->lastdrop = current_time;
++ }
++ }
+ return (int)match->flags;
+ }
+
+***************
+*** 257,262 ****
+--- 404,413 ----
+ rlprev->next = rl;
+ restrictcount++;
+ }
++ if ((rl->flags ^ (u_short)flags) & RES_LIMITED) {
++ res_limited_refcnt++;
++ mon_start(MON_RES); /* ensure data gets collected */
++ }
+ rl->flags |= (u_short)flags;
+ break;
+
+***************
+*** 265,272 ****
+ * Remove some bits from the flags. If we didn't
+ * find this one, just return.
+ */
+! if (rl != 0)
+ rl->flags &= (u_short)~flags;
+ break;
+
+ case RESTRICT_REMOVE:
+--- 416,429 ----
+ * Remove some bits from the flags. If we didn't
+ * find this one, just return.
+ */
+! if (rl != 0) {
+! if ((rl->flags ^ (u_short)flags) & RES_LIMITED) {
+! res_limited_refcnt--;
+! if (res_limited_refcnt == 0)
+! mon_stop(MON_RES);
+! }
+ rl->flags &= (u_short)~flags;
++ }
+ break;
+
+ case RESTRICT_REMOVE:
+***************
+*** 280,285 ****
+--- 437,447 ----
+ && !(rl->mflags & RESM_INTERFACE)) {
+ rlprev->next = rl->next;
+ restrictcount--;
++ if (rl->flags & RES_LIMITED) {
++ res_limited_refcnt--;
++ if (res_limited_refcnt == 0)
++ mon_stop(MON_RES);
++ }
+ memset((char *)rl, 0, sizeof(struct restrictlist));
+
+ rl->next = resfree;
+diff -c xntpd/ntp_unixclock.c:1.1.1.27 xntpd/ntp_unixclock.c:3.29
+*** xntpd/ntp_unixclock.c:1.1.1.27 Wed Feb 2 18:17:00 1994
+--- xntpd/ntp_unixclock.c Wed Feb 2 18:17:01 1994
+***************
+*** 556,568 ****
+ #endif /* SOLARIS */
+
+ #ifdef SYS_LINUX
+! /* XXX should look this up somewhere ! */
+ static void
+ clock_parms(tickadj, tick)
+ U_LONG *tickadj;
+ U_LONG *tick;
+ {
+! *tickadj = (U_LONG)1;
+! *tick = (U_LONG)10000;
+ }
+ #endif /* SYS_LINUX */
+--- 556,573 ----
+ #endif /* SOLARIS */
+
+ #ifdef SYS_LINUX
+! #include <sys/timex.h>
+ static void
+ clock_parms(tickadj, tick)
+ U_LONG *tickadj;
+ U_LONG *tick;
+ {
+! struct timex txc;
+!
+! txc.mode = 0;
+! __adjtimex(&txc);
+!
+! *tickadj = (U_LONG)1; /* our adjtime is accurate */
+! *tick = (U_LONG)txc.tick;
+ }
+ #endif /* SYS_LINUX */
+diff -c xntpdc/ntpdc_ops.c:1.1.1.12 xntpdc/ntpdc_ops.c:3.16
+*** xntpdc/ntpdc_ops.c:1.1.1.12 Wed Feb 2 18:17:35 1994
+--- xntpdc/ntpdc_ops.c Wed Feb 2 18:17:36 1994
+***************
+*** 846,853 ****
+ if (!check1item(items, fp))
+ return;
+
+! if (!checkitemsize(itemsize, sizeof(struct info_sys_stats)))
+ return;
+
+ (void) fprintf(fp, "system uptime: %d\n",
+ ntohl(ss->timeup));
+--- 846,857 ----
+ if (!check1item(items, fp))
+ return;
+
+! if (itemsize != sizeof(struct info_sys_stats) &&
+! itemsize != sizeof(struct old_info_sys_stats)) {
+! /* issue warning according to new structure size */
+! checkitemsize(itemsize, sizeof(struct info_sys_stats));
+ return;
++ }
+
+ (void) fprintf(fp, "system uptime: %d\n",
+ ntohl(ss->timeup));
+***************
+*** 869,874 ****
+--- 873,883 ----
+ ntohl(ss->badauth));
+ (void) fprintf(fp, "wander hold downs: %d\n",
+ ntohl(ss->wanderhold));
++ if (itemsize != sizeof(struct info_sys_stats))
++ return;
++
++ (void) fprintf(fp, "limitation rejects: %d\n",
++ ntohl(ss->limitrejected));
+ }
+
+
+***************
+*** 1243,1248 ****
+--- 1252,1258 ----
+ { "nopeer", RES_NOPEER },
+ { "notrap", RES_NOTRAP },
+ { "lptrap", RES_LPTRAP },
++ { "limited", RES_LIMITED },
+ { "", 0 }
+ };
+
+***************
+*** 1463,1468 ****
+--- 1473,1479 ----
+ FILE *fp;
+ {
+ struct info_monitor *ml;
++ struct old_info_monitor *oml;
+ int items;
+ int itemsize;
+ int res;
+***************
+*** 1476,1498 ****
+ if (!checkitems(items, fp))
+ return;
+
+! if (!checkitemsize(itemsize, sizeof(struct info_monitor)))
+! return;
+
+! (void) fprintf(fp,
+! " address port count mode version lasttime firsttime\n");
+! (void) fprintf(fp,
+! "=====================================================================\n");
+! while (items > 0) {
+! (void) fprintf(fp, "%-20.20s %5d %9d %4d %3d %9u %9u\n",
+! nntohost(ml->addr),
+! ntohs(ml->port),
+! ntohl(ml->count),
+! ml->mode, ml->version,
+! ntohl(ml->lasttime),
+! ntohl(ml->firsttime));
+! ml++;
+! items--;
+ }
+ }
+
+--- 1487,1535 ----
+ if (!checkitems(items, fp))
+ return;
+
+! if (itemsize == sizeof(struct info_monitor)) {
+
+! (void) fprintf(fp,
+! " address port count mode version lastdrop lasttime firsttime\n");
+! (void) fprintf(fp,
+! "===============================================================================\n");
+! while (items > 0) {
+! (void) fprintf(fp, "%-20.20s %5d %9d %4d %3d %9u %9u %9u\n",
+! nntohost(ml->addr),
+! ntohs(ml->port),
+! ntohl(ml->count),
+! ml->mode,
+! ml->version,
+! ntohl(ml->lastdrop),
+! ntohl(ml->lasttime),
+! ntohl(ml->firsttime));
+! ml++;
+! items--;
+! }
+! } else {
+! if (itemsize != sizeof(struct old_info_monitor)) {
+! /* issue warning according to new info_monitor size */
+! checkitemsize(itemsize, sizeof(struct info_monitor));
+! return;
+! }
+!
+! oml = (struct old_info_monitor *)ml;
+! (void) fprintf(fp,
+! " address port count mode version lasttime firsttime\n");
+! (void) fprintf(fp,
+! "======================================================================\n");
+! while (items > 0) {
+! (void) fprintf(fp, "%-20.20s %5d %9d %4d %3d %9u %9u\n",
+! nntohost(oml->addr),
+! ntohs(oml->port),
+! ntohl(oml->count),
+! oml->mode,
+! oml->version,
+! ntohl(oml->lasttime),
+! ntohl(oml->firsttime));
+! oml++;
+! items--;
+! }
+ }
+ }
+
diff --git a/usr.sbin/xntpd/patches/patch.11 b/usr.sbin/xntpd/patches/patch.11
new file mode 100644
index 0000000..8554d88
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.11
@@ -0,0 +1,536 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa05908; 9 Feb 94 18:18 EST
+Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa21398;
+ 9 Feb 94 18:13 EST
+Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
+ id AA29809 (5.65c-6/7.3v-FAU); Thu, 10 Feb 1994 00:12:50 +0100
+Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
+ id AA11633 (5.65c-6/7.3m-FAU); Thu, 10 Feb 1994 00:12:46 +0100
+From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
+Message-Id: <199402092312.AA11633@faui43.informatik.uni-erlangen.de>
+Subject: .zz Patches
+To: Mills@udel.edu
+Date: Thu, 10 Feb 94 0:12:41 MET
+Cc: Frank.Kardel@informatik.uni-erlangen.de,
+ Paul_Vixie@corpmis.sjc.hw.sony.com, Piete.Brooks@cl.cam.ac.uk
+X-Mailer: ELM [version 2.3 PL11]
+
+Guys,
+
+Ok, here are some patches (including some WWVB cleanup 8-) relative
+to the zz version. The KERNEL stuff in ntp_timex.h must still
+be resolved.
+
+diff -c Makefile:1.1.1.11 Makefile:3.46
+*** Makefile:1.1.1.11 Wed Feb 9 23:54:57 1994
+--- Makefile Wed Feb 9 23:54:57 1994
+***************
+*** 162,168 ****
+ FRC:
+
+ savebin:
+! @test -d bin || mkdir bin
+ @echo
+ @echo '### saving $(TARGETS) $(OPTTARG) in bin'
+ -@for f in $(TARGETS) $(OPTTARG); \
+--- 162,168 ----
+ FRC:
+
+ savebin:
+! -@test -d bin || mkdir bin
+ @echo
+ @echo '### saving $(TARGETS) $(OPTTARG) in bin'
+ -@for f in $(TARGETS) $(OPTTARG); \
+diff -c include/ntp_machine.h:1.1.1.11 include/ntp_machine.h:1.27
+*** include/ntp_machine.h:1.1.1.11 Wed Feb 9 23:56:27 1994
+--- include/ntp_machine.h Wed Feb 9 23:56:27 1994
+***************
+*** 274,280 ****
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/Ultrix"
+ #endif
+- #define HAVE_TERMIOS
+ #endif
+
+ /*
+--- 274,279 ----
+diff -c lib/systime.c:1.1.1.11 lib/systime.c:1.9
+*** lib/systime.c:1.1.1.11 Wed Feb 9 23:57:45 1994
+--- lib/systime.c Wed Feb 9 23:57:45 1994
+***************
+*** 47,58 ****
+ * We also remember the clock precision we computed from the kernel in
+ * case someone asks us.
+ */
+ LONG adj_precision; /* adj precision in usec (tickadj) */
+ LONG tvu_maxslew; /* maximum adjust doable in 1<<CLOCK_ADJ sec (usec) */
+
+ U_LONG tsf_maxslew; /* same as above, as LONG format */
+
+- LONG sys_clock;
+ l_fp sys_clock_offset; /* correction for current system time */
+
+ /*
+--- 47,59 ----
+ * We also remember the clock precision we computed from the kernel in
+ * case someone asks us.
+ */
++ LONG sys_clock;
++
+ LONG adj_precision; /* adj precision in usec (tickadj) */
+ LONG tvu_maxslew; /* maximum adjust doable in 1<<CLOCK_ADJ sec (usec) */
+
+ U_LONG tsf_maxslew; /* same as above, as LONG format */
+
+ l_fp sys_clock_offset; /* correction for current system time */
+
+ /*
+diff -c machines/sunos4.bsd:1.1.1.3 machines/sunos4.bsd:1.3
+*** machines/sunos4.bsd:1.1.1.3 Wed Feb 9 23:58:15 1994
+--- machines/sunos4.bsd Wed Feb 9 23:58:15 1994
+***************
+*** 1,6 ****
+ RANLIB= ranlib
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSYS_SUNOS4
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS= -lkvm
+--- 1,6 ----
+ RANLIB= ranlib
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSYS_SUNOS4 -DHAVE_BSD_TTYS
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS= -lkvm
+diff -c machines/ultrix.bsd:1.1.1.2 machines/ultrix.bsd:1.3
+*** machines/ultrix.bsd:1.1.1.2 Wed Feb 9 23:58:19 1994
+--- machines/ultrix.bsd Wed Feb 9 23:58:19 1994
+***************
+*** 1,6 ****
+ RANLIB= ranlib
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSYS_ULTRIX
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+--- 1,6 ----
+ RANLIB= ranlib
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSYS_ULTRIX -DHAVE_TERMIOS
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+diff -c machines/ultrix.posix:1.1.1.2 machines/ultrix.posix:1.3
+*** machines/ultrix.posix:1.1.1.2 Wed Feb 9 23:58:20 1994
+--- machines/ultrix.posix Wed Feb 9 23:58:20 1994
+***************
+*** 1,6 ****
+ RANLIB= ranlib
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSYS_ULTRIX -DNTP_POSIX_SOURCE -DHAVE_SIGNALED_IO
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+--- 1,6 ----
+ RANLIB= ranlib
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSYS_ULTRIX -DNTP_POSIX_SOURCE -DHAVE_SIGNALED_IO -DHAVE_TERMIOS
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+diff -c parse/clk_dcf7000.c:1.1.1.8 parse/clk_dcf7000.c:3.11
+*** parse/clk_dcf7000.c:1.1.1.8 Wed Feb 9 23:58:51 1994
+--- parse/clk_dcf7000.c Wed Feb 9 23:58:51 1994
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_DCF7000)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_dcf7000.c,v 3.10 1994/01/25 19:05:07 kardel Exp
+ *
+! * clk_dcf7000.c,v 3.10 1994/01/25 19:05:07 kardel Exp
+ *
+ * ELV DCF7000 module
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_DCF7000)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_dcf7000.c,v 3.11 1994/02/02 17:45:14 kardel Exp
+ *
+! * clk_dcf7000.c,v 3.11 1994/02/02 17:45:14 kardel Exp
+ *
+ * ELV DCF7000 module
+ *
+***************
+*** 121,126 ****
+--- 121,129 ----
+ * History:
+ *
+ * clk_dcf7000.c,v
++ * Revision 3.11 1994/02/02 17:45:14 kardel
++ * rcs ids fixed
++ *
+ * Revision 3.6 1993/10/09 15:01:27 kardel
+ * file structure unified
+ *
+diff -c parse/clk_meinberg.c:1.1.1.8 parse/clk_meinberg.c:3.13
+*** parse/clk_meinberg.c:1.1.1.8 Wed Feb 9 23:58:53 1994
+--- parse/clk_meinberg.c Wed Feb 9 23:58:53 1994
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_MEINBERG)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_meinberg.c,v 3.11 1994/01/25 19:05:10 kardel Exp
+ *
+! * clk_meinberg.c,v 3.11 1994/01/25 19:05:10 kardel Exp
+ *
+ * Meinberg clock support
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_MEINBERG)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_meinberg.c,v 3.13 1994/02/02 17:45:21 kardel Exp
+ *
+! * clk_meinberg.c,v 3.13 1994/02/02 17:45:21 kardel Exp
+ *
+ * Meinberg clock support
+ *
+***************
+*** 414,419 ****
+--- 414,422 ----
+ * History:
+ *
+ * clk_meinberg.c,v
++ * Revision 3.13 1994/02/02 17:45:21 kardel
++ * rcs ids fixed
++ *
+ * Revision 3.11 1994/01/25 19:05:10 kardel
+ * 94/01/23 reconcilation
+ *
+diff -c parse/clk_rawdcf.c:1.1.1.8 parse/clk_rawdcf.c:3.11
+*** parse/clk_rawdcf.c:1.1.1.8 Wed Feb 9 23:58:54 1994
+--- parse/clk_rawdcf.c Wed Feb 9 23:58:54 1994
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.9 1994/01/25 19:05:12 kardel Exp
+ *
+! * clk_rawdcf.c,v 3.9 1994/01/25 19:05:12 kardel Exp
+ *
+ * Raw DCF77 pulse clock support
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.11 1994/02/02 17:45:23 kardel Exp
+ *
+! * clk_rawdcf.c,v 3.11 1994/02/02 17:45:23 kardel Exp
+ *
+ * Raw DCF77 pulse clock support
+ *
+***************
+*** 529,534 ****
+--- 529,537 ----
+ * History:
+ *
+ * clk_rawdcf.c,v
++ * Revision 3.11 1994/02/02 17:45:23 kardel
++ * rcs ids fixed
++ *
+ * Revision 3.9 1994/01/25 19:05:12 kardel
+ * 94/01/23 reconcilation
+ *
+diff -c parse/clk_schmid.c:1.1.1.8 parse/clk_schmid.c:3.12
+*** parse/clk_schmid.c:1.1.1.8 Wed Feb 9 23:58:55 1994
+--- parse/clk_schmid.c Wed Feb 9 23:58:55 1994
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_SCHMID)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_schmid.c,v 3.10 1994/01/25 19:05:15 kardel Exp
+ *
+! * clk_schmid.c,v 3.10 1994/01/25 19:05:15 kardel Exp
+ *
+ * Schmid clock support
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_SCHMID)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_schmid.c,v 3.12 1994/02/02 17:45:25 kardel Exp
+ *
+! * clk_schmid.c,v 3.12 1994/02/02 17:45:25 kardel Exp
+ *
+ * Schmid clock support
+ *
+***************
+*** 168,173 ****
+--- 168,176 ----
+ * History:
+ *
+ * clk_schmid.c,v
++ * Revision 3.12 1994/02/02 17:45:25 kardel
++ * rcs ids fixed
++ *
+ * Revision 3.10 1994/01/25 19:05:15 kardel
+ * 94/01/23 reconcilation
+ *
+diff -c parse/clk_trimble.c:1.1.1.3 parse/clk_trimble.c:3.9
+*** parse/clk_trimble.c:1.1.1.3 Wed Feb 9 23:58:56 1994
+--- parse/clk_trimble.c Wed Feb 9 23:58:57 1994
+***************
+*** 1,6 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_TRIMSV6)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_trimble.c,v 3.7 1994/01/25 19:05:17 kardel Exp
+ *
+ * Trimble SV6 clock support
+ */
+--- 1,6 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_TRIMSV6)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_trimble.c,v 3.9 1994/02/02 17:45:27 kardel Exp
+ *
+ * Trimble SV6 clock support
+ */
+***************
+*** 106,111 ****
+--- 106,114 ----
+ * History:
+ *
+ * clk_trimble.c,v
++ * Revision 3.9 1994/02/02 17:45:27 kardel
++ * rcs ids fixed
++ *
+ * Revision 3.7 1994/01/25 19:05:17 kardel
+ * 94/01/23 reconcilation
+ *
+diff -c parse/parse.c:1.1.1.8 parse/parse.c:3.21
+*** parse/parse.c:1.1.1.8 Wed Feb 9 23:58:59 1994
+--- parse/parse.c Wed Feb 9 23:59:00 1994
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.19 1994/01/25 19:05:20 kardel Exp
+ *
+! * parse.c,v 3.19 1994/01/25 19:05:20 kardel Exp
+ *
+ * Parser module for reference clock
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.21 1994/02/02 17:45:30 kardel Exp
+ *
+! * parse.c,v 3.21 1994/02/02 17:45:30 kardel Exp
+ *
+ * Parser module for reference clock
+ *
+***************
+*** 1148,1153 ****
+--- 1148,1156 ----
+ * History:
+ *
+ * parse.c,v
++ * Revision 3.21 1994/02/02 17:45:30 kardel
++ * rcs ids fixed
++ *
+ * Revision 3.19 1994/01/25 19:05:20 kardel
+ * 94/01/23 reconcilation
+ *
+diff -c parse/parse_conf.c:1.1.1.8 parse/parse_conf.c:3.15
+*** parse/parse_conf.c:1.1.1.8 Wed Feb 9 23:59:01 1994
+--- parse/parse_conf.c Wed Feb 9 23:59:01 1994
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parse_conf.c,v 3.13 1994/01/25 19:05:23 kardel Exp
+ *
+! * parse_conf.c,v 3.13 1994/01/25 19:05:23 kardel Exp
+ *
+ * Parser configuration module for reference clocks
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parse_conf.c,v 3.15 1994/02/02 17:45:32 kardel Exp
+ *
+! * parse_conf.c,v 3.15 1994/02/02 17:45:32 kardel Exp
+ *
+ * Parser configuration module for reference clocks
+ *
+***************
+*** 81,86 ****
+--- 81,89 ----
+ * History:
+ *
+ * parse_conf.c,v
++ * Revision 3.15 1994/02/02 17:45:32 kardel
++ * rcs ids fixed
++ *
+ * Revision 3.13 1994/01/25 19:05:23 kardel
+ * 94/01/23 reconcilation
+ *
+diff -c parse/parsesolaris.c:1.1.1.6 parse/parsesolaris.c:3.12
+*** parse/parsesolaris.c:1.1.1.6 Wed Feb 9 23:59:02 1994
+--- parse/parsesolaris.c Wed Feb 9 23:59:02 1994
+***************
+*** 1,7 ****
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v 3.9 1994/01/25 19:05:26 kardel Exp
+ *
+! * parsesolaris.c,v 3.9 1994/01/25 19:05:26 kardel Exp
+ *
+ * STREAMS module for reference clocks
+ * (SunOS5.x - not fully tested - buyer beware ! - OS KILLERS may still be
+--- 1,7 ----
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v 3.12 1994/02/02 17:45:35 kardel Exp
+ *
+! * parsesolaris.c,v 3.12 1994/02/02 17:45:35 kardel Exp
+ *
+ * STREAMS module for reference clocks
+ * (SunOS5.x - not fully tested - buyer beware ! - OS KILLERS may still be
+***************
+*** 139,145 ****
+ /*ARGSUSED*/
+ int _init(void)
+ {
+! static char revision[] = "3.9";
+ char *s, *S, *t;
+
+ /*
+--- 139,145 ----
+ /*ARGSUSED*/
+ int _init(void)
+ {
+! static char revision[] = "3.12";
+ char *s, *S, *t;
+
+ /*
+***************
+*** 1179,1184 ****
+--- 1179,1187 ----
+ * History:
+ *
+ * parsesolaris.c,v
++ * Revision 3.12 1994/02/02 17:45:35 kardel
++ * rcs ids fixed
++ *
+ * Revision 3.9 1994/01/25 19:05:26 kardel
+ * 94/01/23 reconcilation
+ *
+diff -c parse/parsestreams.c:1.1.1.7 parse/parsestreams.c:3.14
+*** parse/parsestreams.c:1.1.1.7 Wed Feb 9 23:59:03 1994
+--- parse/parsestreams.c Wed Feb 9 23:59:04 1994
+***************
+*** 1,7 ****
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.12 1994/01/25 19:05:30 kardel Exp
+ *
+! * parsestreams.c,v 3.12 1994/01/25 19:05:30 kardel Exp
+ *
+ * STREAMS module for reference clocks
+ * (SunOS4.x)
+--- 1,7 ----
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.14 1994/02/02 17:45:38 kardel Exp
+ *
+! * parsestreams.c,v 3.14 1994/02/02 17:45:38 kardel Exp
+ *
+ * STREAMS module for reference clocks
+ * (SunOS4.x)
+***************
+*** 1258,1263 ****
+--- 1258,1266 ----
+ * History:
+ *
+ * parsestreams.c,v
++ * Revision 3.14 1994/02/02 17:45:38 kardel
++ * rcs ids fixed
++ *
+ * Revision 3.12 1994/01/25 19:05:30 kardel
+ * 94/01/23 reconcilation
+ *
+diff -c xntpd/ntp_proto.c:1.1.1.20 xntpd/ntp_proto.c:3.22
+*** xntpd/ntp_proto.c:1.1.1.20 Thu Feb 10 00:00:36 1994
+--- xntpd/ntp_proto.c Thu Feb 10 00:00:36 1994
+***************
+*** 25,31 ****
+ l_fp sys_refskew; /* accumulated skew since last update */
+ struct peer *sys_peer; /* our current peer */
+ u_char sys_poll; /* log2 of desired system poll interval */
+! LONG sys_clock; /* second part of current time */
+ LONG sys_lastselect; /* sys_clock at last synch-dist update */
+
+ /*
+--- 25,31 ----
+ l_fp sys_refskew; /* accumulated skew since last update */
+ struct peer *sys_peer; /* our current peer */
+ u_char sys_poll; /* log2 of desired system poll interval */
+! extern LONG sys_clock; /* second part of current time - now in systime.c */
+ LONG sys_lastselect; /* sys_clock at last synch-dist update */
+
+ /*
+diff -c xntpd/ntpd.c:1.1.1.28 xntpd/ntpd.c:3.32
+*** xntpd/ntpd.c:1.1.1.28 Thu Feb 10 00:00:43 1994
+--- xntpd/ntpd.c Thu Feb 10 00:00:43 1994
+***************
+*** 139,145 ****
+ (void) dup2(0, 1);
+ (void) dup2(0, 2);
+ #ifdef NTP_POSIX_SOURCE
+! #if defined(SOLARIS) || defined(SYS_PTX) || defined(SYS_AUX3) || defined(SYS_AIX)
+ (void) setsid();
+ #else
+ (void) setpgid(0, 0);
+--- 139,145 ----
+ (void) dup2(0, 1);
+ (void) dup2(0, 2);
+ #ifdef NTP_POSIX_SOURCE
+! #if defined(SOLARIS) || defined(SYS_PTX) || defined(SYS_AUX3) || defined(SYS_AIX) || defined(SYS_ULTRIX)
+ (void) setsid();
+ #else
+ (void) setpgid(0, 0);
+diff -c xntpd/refclock_parse.c:1.1.1.10 xntpd/refclock_parse.c:3.47
+*** xntpd/refclock_parse.c:1.1.1.10 Thu Feb 10 00:00:54 1994
+--- xntpd/refclock_parse.c Thu Feb 10 00:00:54 1994
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp
+ *
+! * refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp
+ *
+ * generic reference clock driver for receivers
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.47 1994/02/02 17:44:30 kardel Exp
+ *
+! * refclock_parse.c,v 3.47 1994/02/02 17:44:30 kardel Exp
+ *
+ * generic reference clock driver for receivers
+ *
+***************
+*** 3396,3401 ****
+--- 3396,3404 ----
+ * History:
+ *
+ * refclock_parse.c,v
++ * Revision 3.47 1994/02/02 17:44:30 kardel
++ * rcs ids fixed
++ *
+ * Revision 3.45 1994/01/25 19:06:27 kardel
+ * 94/01/23 reconcilation
+ *
+
+--
+ Frank Kardel (kardel@informatik.uni-erlangen.de)
+ All SCSI disks will from now on be required to send an email
+ notice 24 hours prior to complete hardware failure!
+
diff --git a/usr.sbin/xntpd/patches/patch.12 b/usr.sbin/xntpd/patches/patch.12
new file mode 100644
index 0000000..9d7db0f
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.12
@@ -0,0 +1,66 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa16020; 11 Feb 94 10:28 EST
+Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa27338;
+ 11 Feb 94 10:12 EST
+Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
+ id AA00715 (5.65c-6/7.3v-FAU); Fri, 11 Feb 1994 14:26:34 +0100
+Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
+ id AA24390 (5.65c-6/7.3m-FAU); Fri, 11 Feb 1994 14:26:31 +0100
+From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
+Message-Id: <199402111326.AA24390@faui43.informatik.uni-erlangen.de>
+Subject: Re: Beep, beep, beep
+To: Mills@udel.edu
+Date: Fri, 11 Feb 94 14:26:25 MET
+Cc: Frank.Kardel@informatik.uni-erlangen.de,
+ Paul_Vixie@corpmis.sjc.hw.sony.com, Piete.Brooks@cl.cam.ac.uk
+In-Reply-To: <9402101138.aa10259@huey.udel.edu>; from "Mills@udel.edu" at Feb 10, 94 11:38 am
+X-Mailer: ELM [version 2.3 PL11]
+
+
+> Frank,
+
+> In the latest xntp3.3zz.tar.Z the Ultrix kernel finds joy of clock.
+> (Whew).
+
+Ok, I just dug out an old allocation failure in xntpdc. While
+reading respones the input buffer might be realloced(and MOVED) without
+telling the rest of the system. This was fatal when stdio needed a
+buffer for non terminal operation. Net result was confused output.
+
+Ok, here ist the patch:
+
+===================================================================
+RCS file: /src/NTP/REPOSITORY/v3/xntpdc/ntpdc.c,v
+retrieving revision 3.17
+diff -c -r3.17 xntpdc/ntpdc.c
+*** xntpdc/ntpdc.c:3.17 1994/01/28 14:07:13
+--- xntpdc/ntpdc.c 1994/02/11 13:20:56
+***************
+*** 598,605 ****
+ /*
+ * So far, so good. Copy this data into the output array.
+ */
+! if ((datap + datasize) > (pktdata + pktdatasize))
+ growpktdata();
+ memmove(datap, (char *)rpkt.data, datasize);
+ datap += datasize;
+ if (firstpkt) {
+--- 598,609 ----
+ /*
+ * So far, so good. Copy this data into the output array.
+ */
+! if ((datap + datasize) > (pktdata + pktdatasize)) {
+! int offset = datap - pktdata;
+ growpktdata();
++ *rdata = pktdata; /* might have been realloced ! */
++ datap = pktdata + offset;
++ }
+ memmove(datap, (char *)rpkt.data, datasize);
+ datap += datasize;
+ if (firstpkt) {
+
+--
+ Frank Kardel (kardel@informatik.uni-erlangen.de)
+ All SCSI disks will from now on be required to send an email
+ notice 24 hours prior to complete hardware failure!
+
diff --git a/usr.sbin/xntpd/patches/patch.13 b/usr.sbin/xntpd/patches/patch.13
new file mode 100644
index 0000000..17363e2
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.13
@@ -0,0 +1,68 @@
+
+Received: from louie.udel.edu by huey.udel.edu id af16153; 14 Feb 94 7:27 EST
+Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa27498;
+ 13 Feb 94 13:23 EST
+Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
+ id AA22387 (5.65c-6/7.3v-FAU); Sun, 13 Feb 1994 19:22:59 +0100
+Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
+ id AA27117 (5.65c-6/7.3m-FAU); Sun, 13 Feb 1994 19:22:57 +0100
+From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
+Message-Id: <199402131822.AA27117@faui43.informatik.uni-erlangen.de>
+Subject: compilation setup for solaris
+To: mills@udel.edu
+Date: Sun, 13 Feb 94 19:22:53 MET
+X-Mailer: ELM [version 2.3 PL11]
+
+Hi, Dave.
+
+Just to remove some compilation noise in solaris (NTP_POSIX_SOURCE
+redefined):
+
+For 3.3e:
+===================================================================
+RCS file: /src/NTP/REPOSITORY/v3/machines/sunos5.1,v
+retrieving revision 1.4
+diff -c -r1.4 machines/sunos5.1
+*** machines/sunos5.1:1.4 1994/02/01 23:30:54
+--- machines/sunos5.1 1994/02/13 18:16:24
+***************
+*** 1,6 ****
+ RANLIB= :
+ DEFS_LOCAL=-DREFCLOCK
+! DEFS= -DSTREAM -DSOLARIS -DSYS_SOLARIS -DNTP_POSIX_SOURCE
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+--- 1,6 ----
+ RANLIB= :
+ DEFS_LOCAL=-DREFCLOCK
+! DEFS= -DSTREAM -DSOLARIS -DSYS_SOLARIS
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+===================================================================
+RCS file: /src/NTP/REPOSITORY/v3/machines/sunos5.2,v
+retrieving revision 1.4
+diff -c -r1.4 machines/sunos5.2
+*** machines/sunos5.2:1.4 1994/02/01 23:30:56
+--- machines/sunos5.2 1994/02/13 18:16:27
+***************
+*** 1,6 ****
+ RANLIB= :
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSTREAM -DSOLARIS -DSYS_SOLARIS -DADJTIME_IS_ACCURATE -DNTP_POSIX_SOURCE
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+--- 1,6 ----
+ RANLIB= :
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSTREAM -DSOLARIS -DSYS_SOLARIS -DADJTIME_IS_ACCURATE
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+--
+ Frank Kardel (kardel@informatik.uni-erlangen.de)
+ All SCSI disks will from now on be required to send an email
+ notice 24 hours prior to complete hardware failure!
+
diff --git a/usr.sbin/xntpd/patches/patch.14 b/usr.sbin/xntpd/patches/patch.14
new file mode 100644
index 0000000..775f9da
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.14
@@ -0,0 +1,116 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa16187; 14 Feb 94 7:27 EST
+Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa27096;
+ 13 Feb 94 13:04 EST
+Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
+ id AA21590 (5.65c-6/7.3v-FAU); Sun, 13 Feb 1994 19:04:48 +0100
+Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
+ id AA26947 (5.65c-6/7.3m-FAU); Sun, 13 Feb 1994 19:04:46 +0100
+From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
+Message-Id: <199402131804.AA26947@faui43.informatik.uni-erlangen.de>
+Subject: patches for 3.3e
+To: mills@udel.edu
+Date: Sun, 13 Feb 94 19:04:42 MET
+X-Mailer: ELM [version 2.3 PL11]
+
+Hi, Dave.
+
+Here is something to make Sequent PTX happier.
+I also changed the version number from 3.3zz to 3.3e.
+The patch is relative to the current 3.3e version.
+
+diff -c Makefile:1.1.1.12 Makefile:3.47
+*** Makefile:1.1.1.12 Sun Feb 13 18:53:06 1994
+--- Makefile Sun Feb 13 18:53:07 1994
+***************
+*** 144,150 ****
+ @echo '###' creating XNTPRES utility
+ @cd xntpres && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)"
+
+! util/tickadj: util/Makefile FRC
+ @echo
+ @echo '###' creating TICKADJ utility
+ @cd util && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)"
+--- 144,150 ----
+ @echo '###' creating XNTPRES utility
+ @cd xntpres && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)"
+
+! util/tickadj: util/Makefile lib/libntp.a FRC
+ @echo
+ @echo '###' creating TICKADJ utility
+ @cd util && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)"
+diff -c VERSION:1.1.1.7 VERSION:3.12
+*** VERSION:1.1.1.7 Sun Feb 13 18:53:10 1994
+--- VERSION Sun Feb 13 18:53:10 1994
+***************
+*** 1 ****
+! version=3.3zz (beta)
+--- 1 ----
+! version=3.3e (beta)
+diff -c authstuff/Makefile.tmpl:1.1.1.9 authstuff/Makefile.tmpl:3.12
+*** authstuff/Makefile.tmpl:1.1.1.9 Sun Feb 13 18:53:18 1994
+--- authstuff/Makefile.tmpl Sun Feb 13 18:53:18 1994
+***************
+*** 38,50 ****
+ all: $(PROGRAM)
+
+ authcert: $(CRTOBJS) $(LIB)
+! $(CC) $(COPTS) -o $@ $(CRTOBJS) $(LIB)
+
+ authspeed: $(SPDOBJS) $(LIB)
+ $(CC) $(COPTS) -o $@ $(SPDOBJS) $(LIB) $(COMPAT) $(RESLIB)
+
+ keyparity: $(PAROBJS) $(LIB)
+! $(CC) $(COPTS) -o $@ $(PAROBJS) $(LIB)
+
+ makeIPFP: $(IFPOBJS)
+ $(CC) $(COPTS) -o $@ $(IFPOBJS)
+--- 38,50 ----
+ all: $(PROGRAM)
+
+ authcert: $(CRTOBJS) $(LIB)
+! $(CC) $(COPTS) -o $@ $(CRTOBJS) $(LIB) $(COMPAT) $(RESLIB)
+
+ authspeed: $(SPDOBJS) $(LIB)
+ $(CC) $(COPTS) -o $@ $(SPDOBJS) $(LIB) $(COMPAT) $(RESLIB)
+
+ keyparity: $(PAROBJS) $(LIB)
+! $(CC) $(COPTS) -o $@ $(PAROBJS) $(LIB) $(COMPAT) $(RESLIB)
+
+ makeIPFP: $(IFPOBJS)
+ $(CC) $(COPTS) -o $@ $(IFPOBJS)
+***************
+*** 68,74 ****
+ $(CC) $(COPTS) -o $@ $(UNXBJS)
+
+ md5: $(MD5OBJS)
+! $(CC) $(COPTS) -o $@ $(MD5OBJS) $(LIB)
+
+ tags:
+ ctags *.c *.h
+--- 68,74 ----
+ $(CC) $(COPTS) -o $@ $(UNXBJS)
+
+ md5: $(MD5OBJS)
+! $(CC) $(COPTS) -o $@ $(MD5OBJS) $(LIB) $(COMPAT) $(RESLIB)
+
+ tags:
+ ctags *.c *.h
+diff -c include/ntp_machine.h:1.1.1.12 include/ntp_machine.h:1.28
+*** include/ntp_machine.h:1.1.1.12 Sun Feb 13 18:54:32 1994
+--- include/ntp_machine.h Sun Feb 13 18:54:32 1994
+***************
+*** 457,462 ****
+--- 457,463 ----
+ #define HAVE_READKMEM
+ #define UDP_WILDCARD_DELIVERY
+ #define NTP_POSIX_SOURCE
++ #define memmove(x, y, z) memcpy(x, y, z)
+ struct timezone { int __0; }; /* unused placebo */
+ /*
+ * no comment !@!
+--
+ Frank Kardel (kardel@informatik.uni-erlangen.de)
+ All SCSI disks will from now on be required to send an email
+ notice 24 hours prior to complete hardware failure!
+
diff --git a/usr.sbin/xntpd/patches/patch.15 b/usr.sbin/xntpd/patches/patch.15
new file mode 100644
index 0000000..1ef861d
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.15
@@ -0,0 +1,39 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aq16153; 14 Feb 94 7:28 EST
+Received: from jagubox.gsfc.nasa.gov by louie.udel.edu id aa24615;
+ 14 Feb 94 6:34 EST
+Received: by jagubox.gsfc.nasa.gov (Smail3.1.28.1 #1)
+ id m0pW1Zk-000C8UC; Mon, 14 Feb 94 06:34 EST
+Message-Id: <m0pW1Zk-000C8UC@jagubox.gsfc.nasa.gov>
+From: Jim Jagielski <jim@jagubox.gsfc.nasa.gov>
+Subject: xntp 3.3e (or is that zz ;) )
+To: Mills@udel.edu
+Date: Mon, 14 Feb 1994 06:34:52 -0500 (EST)
+Reply-To: Jim Jagielski <jim@jagubox.gsfc.nasa.gov>
+In-Reply-To: <9308051324.aa24396@huey.udel.edu> from "Mills@udel.edu" at Aug 5, 93 01:24:24 pm
+X-Mailer: ELM [version 2.4 PL23]
+Content-Type: text
+Content-Length: 621
+
+This latest version requires the NTP_NEED_BOPS define in ntp_machine.h for
+A/UX:
+
+*** ntp_machine.h.orig Mon Feb 14 06:34:34 1994
+--- ntp_machine.h Mon Feb 14 06:20:57 1994
+***************
+*** 299,304 ****
+--- 299,305 ----
+ #define HAVE_BSD_TTYS
+ #define LOG_NTP LOG_LOCAL1
+ #define HAVE_SIGNALED_IO
++ #define NTP_NEED_BOPS
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/AUX"
+ #endif
+--
+#include <std/disclaimer.h>
+ Jim Jagielski |
+ jim@jagubox.gsfc.nasa.gov | "Ahh... west and wewaxation at wast"
+ NASA/GSFC, Code 734.4 | Elmer Fudd
+ Greenbelt, MD 20771 |
+
diff --git a/usr.sbin/xntpd/patches/patch.16 b/usr.sbin/xntpd/patches/patch.16
new file mode 100644
index 0000000..909f0c7
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.16
@@ -0,0 +1,267 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa25712; 15 Feb 94 17:54 EST
+Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa18345;
+ 15 Feb 94 17:51 EST
+Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
+ id AA15109 (5.65c-6/7.3v-FAU); Tue, 15 Feb 1994 23:50:53 +0100
+Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
+ id AA17375 (5.65c-6/7.3m-FAU); Tue, 15 Feb 1994 23:50:51 +0100
+From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
+Message-Id: <199402152250.AA17375@faui43.informatik.uni-erlangen.de>
+Subject: fixed for parse kernel stuff...
+To: mills@udel.edu
+Date: Tue, 15 Feb 94 23:50:47 MET
+X-Mailer: ELM [version 2.3 PL11]
+
+
+Hi, Dave !
+
+Here are some fixes for the PARSE kernel modules. Basically they
+fix a memory leak on an open error condition and pronounce the
+Solaris 2.x stream module MT safe.
+
+Well, actually I should put something for you to eat here 8-).
+
+RCS file: /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v
+retrieving revision 1.1.1.7
+diff -c -r1.1.1.7 parsesolaris.c
+*** parse/parsesolaris.c:1.1.1.7 1994/02/12 09:53:42
+--- parse/parsesolaris.c 1994/02/15 22:20:51
+***************
+*** 1,7 ****
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v 3.12 1994/02/02 17:45:35 kardel Exp
+ *
+! * parsesolaris.c,v 3.12 1994/02/02 17:45:35 kardel Exp
+ *
+ * STREAMS module for reference clocks
+ * (SunOS5.x - not fully tested - buyer beware ! - OS KILLERS may still be
+--- 1,7 ----
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v 3.15 1994/02/15 22:20:51 kardel Exp
+ *
+! * parsesolaris.c,v 3.15 1994/02/15 22:20:51 kardel Exp
+ *
+ * STREAMS module for reference clocks
+ * (SunOS5.x - not fully tested - buyer beware ! - OS KILLERS may still be
+***************
+*** 19,25 ****
+ */
+
+ #ifndef lint
+! static char rcsid[] = "parsesolaris.c,v 3.9 1994/01/25 19:05:26 kardel Exp";
+ #endif
+
+ /*
+--- 19,25 ----
+ */
+
+ #ifndef lint
+! static char rcsid[] = "parsesolaris.c,v 3.15 1994/02/15 22:20:51 kardel Exp";
+ #endif
+
+ /*
+***************
+*** 65,71 ****
+ {
+ "parse", /* module name */
+ &parseinfo, /* module information */
+! D_NEW, /* not clean yet */
+ /* lock ptr */
+ };
+
+--- 65,71 ----
+ {
+ "parse", /* module name */
+ &parseinfo, /* module information */
+! D_NEW|D_MP|D_MTQPAIR, /* exclusive for q pair */
+ /* lock ptr */
+ };
+
+***************
+*** 139,145 ****
+ /*ARGSUSED*/
+ int _init(void)
+ {
+! static char revision[] = "3.12";
+ char *s, *S, *t;
+
+ /*
+--- 139,145 ----
+ /*ARGSUSED*/
+ int _init(void)
+ {
+! static char revision[] = "3.15";
+ char *s, *S, *t;
+
+ /*
+***************
+*** 413,418 ****
+--- 413,420 ----
+ parse->parse_ppsclockev.tv.tv_usec = 0;
+ parse->parse_ppsclockev.serial = 0;
+
++ qprocson(q);
++
+ parseprintf(DD_OPEN,("parse: OPEN - initializing io subsystem q=%x\n", q));
+
+ if (!parse_ioinit(&parse->parse_io))
+***************
+*** 420,425 ****
+--- 422,429 ----
+ /*
+ * ok guys - beat it
+ */
++ qprocsoff(q);
++
+ kmem_free((caddr_t)parse, sizeof(parsestream_t));
+
+ parsebusy--;
+***************
+*** 441,447 ****
+ */
+ if (!notice)
+ {
+! printf("%s: Copyright (c) 1991-1993, Frank Kardel\n", modlstrmod.strmod_linkinfo);
+ notice = 1;
+ }
+
+--- 445,451 ----
+ */
+ if (!notice)
+ {
+! printf("%s: Copyright (c) 1991-1994, Frank Kardel\n", modlstrmod.strmod_linkinfo);
+ notice = 1;
+ }
+
+***************
+*** 449,455 ****
+--- 453,464 ----
+ }
+ else
+ {
++ qprocsoff(q);
++
++ kmem_free((caddr_t)parse, sizeof(parsestream_t));
++
+ parsebusy--;
++
+ return EIO;
+ }
+ }
+***************
+*** 462,467 ****
+--- 471,478 ----
+
+ parseprintf(DD_CLOSE,("parse: CLOSE\n"));
+
++ qprocsoff(q);
++
+ s = splhigh();
+
+ if (parse->parse_dqueue)
+***************
+*** 1178,1184 ****
+ /*
+ * History:
+ *
+! * parsesolaris.c,v
+ * Revision 3.12 1994/02/02 17:45:35 kardel
+ * rcs ids fixed
+ *
+--- 1189,1204 ----
+ /*
+ * History:
+ *
+! * parsesolaris.c,v
+! * Revision 3.15 1994/02/15 22:20:51 kardel
+! * rcsid fixed
+! *
+! * Revision 3.14 1994/02/15 22:06:04 kardel
+! * added qprocsx & flags for MT capability
+! *
+! * Revision 3.13 1994/02/13 19:16:47 kardel
+! * updated verbose Copyright message
+! *
+ * Revision 3.12 1994/02/02 17:45:35 kardel
+ * rcs ids fixed
+ *
+RCS file: /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v
+retrieving revision 1.1.1.8
+diff -c -r1.1.1.8 parsestreams.c
+*** parse/parsestreams.c:1.1.1.8 1994/02/12 09:53:45
+--- parse/parsestreams.c 1994/02/15 22:39:50
+***************
+*** 1,7 ****
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.14 1994/02/02 17:45:38 kardel Exp
+ *
+! * parsestreams.c,v 3.14 1994/02/02 17:45:38 kardel Exp
+ *
+ * STREAMS module for reference clocks
+ * (SunOS4.x)
+--- 1,7 ----
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.16 1994/02/15 22:39:50 kardel Exp
+ *
+! * parsestreams.c,v 3.16 1994/02/15 22:39:50 kardel Exp
+ *
+ * STREAMS module for reference clocks
+ * (SunOS4.x)
+***************
+*** 527,533 ****
+ */
+ if (!notice)
+ {
+! printf("%s: Copyright (c) 1991-1993, Frank Kardel\n", parsesync_vd.Drv_name);
+ notice = 1;
+ }
+
+--- 527,533 ----
+ */
+ if (!notice)
+ {
+! printf("%s: Copyright (c) 1991-1994, Frank Kardel\n", parsesync_vd.Drv_name);
+ notice = 1;
+ }
+
+***************
+*** 535,540 ****
+--- 535,542 ----
+ }
+ else
+ {
++ kmem_free((caddr_t)parse, sizeof(parsestream_t));
++
+ #ifdef VDDRV
+ parsebusy--;
+ #endif
+***************
+*** 1257,1263 ****
+ /*
+ * History:
+ *
+! * parsestreams.c,v
+ * Revision 3.14 1994/02/02 17:45:38 kardel
+ * rcs ids fixed
+ *
+--- 1259,1271 ----
+ /*
+ * History:
+ *
+! * parsestreams.c,v
+! * Revision 3.16 1994/02/15 22:39:50 kardel
+! * memory leak on open failure closed
+! *
+! * Revision 3.15 1994/02/13 19:16:50 kardel
+! * updated verbose Copyright message
+! *
+ * Revision 3.14 1994/02/02 17:45:38 kardel
+ * rcs ids fixed
+ *
+
+--
+ Frank Kardel (kardel@informatik.uni-erlangen.de)
+ All SCSI disks will from now on be required to send an email
+ notice 24 hours prior to complete hardware failure!
+
diff --git a/usr.sbin/xntpd/patches/patch.17 b/usr.sbin/xntpd/patches/patch.17
new file mode 100644
index 0000000..f98f754
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.17
@@ -0,0 +1,50 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa00480; 16 Feb 94 12:17 EST
+Received: from quack.kfu.com by louie.udel.edu id aa24950; 16 Feb 94 12:12 EST
+Received: by quack.kfu.com id AA03532
+ (5.65c8/IDA-1.4.4 for mills@udel.edu); Wed, 16 Feb 1994 09:12:04 -0800
+Date: Wed, 16 Feb 1994 09:12:04 -0800
+From: Nick Sayer <nsayer@quack.kfu.com>
+Message-Id: <199402161712.AA03532@quack.kfu.com>
+To: mills@udel.edu
+Subject: CHU debug patch
+
+I don't know what you think about this, but I thought I'd pass it
+along. I'm sorry I don't have a proper 'patch' format patch, but
+it should be aparent from the context where this goes in refclock_chu.c:
+
+ return;
+ }
+
+ /*
+ * Get the clock this applies to and a pointer to the data
+ */
+ chu = (struct chuunit *)rbufp->recv_srcclock;
+ chuc = (struct chucode *)&rbufp->recv_space;
+ chu->responses++;
+ chu->lastupdate = current_time;
+
+ /*
+ * Just for fun, we can debug the whole frame if
+ * we want.
+ */
+
+#ifndef NO_CHU_DEBUG
+ syslog(LOG_DEBUG,"CHU %s packet:",(chuc->chutype==CHU_YEAR)?
+ "year":"time");
+ for (i=0;i<NCHUCHARS;i++)
+ {
+ char c[64];
+
+ sprintf(c,"%c%c %s",hexstring[chuc->codechars[i]&0xf],
+ hexstring[chuc->codechars[i]>>4],
+ ctime(&(chuc->codetimes[i].tv_sec)));
+ c[strlen(c)-1]=0; /* ctime() adds a damn \n */
+ syslog(LOG_DEBUG,"%s .%06d",c,chuc->codetimes[i].tv_usec);
+ }
+#endif
+
+ /*
+ * At this point we're assured that both halves of the
+ * data match because of what the kernel has done.
+
diff --git a/usr.sbin/xntpd/patches/patch.18 b/usr.sbin/xntpd/patches/patch.18
new file mode 100644
index 0000000..e81eb62
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.18
@@ -0,0 +1,99 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa00679; 16 Feb 94 13:00 EST
+Received: from spatula.csv.warwick.ac.uk by louie.udel.edu id aa26092;
+ 16 Feb 94 12:48 EST
+Date: Wed, 16 Feb 1994 17:47:50 GMT
+From: Ian Dickinson <cudep@csv.warwick.ac.uk>
+Message-Id: <7051.199402161747@spatula.csv.warwick.ac.uk>
+Received: from localhost by spatula.csv.warwick.ac.uk
+ id RAA07051; Wed, 16 Feb 1994 17:47:50 GMT
+In-Reply-To: Mills@udel.edu
+ "Re: xntp sunos5 config" (Feb 16, 10:50am)
+X-Mailer: Mail User's Shell (7.2.4 2/2/92)
+To: Mills@udel.edu
+Subject: Re: xntp sunos5 config
+MIME-Version: 1.0
+Content-Type: text/plain; charset=US-ASCII
+
+On Feb 16, 10:50am, Mills@udel.edu wrote:
+} Subject: Re: xntp sunos5 config
+
+BTW, 3.3f seems to work fine on an SC2000 sunos5.3 (including the patch below)
+
+> Your message did not say in which file sunos5.1 or sunos5.2 or both
+> you wanted the -DLOCK_PROCESS. I'll wait for your patches.
+
+I've never done any heavy work on a sunos5.1 machine, so I can't remember if
+plock() exists there. I *think* sunso5.2 will work with it.
+Perhaps it's time to create a sunos5.3 file which has -DLOCK_PROCESS and is
+otherwise identical to sunos5.2, though this is getting silly for supposedly
+a single SVR4-based operating system.
+
+As far as I'm aware, the choice between plock() and mlockall() can be done
+with feature testing and doesn't need a seperate #define.
+
+This patch applies to 3.3b and 3.3f (with line fuzz).
+I'm certainly not sure this is the best way to do this, but it does work here.
+Perhaps it's worth asking around how widely this works in sunos5.x
+
+*** 1.1 1994/02/01 17:16:13
+--- xntpd/ntpd.c 1994/02/16 16:32:47
+***************
+*** 28,35 ****
+--- 28,39 ----
+ #include "ntp_stdlib.h"
+
+ #ifdef LOCK_PROCESS
++ #ifdef SYS_SOLARIS
++ #include <sys/mman.h>
++ #else
+ #include <sys/lock.h>
+ #endif
++ #endif
+
+ /*
+ * Signals we catch for debugging. If not debugging we ignore them.
+***************
+*** 218,229 ****
+ if (rtprio(0, 120) < 0)
+ syslog(LOG_ERR, "rtprio() error: %m");
+ #else
+! #if defined(PROCLOCK) && defined(LOCK_PROCESS)
+ /*
+ * lock the process into memory
+ */
+ if (plock(PROCLOCK) < 0)
+ syslog(LOG_ERR, "plock(): %m");
+ #endif
+ #if defined(NTPD_PRIO) && NTPD_PRIO != 0
+ /*
+--- 222,243 ----
+ if (rtprio(0, 120) < 0)
+ syslog(LOG_ERR, "rtprio() error: %m");
+ #else
+! #if defined(LOCK_PROCESS)
+! #if defined(MCL_CURRENT) && defined(MCL_FUTURE)
+! /*
+! * lock the process into memory
+! */
+! if (mlockall(MCL_CURRENT|MCL_FUTURE) < 0)
+! syslog(LOG_ERR, "mlockall(): %m");
+! #else
+! #if defined(PROCLOCK)
+ /*
+ * lock the process into memory
+ */
+ if (plock(PROCLOCK) < 0)
+ syslog(LOG_ERR, "plock(): %m");
++ #endif
++ #endif
+ #endif
+ #if defined(NTPD_PRIO) && NTPD_PRIO != 0
+ /*
+
+
+
+Cheers,
+--
+Ian
+
diff --git a/usr.sbin/xntpd/patches/patch.19 b/usr.sbin/xntpd/patches/patch.19
new file mode 100644
index 0000000..396f16f
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.19
@@ -0,0 +1,599 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa08047; 17 Feb 94 15:26 EST
+Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa17403;
+ 17 Feb 94 15:15 EST
+Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
+ id AA04056 (5.65c-6/7.3v-FAU); Thu, 17 Feb 1994 21:14:43 +0100
+Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
+ id AA29721 (5.65c-6/7.3m-FAU); Thu, 17 Feb 1994 21:14:39 +0100
+From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
+Message-Id: <199402172014.AA29721@faui43.informatik.uni-erlangen.de>
+Subject: Re: Beep, beep, beep
+To: Mills@udel.edu
+Date: Thu, 17 Feb 94 21:14:33 MET
+Cc: Frank.Kardel@informatik.uni-erlangen.de,
+ Paul_Vixie@corpmis.sjc.hw.sony.com, Piete.Brooks@cl.cam.ac.uk
+In-Reply-To: <9402171155.aa07032@huey.udel.edu>; from "Mills@udel.edu" at Feb 17, 94 11:55 am
+X-Mailer: ELM [version 2.3 PL11]
+
+
+> Guys,
+
+> Trouble with HAVE_BSD_TTYS on a VAX
+
+> ### creating NTP library
+> cc -O -DDES -DXNTP_LITTLE_ENDIAN -DSYS_VAX -DDEBUG -DREFCLOCK -I../include -c atoint.c
+> "../include/ntp_machine.h", line 570: syntax error
+Yupp, nit TTY define set.
+
+> "atoint.c", line 12: redeclaration of ival
+> "atoint.c", line 13: syntax error
+> ...
+
+Well, I guess the trouble is more that none of the tty defines was
+defined. For the sake of completeness i have added the tty defines to
+(hopefully) all machine/* files. Some configurations were unknown to
+me so I assumed HAVE_BSD_TTYS. Would be nice if someone could run
+the whole suite 8-).
+I have put the tty defines into the machine files so that the
+refconf scripts can pick up the define without having to run the
+preprocessor to dig out the configuration.
+Hope this works.
+
+diff -c include/ntp_machine.h:1.1.1.13 include/ntp_machine.h:1.30
+*** include/ntp_machine.h:1.1.1.13 Thu Feb 17 20:17:59 1994
+--- include/ntp_machine.h Thu Feb 17 20:17:59 1994
+***************
+*** 44,54 ****
+ WHICH TERMINAL MODEL TO USE - I would assume HAVE_TERMIOS if
+ NTP_POSIX_SOURCE was set but can't. The
+ posix tty driver is too restrictive on most systems.
+! It defined if you define STREAMS.
+
+ HAVE_SYSV_TTYS - Use SYSV termio.h
+ HAVE_BSD_TTYS - Use BSD stty.h
+- HAVE_TERMIOS - Use POSIX termios.h
+
+ THIS MAKES PORTS TO NEW SYSTEMS EASY - You only have to wory about
+ kernel mucking.
+--- 44,59 ----
+ WHICH TERMINAL MODEL TO USE - I would assume HAVE_TERMIOS if
+ NTP_POSIX_SOURCE was set but can't. The
+ posix tty driver is too restrictive on most systems.
+! It is defined if you define STREAMS.
+
++ We do not put these defines in the ntp_machine.h as some systems
++ offer multiple interfaces and refclock configuration likes to
++ peek into the configuration defines for tty model restrictions.
++ Thus all tty definitions should be in the files in the machines directory.
++
++ HAVE_TERMIOS - Use POSIX termios.h
+ HAVE_SYSV_TTYS - Use SYSV termio.h
+ HAVE_BSD_TTYS - Use BSD stty.h
+
+ THIS MAKES PORTS TO NEW SYSTEMS EASY - You only have to wory about
+ kernel mucking.
+***************
+*** 296,302 ****
+ #define FORCE_NTPDATE_STEP
+ #define RETSIGTYPE void
+ #define HAVE_ATT_SETPGRP
+- #define HAVE_BSD_TTYS
+ #define LOG_NTP LOG_LOCAL1
+ #define HAVE_SIGNALED_IO
+ #define NTP_NEED_BOPS
+--- 301,306 ----
+***************
+*** 352,359 ****
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/BSDI"
+ #endif
+- #define HAVE_BSD_TTYS
+- #define HAVE_TERMIOS
+ #endif
+
+ /*
+--- 356,361 ----
+***************
+*** 441,449 ****
+ */
+ #if defined(SYS_PTX)
+ #define NO_SIGNED_CHAR_DECL
+- #ifndef HAVE_SYSV_TTYS
+- #define HAVE_SYSV_TTYS
+- #endif
+ #define STREAMS_TLI
+ #define HAVE_ATT_SETPGRP
+ #define HAVE_SIGNALED_IO
+--- 443,448 ----
+***************
+*** 528,534 ****
+ #define HAVE_BSD_NICE
+ #define NOKMEM
+ #define HAVE_SIGNALED_IO
+- #define HAVE_BSD_TTYS
+ #define NTP_SYSCALLS_STD
+ #define USE_PROTOTYPES
+ #define UDP_WILDCARD_DELIVERY
+--- 527,532 ----
+***************
+*** 565,570 ****
+--- 563,582 ----
+ && !defined(HAVE_NO_NICE)
+ ERROR You_must_define_one_of_the_HAVE_xx_NICE_defines
+ #endif
++
++ /*
++ * use only one tty model - no use in initialising
++ * a tty in three ways
++ * HAVE_TERMIOS is preferred over HAVE_SYSV_TTYS over HAVE_BSD_TTYS
++ */
++ #ifdef HAVE_TERMIOS
++ #undef HAVE_BSD_TTYS
++ #undef HAVE_SYSV_TTYS
++ #endif
++
++ #ifdef HAVE_SYSV_TTYS
++ #undef HAVE_BSD_TTYS
++ #endif
+
+ #if !defined(HAVE_SYSV_TTYS) \
+ && !defined(HAVE_BSD_TTYS) \
+diff -c machines/aux2:1.1.1.2 machines/aux2:1.4
+*** machines/aux2:1.1.1.2 Thu Feb 17 20:19:50 1994
+--- machines/aux2 Thu Feb 17 20:19:50 1994
+***************
+*** 1,6 ****
+ RANLIB= true # ar does the work of ranlib under System V
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSYS_AUX2
+ AUTHDEFS= -DDES -DMD5 -DFASTMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+--- 1,6 ----
+ RANLIB= true # ar does the work of ranlib under System V
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSYS_AUX2 -DHAVE_BSD_TTYS
+ AUTHDEFS= -DDES -DMD5 -DFASTMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+diff -c machines/aux3:1.1.1.2 machines/aux3:1.4
+*** machines/aux3:1.1.1.2 Thu Feb 17 20:19:52 1994
+--- machines/aux3 Thu Feb 17 20:19:52 1994
+***************
+*** 1,6 ****
+ RANLIB= true # ar does the work of ranlib under System V
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSYS_AUX3
+ AUTHDEFS= -DDES -DMD5 -DFASTMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+--- 1,6 ----
+ RANLIB= true # ar does the work of ranlib under System V
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSYS_AUX3 -DHAVE_BSD_TTYS
+ AUTHDEFS= -DDES -DMD5 -DFASTMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+diff -c machines/bsdi:1.1.1.4 machines/bsdi:1.6
+*** machines/bsdi:1.1.1.4 Thu Feb 17 20:19:53 1994
+--- machines/bsdi Thu Feb 17 20:19:53 1994
+***************
+*** 1,6 ****
+ RANLIB= ranlib
+ DEFS_LOCAL=-DREFCLOCK
+! DEFS= -DSYS_BSDI
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS= -lkvm
+--- 1,6 ----
+ RANLIB= ranlib
+ DEFS_LOCAL=-DREFCLOCK
+! DEFS= -DSYS_BSDI -DHAVE_TERMIOS
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS= -lkvm
+diff -c machines/convexos10:1.1.1.2 machines/convexos10:1.3
+*** machines/convexos10:1.1.1.2 Thu Feb 17 20:19:54 1994
+--- machines/convexos10 Thu Feb 17 20:19:54 1994
+***************
+*** 1,6 ****
+ RANLIB= ranlib
+ DEFS_LOCAL=-DREFCLOCK
+! DEFS= -DSYS_CONVEXOS10
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ RESLIB=
+--- 1,6 ----
+ RANLIB= ranlib
+ DEFS_LOCAL=-DREFCLOCK
+! DEFS= -DSYS_CONVEXOS10 -DHAVE_BSD_TTYS
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ RESLIB=
+diff -c machines/convexos9:1.1.1.2 machines/convexos9:1.3
+*** machines/convexos9:1.1.1.2 Thu Feb 17 20:19:55 1994
+--- machines/convexos9 Thu Feb 17 20:19:56 1994
+***************
+*** 1,6 ****
+ RANLIB= ranlib
+ DEFS_LOCAL=-DREFCLOCK
+! DEFS= -DSYS_CONVEXOS9
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ RESLIB=
+--- 1,6 ----
+ RANLIB= ranlib
+ DEFS_LOCAL=-DREFCLOCK
+! DEFS= -DSYS_CONVEXOS9 -DHAVE_BSD_TTYS
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ RESLIB=
+diff -c machines/decosf1:1.1.1.2 machines/decosf1:1.4
+*** machines/decosf1:1.1.1.2 Thu Feb 17 20:19:57 1994
+--- machines/decosf1 Thu Feb 17 20:19:57 1994
+***************
+*** 1,6 ****
+ RANLIB= ranlib
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSTREAM -DSYS_DECOSF1
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+--- 1,6 ----
+ RANLIB= ranlib
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSTREAM -DSYS_DECOSF1 -DHAVE_TERMIOS
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+diff -c machines/dell.svr4:1.1.1.1 machines/dell.svr4:1.2
+*** machines/dell.svr4:1.1.1.1 Thu Feb 17 20:19:58 1994
+--- machines/dell.svr4 Thu Feb 17 20:19:58 1994
+***************
+*** 1,7 ****
+ SHELL= /bin/sh
+ RANLIB= ls # ar does the work of ranlib under System V
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSYS_SVR4
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+--- 1,7 ----
+ SHELL= /bin/sh
+ RANLIB= ls # ar does the work of ranlib under System V
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSYS_SVR4 -DHAVE_TERMIOS
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+diff -c machines/domainos:1.1.1.1 machines/domainos:1.2
+*** machines/domainos:1.1.1.1 Thu Feb 17 20:19:59 1994
+--- machines/domainos Thu Feb 17 20:19:59 1994
+***************
+*** 1,6 ****
+ RANLIB= ranlib
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSYS_DOMAINOS -D_INCLUDE_BSD_SOURCE -D_INCLUDE_XOPEN_SOURCE -D_INCLUDE_POSIX_SOURCE
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+--- 1,6 ----
+ RANLIB= ranlib
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSYS_DOMAINOS -D_INCLUDE_BSD_SOURCE -D_INCLUDE_XOPEN_SOURCE -D_INCLUDE_POSIX_SOURCE -DHAVE_BSD_TTYS
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+diff -c machines/i386:1.1.1.2 machines/i386:1.3
+*** machines/i386:1.1.1.2 Thu Feb 17 20:20:04 1994
+--- machines/i386 Thu Feb 17 20:20:05 1994
+***************
+*** 1,6 ****
+ RANLIB= ranlib
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSYS_I386
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+--- 1,6 ----
+ RANLIB= ranlib
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSYS_I386 -DHAVE_BSD_TTYS
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+diff -c machines/i386svr4:1.1.1.3 machines/i386svr4:1.4
+*** machines/i386svr4:1.1.1.3 Thu Feb 17 20:20:05 1994
+--- machines/i386svr4 Thu Feb 17 20:20:05 1994
+***************
+*** 1,7 ****
+ SHELL= /bin/sh
+ RANLIB= ls # ar does the work of ranlib under System V
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSYS_SVR4 -DSTREAMS_TLI
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+--- 1,7 ----
+ SHELL= /bin/sh
+ RANLIB= ls # ar does the work of ranlib under System V
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSYS_SVR4 -DSTREAMS_TLI -DHAVE_TERMIOS
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+diff -c machines/mips:1.1.1.2 machines/mips:1.3
+*** machines/mips:1.1.1.2 Thu Feb 17 20:20:10 1994
+--- machines/mips Thu Feb 17 20:20:10 1994
+***************
+*** 1,7 ****
+ #RANLIB= ranlib
+ DEFS_LOCAL= -DREFCLOCK
+ DEFS=
+! AUTHDEFS= -DDES -DMD5 -DSYS_MIPS
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS= -lmld
+ RESLIB=
+--- 1,7 ----
+ #RANLIB= ranlib
+ DEFS_LOCAL= -DREFCLOCK
+ DEFS=
+! AUTHDEFS= -DDES -DMD5 -DSYS_MIPS -DHAVE_BSD_TTYS
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS= -lmld
+ RESLIB=
+diff -c machines/next:1.1.1.1 machines/next:1.2
+*** machines/next:1.1.1.1 Thu Feb 17 20:20:12 1994
+--- machines/next Thu Feb 17 20:20:13 1994
+***************
+*** 1,6 ****
+ RANLIB= ranlib -c -s
+ DEFS= -DSYS_NEXT
+! AUTHDEFS= -DDES -DMD5 -DFAST_MD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+ RESLIB=
+--- 1,6 ----
+ RANLIB= ranlib -c -s
+ DEFS= -DSYS_NEXT
+! AUTHDEFS= -DDES -DMD5 -DFAST_MD5 -DHAVE_BSD_TTYS
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+ RESLIB=
+diff -c machines/sequent:1.1.1.3 machines/sequent:1.4
+*** machines/sequent:1.1.1.3 Thu Feb 17 20:20:14 1994
+--- machines/sequent Thu Feb 17 20:20:14 1994
+***************
+*** 1,6 ****
+ RANLIB= ranlib
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DHAVE_READ_KMEM -DSYS_SEQUENT
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+--- 1,6 ----
+ RANLIB= ranlib
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DHAVE_READ_KMEM -DSYS_SEQUENT -DHAVE_BSD_TTYS
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+diff -c machines/sinix-m:1.1.1.2 machines/sinix-m:1.5
+*** machines/sinix-m:1.1.1.2 Thu Feb 17 20:20:15 1994
+--- machines/sinix-m Thu Feb 17 20:20:15 1994
+***************
+*** 1,6 ****
+ RANLIB= :
+ DEFS_LOCAL=-DREFCLOCK
+! DEFS= -DSYS_SINIXM
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+--- 1,6 ----
+ RANLIB= :
+ DEFS_LOCAL=-DREFCLOCK
+! DEFS= -DSYS_SINIXM -DHAVE_TERMIOS
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+diff -c machines/sony:1.1.1.2 machines/sony:1.3
+*** machines/sony:1.1.1.2 Thu Feb 17 20:20:16 1994
+--- machines/sony Thu Feb 17 20:20:16 1994
+***************
+*** 1,6 ****
+ RANLIB= ranlib
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSYS_SONY
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS= -lmld
+--- 1,6 ----
+ RANLIB= ranlib
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSYS_SONY -DHAVE_TERMIOS
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS= -lmld
+diff -c machines/svr4:1.1.1.4 machines/svr4:1.4
+*** machines/svr4:1.1.1.4 Thu Feb 17 20:20:20 1994
+--- machines/svr4 Thu Feb 17 20:20:20 1994
+***************
+*** 1,6 ****
+ SHELL= /bin/sh
+ RANLIB= ls # ar does the work of ranlib under System V
+! DEFS= -DSYS_SVR4 -DSTREAMS_TLI
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS=
+ DAEMONLIBS= -lnet -lnsl -lsocket -lelf
+--- 1,6 ----
+ SHELL= /bin/sh
+ RANLIB= ls # ar does the work of ranlib under System V
+! DEFS= -DSYS_SVR4 -DSTREAMS_TLI -DHAVE_TERMIOS
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS=
+ DAEMONLIBS= -lnet -lnsl -lsocket -lelf
+diff -c machines/vax:1.1.1.2 machines/vax:1.3
+*** machines/vax:1.1.1.2 Thu Feb 17 20:20:23 1994
+--- machines/vax Thu Feb 17 20:20:23 1994
+***************
+*** 1,6 ****
+ RANLIB= ranlib
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSYS_VAX
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+ RESLIB=
+--- 1,6 ----
+ RANLIB= ranlib
+ DEFS_LOCAL= -DREFCLOCK
+! DEFS= -DSYS_VAX -DHAVE_BSD_TTYS
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+ RESLIB=
+RCS file: /src/NTP/REPOSITORY/v3/parse/README.new_clocks,v
+retrieving revision 1.1.1.2
+retrieving revision 3.3
+diff -c -r1.1.1.2 -r3.3
+*** parse/README.new_clocks:1.1.1.2 1994/02/12 09:53:48
+--- parse/README.new_clocks 1994/02/17 20:09:58
+***************
+*** 1,7 ****
+! Here is an attempt to scetch out what you need to do in order to
+ add another clock to the parse driver:
+
+! Prerequsites:
+ - Does the system you want the clock connect to have
+ termio.h or termios.h ? (You need that for the parse driver)
+
+--- 1,7 ----
+! Here is an attempt to sketch out what you need to do in order to
+ add another clock to the parse driver:
+
+! Prerequisites:
+ - Does the system you want the clock connect to have
+ termio.h or termios.h ? (You need that for the parse driver)
+
+***************
+*** 32,38 ****
+ PARSEB_ANNOUNCE switch time zone warning (informational only)
+ PARSEB_POWERUP no synchronisation - clock confused (must set then)
+ PARSEB_NOSYNC timecode currently not confirmed (must set then)
+! usually on reception error when the is still a
+ chance the the generated time is still ok.
+
+ PARSEB_DST DST in effect (informational only)
+--- 32,38 ----
+ PARSEB_ANNOUNCE switch time zone warning (informational only)
+ PARSEB_POWERUP no synchronisation - clock confused (must set then)
+ PARSEB_NOSYNC timecode currently not confirmed (must set then)
+! usually on reception error when there is still a
+ chance the the generated time is still ok.
+
+ PARSEB_DST DST in effect (informational only)
+***************
+*** 53,59 ****
+ them for examples. The basic structure is:
+
+ struct clockformat <yourclock>_format = {
+! lots of field for you to fill out (see below)
+ };
+
+ static cvt_<yourclock>()
+--- 53,59 ----
+ them for examples. The basic structure is:
+
+ struct clockformat <yourclock>_format = {
+! lots of fields for you to fill out (see below)
+ };
+
+ static cvt_<yourclock>()
+***************
+*** 122,132 ****
+ file with the time code conversion. See the examples and pick a clock
+ closest to yours and tweak the code to match your clock.
+
+! In order to make your clk_*.c file usable a referenc to the clockformat
+ structure must be put into parse_conf.c.
+
+-
+-
+ TTY setup and initialisation/configuration will be done in
+ xntpd/refclock_parse.c
+
+--- 122,130 ----
+ file with the time code conversion. See the examples and pick a clock
+ closest to yours and tweak the code to match your clock.
+
+! In order to make your clk_*.c file usable a reference to the clockformat
+ structure must be put into parse_conf.c.
+
+ TTY setup and initialisation/configuration will be done in
+ xntpd/refclock_parse.c
+
+***************
+*** 135,141 ****
+ termio*.h c_cflag macros.
+
+ - in xntpd/refclock_parse.c fill out a new the struct clockinfo element
+! (allocates a new "IP" address - see comments)
+ (see all the other clocks for example)
+ struct clockinfo
+ {
+--- 133,139 ----
+ termio*.h c_cflag macros.
+
+ - in xntpd/refclock_parse.c fill out a new the struct clockinfo element
+! (that allocates a new "IP" address - see comments)
+ (see all the other clocks for example)
+ struct clockinfo
+ {
+***************
+*** 188,199 ****
+
+
+ Well, this is very sketchy, i know. But I hope it helps a little bit.
+! The best way is to look which clock comes closet to your and tweak that
+ code.
+! Two sorts of clocks are used with parse. Clocks that automatically sent
+! thier time code (once a second) do not nee entries in the poll routines because
+! they sent the data all the time. The second sort are the clocks that need a
+! command sent to then in order to reply with a time code (like the Trimble
+ clock).
+
+ For questions: kardel@informatik.uni-erlangen.de. Please include
+--- 186,197 ----
+
+
+ Well, this is very sketchy, i know. But I hope it helps a little bit.
+! The best way is to look which clock comes closest to your and tweak that
+ code.
+! Two sorts of clocks are used with parse. Clocks that automatically send
+! their time code (once a second) do not need entries in the poll routines because
+! they send the data all the time. The second sort are the clocks that need a
+! command sent to them in order to reply with a time code (like the Trimble
+ clock).
+
+ For questions: kardel@informatik.uni-erlangen.de. Please include
+RCS file: /src/NTP/REPOSITORY/v3/parse/README.parse_clocks,v
+retrieving revision 1.1.1.1
+retrieving revision 3.2
+diff -c -r1.1.1.1 -r3.2
+*** parse/README.parse_clocks:1.1.1.1 1994/01/01 00:00:00
+--- parse/README.parse_clocks 1994/02/17 20:10:02
+***************
+*** 1,4 ****
+! The parse driver currently supports several clock with different
+ query mechanisms. In order for you to find a sample that might be
+ similar to a clock you might want to integrate into parse i'll sum
+ up the major features of the clocks (this information is distributed
+--- 1,4 ----
+! The parse driver currently supports several clocks with different
+ query mechanisms. In order for you to find a sample that might be
+ similar to a clock you might want to integrate into parse i'll sum
+ up the major features of the clocks (this information is distributed
+--
+ Frank Kardel (kardel@informatik.uni-erlangen.de)
+ All SCSI disks will from now on be required to send an email
+ notice 24 hours prior to complete hardware failure!
+
diff --git a/usr.sbin/xntpd/patches/patch.2 b/usr.sbin/xntpd/patches/patch.2
new file mode 100644
index 0000000..50a10235
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.2
@@ -0,0 +1,129 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa12171; 26 Jan 94 17:04 EST
+Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa15368;
+ 26 Jan 94 17:00 EST
+Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
+ id AA17953 (5.65c-6/7.3v-FAU); Wed, 26 Jan 1994 23:00:40 +0100
+Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
+ id AA29710 (5.65c-6/7.3m-FAU); Wed, 26 Jan 1994 23:00:37 +0100
+From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
+Message-Id: <199401262200.AA29710@faui43.informatik.uni-erlangen.de>
+Subject: Re: Solaribum
+To: Mills@udel.edu
+Date: Wed, 26 Jan 94 23:00:31 MET
+Cc: Frank.Kardel@informatik.uni-erlangen.de, Piete.Brooks@cl.cam.ac.uk,
+ Paul_Vixie@corpmis.sjc.hw.sony.com
+In-Reply-To: <9401261207.aa10860@huey.udel.edu>; from "Mills@udel.edu" at Jan 26, 94 12:07 pm
+X-Mailer: ELM [version 2.3 PL11]
+
+
+Sorry, guys - i tripped over a backward compatibility
+variable. Thus the second patch:
+
+diff -c include/ntp_control.h:3.6 include/ntp_control.h:3.7
+*** include/ntp_control.h:3.6 Wed Jan 26 22:57:52 1994
+--- include/ntp_control.h Wed Jan 26 22:57:52 1994
+***************
+*** 204,210 ****
+ #define CP_SENT 32
+ #define CP_FILTERROR 33
+ #define CP_FLASH 34
+! #define CP_VARLIST 35
+
+ #define CP_MAXCODE CP_VARLIST
+
+--- 204,211 ----
+ #define CP_SENT 32
+ #define CP_FILTERROR 33
+ #define CP_FLASH 34
+! #define CP_DISP 35
+! #define CP_VARLIST 36
+
+ #define CP_MAXCODE CP_VARLIST
+
+diff -c xntpd/ntp_control.c:3.21 xntpd/ntp_control.c:3.22
+*** xntpd/ntp_control.c:3.21 Wed Jan 26 22:58:30 1994
+--- xntpd/ntp_control.c Wed Jan 26 22:58:31 1994
+***************
+*** 175,181 ****
+ { CP_SENT, RO, "sent" }, /* 32 */
+ { CP_FILTERROR, RO, "filterror" }, /* 33 */
+ { CP_FLASH, RO, "flash" }, /* 34 */
+! { CP_VARLIST, RO, "peer_var_list" }, /* 35 */
+ { 0, EOV, "" }
+ };
+
+--- 175,182 ----
+ { CP_SENT, RO, "sent" }, /* 32 */
+ { CP_FILTERROR, RO, "filterror" }, /* 33 */
+ { CP_FLASH, RO, "flash" }, /* 34 */
+! { CP_DISP, PADDING,"" }, /* 35 */
+! { CP_VARLIST, RO, "peer_var_list" }, /* 36 */
+ { 0, EOV, "" }
+ };
+
+***************
+*** 1298,1303 ****
+--- 1299,1307 ----
+
+ for (k = sys_var; !(k->flags &EOV); k++)
+ {
++ if (k->flags & PADDING)
++ continue;
++
+ i = strlen(k->text);
+ if (s+i+1 >= be)
+ break;
+***************
+*** 1309,1314 ****
+--- 1313,1321 ----
+
+ for (k = ext_sys_var; k && !(k->flags &EOV); k++)
+ {
++ if (k->flags & PADDING)
++ continue;
++
+ ss = k->text;
+ if (!ss)
+ continue;
+***************
+*** 1484,1489 ****
+--- 1491,1499 ----
+
+ for (k = peer_var; !(k->flags &EOV); k++)
+ {
++ if (k->flags & PADDING)
++ continue;
++
+ i = strlen(k->text);
+ if (s+i+1 >= be)
+ break;
+***************
+*** 1594,1599 ****
+--- 1604,1612 ----
+
+ for (k = clock_var; !(k->flags &EOV); k++)
+ {
++ if (k->flags & PADDING)
++ continue;
++
+ i = strlen(k->text);
+ if (s+i+1 >= be)
+ break;
+***************
+*** 1605,1610 ****
+--- 1618,1626 ----
+
+ for (k = clock->kv_list; k && !(k->flags &EOV); k++)
+ {
++ if (k->flags & PADDING)
++ continue;
++
+ ss = k->text;
+ if (!ss)
+ continue;
+--
+ Frank Kardel (kardel@informatik.uni-erlangen.de)
+ All SCSI disks will from now on be required to send an email
+ notice 24 hours prior to complete hardware failure!
+
diff --git a/usr.sbin/xntpd/patches/patch.20 b/usr.sbin/xntpd/patches/patch.20
new file mode 100644
index 0000000..3975507
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.20
@@ -0,0 +1,1031 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa03713; 20 Feb 94 10:36 EST
+Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa02155;
+ 20 Feb 94 10:26 EST
+Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
+ id AA03871 (5.65c-6/7.3v-FAU); Sun, 20 Feb 1994 16:26:26 +0100
+Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
+ id AA04409 (5.65c-6/7.3m-FAU); Sun, 20 Feb 1994 16:26:24 +0100
+From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
+Message-Id: <199402201526.AA04409@faui43.informatik.uni-erlangen.de>
+Subject: 3.3g patches
+To: mills@udel.edu
+Date: Sun, 20 Feb 94 16:26:19 MET
+X-Mailer: ELM [version 2.3 PL11]
+
+Hi, Dave,
+
+here are some more patches. They fix the following:
+ - nroff macros from John Line
+ - parse add/delete leap second (as opposed to just add second)
+ - some rcs ids
+ - linux support
+ - xntpd.8 leap variable documentation
+
+And here we go...
+
+===================================================================
+RCS file: /src/NTP/REPOSITORY/v3/compilers/linux.gcc,v
+retrieving revision 1.2
+diff -c -r1.2 linux.gcc
+*** 1.2 1993/10/10 23:10:03
+--- compilers/linux.gcc 1994/02/20 13:03:27
+***************
+*** 1,2 ****
+ COMPILER= gcc -DUSE_PROTOTYPES -Wall
+! COPTS= -O6 -finline-functions -fomit-frame-pointer
+--- 1,2 ----
+ COMPILER= gcc -DUSE_PROTOTYPES -Wall
+! COPTS= -O2 -finline-functions -fomit-frame-pointer
+===================================================================
+RCS file: /src/NTP/REPOSITORY/v3/doc/notes.txt,v
+retrieving revision 1.3
+diff -c -r1.3 notes.txt
+*** 1.3 1993/08/24 21:24:55
+--- doc/notes.txt 1994/02/20 11:57:24
+***************
+*** 785,791 ****
+ with mode-6 messages is set the leap-second warning bits) and the ntpq
+ program provides generic support for the latter. The leap bits that can be
+ set in the leap_warning variable (up to one month ahead) and in the
+! leap_indication variable have a slighly different encoding than the
+ usual interpretation:
+
+ Value Action
+--- 785,791 ----
+ with mode-6 messages is set the leap-second warning bits) and the ntpq
+ program provides generic support for the latter. The leap bits that can be
+ set in the leap_warning variable (up to one month ahead) and in the
+! leap_indication variable have a slightly different encoding than the
+ usual interpretation:
+
+ Value Action
+===================================================================
+RCS file: /src/NTP/REPOSITORY/v3/doc/ntpdate.8,v
+retrieving revision 3.0
+diff -c -r3.0 ntpdate.8
+*** 3.0 1992/08/14 15:11:44
+--- doc/ntpdate.8 1994/02/20 11:27:53
+***************
+*** 20,32 ****
+ '''
+ ''' Set up \*(-- to give an unbreakable dash;
+ ''' string Tr holds user defined translation string.
+! ''' Bell System Logo is used as a dummy character.
+ '''
+! .tr \(bs-|\(bv\*(Tr
+ .ie n \{\
+! .ds -- \(bs-
+! .if (\n(.H=4u)&(1m=24u) .ds -- \(bs\h'-12u'\(bs\h'-12u'-\" diablo 10 pitch
+! .if (\n(.H=4u)&(1m=20u) .ds -- \(bs\h'-12u'\(bs\h'-8u'-\" diablo 12 pitch
+ .ds L" ""
+ .ds R" ""
+ .ds L' '
+--- 20,32 ----
+ '''
+ ''' Set up \*(-- to give an unbreakable dash;
+ ''' string Tr holds user defined translation string.
+! ''' Greek uppercase omega is used as a dummy character.
+ '''
+! .tr \(*W-|\(bv\*(Tr
+ .ie n \{\
+! .ds -- \(*W-
+! .if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+! .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+ .ds L" ""
+ .ds R" ""
+ .ds L' '
+===================================================================
+RCS file: /src/NTP/REPOSITORY/v3/doc/ntpq.8,v
+retrieving revision 3.3
+diff -c -r3.3 ntpq.8
+*** 3.3 1993/10/22 14:26:57
+--- doc/ntpq.8 1994/02/20 11:27:55
+***************
+*** 20,32 ****
+ '''
+ ''' Set up \*(-- to give an unbreakable dash;
+ ''' string Tr holds user defined translation string.
+! ''' Bell System Logo is used as a dummy character.
+ '''
+! .tr \(bs-|\(bv\*(Tr
+ .ie n \{\
+! .ds -- \(bs-
+! .if (\n(.H=4u)&(1m=24u) .ds -- \(bs\h'-12u'\(bs\h'-12u'-\" diablo 10 pitch
+! .if (\n(.H=4u)&(1m=20u) .ds -- \(bs\h'-12u'\(bs\h'-8u'-\" diablo 12 pitch
+ .ds L" ""
+ .ds R" ""
+ .ds L' '
+--- 20,32 ----
+ '''
+ ''' Set up \*(-- to give an unbreakable dash;
+ ''' string Tr holds user defined translation string.
+! ''' Greek uppercase omega is used as a dummy character.
+ '''
+! .tr \(*W-|\(bv\*(Tr
+ .ie n \{\
+! .ds -- \(*W-
+! .if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+! .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+ .ds L" ""
+ .ds R" ""
+ .ds L' '
+===================================================================
+RCS file: /src/NTP/REPOSITORY/v3/doc/ntptrace.8,v
+retrieving revision 1.1.1.2
+diff -c -r1.1.1.2 ntptrace.8
+*** 1.1.1.2 1993/01/26 18:55:43
+--- doc/ntptrace.8 1994/02/20 11:27:58
+***************
+*** 20,32 ****
+ '''
+ ''' Set up \*(-- to give an unbreakable dash;
+ ''' string Tr holds user defined translation string.
+! ''' Bell System Logo is used as a dummy character.
+ '''
+! .tr \(bs-|\(bv\*(Tr
+ .ie n \{\
+! .ds -- \(bs-
+! .if (\n(.H=4u)&(1m=24u) .ds -- \(bs\h'-12u'\(bs\h'-12u'-\" diablo 10 pitch
+! .if (\n(.H=4u)&(1m=20u) .ds -- \(bs\h'-12u'\(bs\h'-8u'-\" diablo 12 pitch
+ .ds L" ""
+ .ds R" ""
+ .ds L' '
+--- 20,32 ----
+ '''
+ ''' Set up \*(-- to give an unbreakable dash;
+ ''' string Tr holds user defined translation string.
+! ''' Greek uppercase omega is used as a dummy character.
+ '''
+! .tr \(*W-|\(bv\*(Tr
+ .ie n \{\
+! .ds -- \(*W-
+! .if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+! .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+ .ds L" ""
+ .ds R" ""
+ .ds L' '
+===================================================================
+RCS file: /src/NTP/REPOSITORY/v3/doc/tickadj.8,v
+retrieving revision 3.0
+diff -c -r3.0 tickadj.8
+*** 3.0 1992/08/14 15:11:53
+--- doc/tickadj.8 1994/02/20 11:28:00
+***************
+*** 20,32 ****
+ '''
+ ''' Set up \*(-- to give an unbreakable dash;
+ ''' string Tr holds user defined translation string.
+! ''' Bell System Logo is used as a dummy character.
+ '''
+! .tr \(bs-|\(bv\*(Tr
+ .ie n \{\
+! .ds -- \(bs-
+! .if (\n(.H=4u)&(1m=24u) .ds -- \(bs\h'-12u'\(bs\h'-12u'-\" diablo 10 pitch
+! .if (\n(.H=4u)&(1m=20u) .ds -- \(bs\h'-12u'\(bs\h'-8u'-\" diablo 12 pitch
+ .ds L" ""
+ .ds R" ""
+ .ds L' '
+--- 20,32 ----
+ '''
+ ''' Set up \*(-- to give an unbreakable dash;
+ ''' string Tr holds user defined translation string.
+! ''' Greek uppercase omega is used as a dummy character.
+ '''
+! .tr \(*W-|\(bv\*(Tr
+ .ie n \{\
+! .ds -- \(*W-
+! .if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+! .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+ .ds L" ""
+ .ds R" ""
+ .ds L' '
+===================================================================
+RCS file: /src/NTP/REPOSITORY/v3/doc/xntpd.8,v
+retrieving revision 3.24
+diff -c -r3.24 xntpd.8
+*** 3.24 1994/02/02 16:42:25
+--- doc/xntpd.8 1994/02/20 11:57:28
+***************
+*** 20,32 ****
+ '''
+ ''' Set up \*(-- to give an unbreakable dash;
+ ''' string Tr holds user defined translation string.
+! ''' Bell System Logo is used as a dummy character.
+ '''
+! .tr \(bs-|\(bv\*(Tr
+ .ie n \{\
+! .ds -- \(bs-
+! .if (\n(.H=4u)&(1m=24u) .ds -- \(bs\h'-12u'\(bs\h'-12u'-\" diablo 10 pitch
+! .if (\n(.H=4u)&(1m=20u) .ds -- \(bs\h'-12u'\(bs\h'-8u'-\" diablo 12 pitch
+ .ds L" ""
+ .ds R" ""
+ .ds L' '
+--- 20,32 ----
+ '''
+ ''' Set up \*(-- to give an unbreakable dash;
+ ''' string Tr holds user defined translation string.
+! ''' Greek uppercase omega is used as a dummy character.
+ '''
+! .tr \(*W-|\(bv\*(Tr
+ .ie n \{\
+! .ds -- \(*W-
+! .if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+! .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+ .ds L" ""
+ .ds R" ""
+ .ds L' '
+***************
+*** 374,380 ****
+ Certain changes can be made to the
+ .I xntpd
+ server via mode 6 control messages, in particular the setting of
+! leap second indications in a server with a radio clock. The
+ .B controlkey
+ statement specifies an encription key number to be used for authenticating
+ such messages. Omitting this statement will cause control messages
+--- 374,381 ----
+ Certain changes can be made to the
+ .I xntpd
+ server via mode 6 control messages, in particular the setting of
+! leap second indications in a server with a radio clock.
+! The
+ .B controlkey
+ statement specifies an encription key number to be used for authenticating
+ such messages. Omitting this statement will cause control messages
+***************
+*** 1401,1406 ****
+--- 1402,1432 ----
+ If flag3 is set, then the sample information is dumped.
+ If flag4 is set, then the input data is smoothed, and all data
+ points are used.
++ .PP
++ .SH VARIABLES
++ Most variables used by the NTP protocol can be examined with the xntpdc
++ (mode 7 messages) and the ntpq (mode 6 messages). Currently very few variables
++ can be modified via mode 6 messages. These variables are either created with the
++ .I setvar
++ directive or the leap warning variables. The leap warning bits that can be
++ set in the
++ .B leapwarning
++ variable (up to one month ahead). Both, the
++ .B leapwarning and in the
++ .B leapindication
++ variable, have a slightly different encoding than the usual
++ .B leap
++ bits interpretation:
++ .P
++ .Ip 00 8
++ The daemon passes the leap bits of its synchronisation source (usual mode of
++ operation).
++ .Ip 01/10 8
++ A leap second is added/deleted (operator forced leap second).
++ .Ip 11 8
++ Leap information from the sychronisation source is ignored (thus LEAP_NOWARNING
++ is passed on).
++ .PP
+ .SH FILES
+ .Ip /etc/ntp.conf 20
+ the default name of the configuration file
+===================================================================
+RCS file: /src/NTP/REPOSITORY/v3/doc/xntpdc.8,v
+retrieving revision 3.4
+diff -c -r3.4 xntpdc.8
+*** 3.4 1994/02/02 15:54:14
+--- doc/xntpdc.8 1994/02/20 11:28:06
+***************
+*** 20,32 ****
+ '''
+ ''' Set up \*(-- to give an unbreakable dash;
+ ''' string Tr holds user defined translation string.
+! ''' Bell System Logo is used as a dummy character.
+ '''
+! .tr \(bs-|\(bv\*(Tr
+ .ie n \{\
+! .ds -- \(bs-
+! .if (\n(.H=4u)&(1m=24u) .ds -- \(bs\h'-12u'\(bs\h'-12u'-\" diablo 10 pitch
+! .if (\n(.H=4u)&(1m=20u) .ds -- \(bs\h'-12u'\(bs\h'-8u'-\" diablo 12 pitch
+ .ds L" ""
+ .ds R" ""
+ .ds L' '
+--- 20,32 ----
+ '''
+ ''' Set up \*(-- to give an unbreakable dash;
+ ''' string Tr holds user defined translation string.
+! ''' Greek uppercase omega is used as a dummy character.
+ '''
+! .tr \(*W-|\(bv\*(Tr
+ .ie n \{\
+! .ds -- \(*W-
+! .if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+! .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+ .ds L" ""
+ .ds R" ""
+ .ds L' '
+===================================================================
+RCS file: /src/NTP/REPOSITORY/v3/hints/linux,v
+retrieving revision 1.2
+diff -c -r1.2 linux
+*** 1.2 1994/02/01 23:19:26
+--- hints/linux 1994/02/20 11:26:44
+***************
+*** 1,5 ****
+
+! Requirements: kernel 0.99.14y or newer, libc 4.5.8 or newer
+ ------------
+
+ With this configuration, xntp should build an run right out of the box
+--- 1,5 ----
+
+! Requirements: kernel 0.99.14y or newer, libc 4.5.20 or newer
+ ------------
+
+ With this configuration, xntp should build an run right out of the box
+***************
+*** 7,9 ****
+--- 7,14 ----
+ versions of the kernel or libc, or have any other question not covered in the
+ READMEs / hint files (sorry, necessary comment in the Linux community ;-) feel
+ free to ask me (duwe@informatik.uni-erlangen.de)
++
++ [NOTE: libc-4.5.20 is (or was ? ;-) a beta testing release, but the first
++ binary compiled under the appropriate kernel. Get this one from
++ tsx-11:.../GCC/private/dontuse , compile 4.5.19 yourself or wait for the next
++ puplic relase after 4.5.20]
+===================================================================
+RCS file: /src/NTP/REPOSITORY/v3/include/parse.h,v
+retrieving revision 3.14
+diff -c -r3.14 parse.h
+*** 3.14 1994/01/28 14:03:35
+--- include/parse.h 1994/02/20 13:04:26
+***************
+*** 81,115 ****
+ /*
+ * state flags
+ */
+! #define PARSEB_ANNOUNCE 0x0001 /* switch time zone warning (DST switch) */
+! #define PARSEB_POWERUP 0x0002 /* no synchronisation */
+! #define PARSEB_NOSYNC 0x0004 /* timecode currently not confirmed */
+! #define PARSEB_DST 0x0008 /* DST in effect */
+! #define PARSEB_UTC 0x0010 /* UTC time */
+! #define PARSEB_LEAP 0x0020 /* LEAP warning (1 hour prior to occurence) */
+! #define PARSEB_ALTERNATE 0x0040 /* alternate antenna used */
+! #define PARSEB_POSITION 0x0080 /* position available */
+! #define PARSEB_LEAPSECOND 0x0100 /* actual leap second */
+!
+! #define PARSEB_S_LEAP 0x0200 /* supports LEAP */
+! #define PARSEB_S_ANTENNA 0x0400 /* supports antenna information */
+! #define PARSEB_S_PPS 0x0800 /* supports PPS time stamping */
+! #define PARSEB_S_POSITION 0x1000 /* supports position information (GPS) */
+
+! #define PARSEB_TIMECODE 0x2000 /* valid time code sample */
+! #define PARSEB_PPS 0x4000 /* valid PPS sample */
+
+ #define PARSE_TCINFO (PARSEB_ANNOUNCE|PARSEB_POWERUP|PARSEB_NOSYNC|PARSEB_DST|\
+! PARSEB_UTC|PARSEB_LEAP|PARSEB_ALTERNATE|PARSEB_S_LEAP|\
+ PARSEB_S_LOCATION|PARSEB_TIMECODE)
+
+! #define PARSE_POWERUP(x) ((x) & PARSEB_POWERUP)
+! #define PARSE_NOSYNC(x) (((x) & (PARSEB_POWERUP|PARSEB_NOSYNC)) == PARSEB_NOSYNC)
+! #define PARSE_SYNC(x) (((x) & (PARSEB_POWERUP|PARSEB_NOSYNC)) == 0)
+! #define PARSE_ANNOUNCE(x) ((x) & PARSEB_ANNOUNCE)
+! #define PARSE_DST(x) ((x) & PARSEB_DST)
+ #define PARSE_UTC(x) ((x) & PARSEB_UTC)
+! #define PARSE_LEAP(x) (PARSE_SYNC(x) && ((x) & PARSEB_LEAP))
+ #define PARSE_ALTERNATE(x) ((x) & PARSEB_ALTERNATE)
+ #define PARSE_LEAPSECOND(x) (PARSE_SYNC(x) && ((x) & PARSEB_LEAP_SECOND))
+
+--- 81,135 ----
+ /*
+ * state flags
+ */
+! #define PARSEB_POWERUP 0x00000001 /* no synchronisation */
+! #define PARSEB_NOSYNC 0x00000002 /* timecode currently not confirmed */
+
+! /*
+! * time zone information
+! */
+! #define PARSEB_ANNOUNCE 0x00000010 /* switch time zone warning (DST switch) */
+! #define PARSEB_DST 0x00000020 /* DST in effect */
+! #define PARSEB_UTC 0x00000040 /* UTC time */
+!
+! /*
+! * leap information
+! */
+! #define PARSEB_LEAPDEL 0x00000100 /* LEAP deletion warning */
+! #define PARSEB_LEAPADD 0x00000200 /* LEAP addition warning */
+! #define PARSEB_LEAPS 0x00000300 /* LEAP warnings */
+! #define PARSEB_LEAPSECOND 0x00000400 /* actual leap second */
+! /*
+! * optional status information
+! */
+! #define PARSEB_ALTERNATE 0x00001000 /* alternate antenna used */
+! #define PARSEB_POSITION 0x00002000 /* position available */
+!
+! /*
+! * feature information
+! */
+! #define PARSEB_S_LEAP 0x00010000 /* supports LEAP */
+! #define PARSEB_S_ANTENNA 0x00020000 /* supports antenna information */
+! #define PARSEB_S_PPS 0x00040000 /* supports PPS time stamping */
+! #define PARSEB_S_POSITION 0x00080000 /* supports position information (GPS) */
+!
+! /*
+! * time stamp availality
+! */
+! #define PARSEB_TIMECODE 0x10000000 /* valid time code sample */
+! #define PARSEB_PPS 0x20000000 /* valid PPS sample */
+
+ #define PARSE_TCINFO (PARSEB_ANNOUNCE|PARSEB_POWERUP|PARSEB_NOSYNC|PARSEB_DST|\
+! PARSEB_UTC|PARSEB_LEAPS|PARSEB_ALTERNATE|PARSEB_S_LEAP|\
+ PARSEB_S_LOCATION|PARSEB_TIMECODE)
+
+! #define PARSE_POWERUP(x) ((x) & PARSEB_POWERUP)
+! #define PARSE_NOSYNC(x) (((x) & (PARSEB_POWERUP|PARSEB_NOSYNC)) == PARSEB_NOSYNC)
+! #define PARSE_SYNC(x) (((x) & (PARSEB_POWERUP|PARSEB_NOSYNC)) == 0)
+! #define PARSE_ANNOUNCE(x) ((x) & PARSEB_ANNOUNCE)
+! #define PARSE_DST(x) ((x) & PARSEB_DST)
+ #define PARSE_UTC(x) ((x) & PARSEB_UTC)
+! #define PARSE_LEAPADD(x) (PARSE_SYNC(x) && (((x) & PARSEB_LEAPS) == PARSEB_LEAPADD))
+! #define PARSE_LEAPDEL(x) (PARSE_SYNC(x) && (((x) & PARSEB_LEAPS) == PARSEB_LEAPDEL))
+ #define PARSE_ALTERNATE(x) ((x) & PARSEB_ALTERNATE)
+ #define PARSE_LEAPSECOND(x) (PARSE_SYNC(x) && ((x) & PARSEB_LEAP_SECOND))
+
+***************
+*** 118,126 ****
+ #define PARSE_S_PPS(x) ((x) & PARSEB_S_PPS)
+ #define PARSE_S_POSITION(x) ((x) & PARSEB_S_POSITION)
+
+! #define PARSE_TIMECODE(x) ((x) & PARSEB_TIMECODE)
+ #define PARSE_PPS(x) ((x) & PARSEB_PPS)
+! #define PARSE_POSITION(x) ((x) & PARSEB_POSITION)
+
+ /*
+ * operation flags - some are also fudge flags
+--- 138,146 ----
+ #define PARSE_S_PPS(x) ((x) & PARSEB_S_PPS)
+ #define PARSE_S_POSITION(x) ((x) & PARSEB_S_POSITION)
+
+! #define PARSE_TIMECODE(x) ((x) & PARSEB_TIMECODE)
+ #define PARSE_PPS(x) ((x) & PARSEB_PPS)
+! #define PARSE_POSITION(x) ((x) & PARSEB_POSITION)
+
+ /*
+ * operation flags - some are also fudge flags
+===================================================================
+RCS file: /src/NTP/REPOSITORY/v3/parse/README.new_clocks,v
+retrieving revision 3.3
+diff -c -r3.3 README.new_clocks
+*** 3.3 1994/02/17 20:09:58
+--- parse/README.new_clocks 1994/02/20 13:04:34
+***************
+*** 37,43 ****
+
+ PARSEB_DST DST in effect (informational only)
+ PARSEB_UTC timecode contains UTC time (informational only)
+! PARSEB_LEAP LEAP warning (prior to leap happening - must set when imminent)
+ PARSEB_ALTERNATE backup transmitter (informational only)
+ PARSEB_POSITION geographic position available (informational only)
+ PARSEB_LEAPSECOND actual leap second (this time code is the leap
+--- 37,46 ----
+
+ PARSEB_DST DST in effect (informational only)
+ PARSEB_UTC timecode contains UTC time (informational only)
+! PARSEB_LEAPADD LEAP addition warning (prior to leap happening - must set when imminent)
+! also used for time code that do not encode the
+! direction (as this is currently the default).
+! PARSEB_LEAPDEL LEAP deletion warning (prior to leap happening - must set when imminent)
+ PARSEB_ALTERNATE backup transmitter (informational only)
+ PARSEB_POSITION geographic position available (informational only)
+ PARSEB_LEAPSECOND actual leap second (this time code is the leap
+===================================================================
+RCS file: /src/NTP/REPOSITORY/v3/parse/clk_meinberg.c,v
+retrieving revision 3.13
+diff -c -r3.13 clk_meinberg.c
+*** 3.13 1994/02/02 17:45:21
+--- parse/clk_meinberg.c 1994/02/20 13:04:37
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_MEINBERG)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_meinberg.c,v 3.13 1994/02/02 17:45:21 kardel Exp
+ *
+! * clk_meinberg.c,v 3.13 1994/02/02 17:45:21 kardel Exp
+ *
+ * Meinberg clock support
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_MEINBERG)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_meinberg.c,v 3.14 1994/02/20 13:04:37 kardel Exp
+ *
+! * clk_meinberg.c,v 3.14 1994/02/20 13:04:37 kardel Exp
+ *
+ * Meinberg clock support
+ *
+***************
+*** 284,291 ****
+ clock->flags |= PARSEB_S_LEAP;
+ clock->flags |= PARSEB_S_ANTENNA;
+
+ if (f[4] == 'A')
+! clock->flags |= PARSEB_LEAP;
+
+ if (f[5] == 'R')
+ clock->flags |= PARSEB_ALTERNATE;
+--- 284,296 ----
+ clock->flags |= PARSEB_S_LEAP;
+ clock->flags |= PARSEB_S_ANTENNA;
+
++ /*
++ * DCF77 does not encode the direction -
++ * so we take the current default -
++ * earth slowing down
++ */
+ if (f[4] == 'A')
+! clock->flags |= PARSEB_LEAPADD;
+
+ if (f[5] == 'R')
+ clock->flags |= PARSEB_ALTERNATE;
+***************
+*** 394,402 ****
+
+ /*
+ * oncoming leap second
+ */
+ if (f[5] == 'A')
+! clock->flags |= PARSEB_LEAP;
+
+ /*
+ * this is the leap second
+--- 399,410 ----
+
+ /*
+ * oncoming leap second
++ * data format does not (yet) specify whether
++ * to add or to delete a second - thus we
++ * pick the current default
+ */
+ if (f[5] == 'A')
+! clock->flags |= PARSEB_LEAPADD;
+
+ /*
+ * this is the leap second
+***************
+*** 413,419 ****
+ /*
+ * History:
+ *
+! * clk_meinberg.c,v
+ * Revision 3.13 1994/02/02 17:45:21 kardel
+ * rcs ids fixed
+ *
+--- 421,430 ----
+ /*
+ * History:
+ *
+! * clk_meinberg.c,v
+! * Revision 3.14 1994/02/20 13:04:37 kardel
+! * parse add/delete second support
+! *
+ * Revision 3.13 1994/02/02 17:45:21 kardel
+ * rcs ids fixed
+ *
+===================================================================
+RCS file: /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v
+retrieving revision 3.11
+diff -c -r3.11 clk_rawdcf.c
+*** 3.11 1994/02/02 17:45:23
+--- parse/clk_rawdcf.c 1994/02/20 13:04:39
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.11 1994/02/02 17:45:23 kardel Exp
+ *
+! * clk_rawdcf.c,v 3.11 1994/02/02 17:45:23 kardel Exp
+ *
+ * Raw DCF77 pulse clock support
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.12 1994/02/20 13:04:39 kardel Exp
+ *
+! * clk_rawdcf.c,v 3.12 1994/02/20 13:04:39 kardel Exp
+ *
+ * Raw DCF77 pulse clock support
+ *
+***************
+*** 278,284 ****
+ clock->flags |= PARSEB_ANNOUNCE;
+
+ if (ext_bf(buffer, DCF_A2, dcfparam->zerobits))
+! clock->flags |= PARSEB_LEAP;
+
+ if (ext_bf(buffer, DCF_R, dcfparam->zerobits))
+ clock->flags |= PARSEB_ALTERNATE;
+--- 278,284 ----
+ clock->flags |= PARSEB_ANNOUNCE;
+
+ if (ext_bf(buffer, DCF_A2, dcfparam->zerobits))
+! clock->flags |= PARSEB_LEAPADD; /* default: DCF77 data format deficiency */
+
+ if (ext_bf(buffer, DCF_R, dcfparam->zerobits))
+ clock->flags |= PARSEB_ALTERNATE;
+***************
+*** 528,534 ****
+ /*
+ * History:
+ *
+! * clk_rawdcf.c,v
+ * Revision 3.11 1994/02/02 17:45:23 kardel
+ * rcs ids fixed
+ *
+--- 528,537 ----
+ /*
+ * History:
+ *
+! * clk_rawdcf.c,v
+! * Revision 3.12 1994/02/20 13:04:39 kardel
+! * parse add/delete second support
+! *
+ * Revision 3.11 1994/02/02 17:45:23 kardel
+ * rcs ids fixed
+ *
+===================================================================
+RCS file: /src/NTP/REPOSITORY/v3/parse/clk_schmid.c,v
+retrieving revision 3.12
+diff -c -r3.12 clk_schmid.c
+*** 3.12 1994/02/02 17:45:25
+--- parse/clk_schmid.c 1994/02/20 13:04:41
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_SCHMID)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_schmid.c,v 3.12 1994/02/02 17:45:25 kardel Exp
+ *
+! * clk_schmid.c,v 3.12 1994/02/02 17:45:25 kardel Exp
+ *
+ * Schmid clock support
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_SCHMID)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_schmid.c,v 3.13 1994/02/20 13:04:41 kardel Exp
+ *
+! * clk_schmid.c,v 3.13 1994/02/20 13:04:41 kardel Exp
+ *
+ * Schmid clock support
+ *
+***************
+*** 152,158 ****
+
+ if (buffer[8] & WS_LEAP)
+ {
+! clock->flags |= PARSEB_LEAP;
+ }
+ }
+
+--- 152,158 ----
+
+ if (buffer[8] & WS_LEAP)
+ {
+! clock->flags |= PARSEB_LEAPADD; /* default: DCF77 data format deficiency */
+ }
+ }
+
+***************
+*** 167,173 ****
+ /*
+ * History:
+ *
+! * clk_schmid.c,v
+ * Revision 3.12 1994/02/02 17:45:25 kardel
+ * rcs ids fixed
+ *
+--- 167,176 ----
+ /*
+ * History:
+ *
+! * clk_schmid.c,v
+! * Revision 3.13 1994/02/20 13:04:41 kardel
+! * parse add/delete second support
+! *
+ * Revision 3.12 1994/02/02 17:45:25 kardel
+ * rcs ids fixed
+ *
+===================================================================
+RCS file: /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v
+retrieving revision 3.47
+diff -c -r3.47 refclock_parse.c
+*** 3.47 1994/02/02 17:44:30
+--- xntpd/refclock_parse.c 1994/02/20 13:26:00
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.47 1994/02/02 17:44:30 kardel Exp
+ *
+! * refclock_parse.c,v 3.47 1994/02/02 17:44:30 kardel Exp
+ *
+ * generic reference clock driver for receivers
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp
+ *
+! * refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp
+ *
+ * generic reference clock driver for receivers
+ *
+***************
+*** 129,135 ****
+ #include "parse.h"
+
+ #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
+! static char rcsid[]="refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp";
+ #endif
+
+ /**===========================================================================
+--- 129,135 ----
+ #include "parse.h"
+
+ #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
+! static char rcsid[]="refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp";
+ #endif
+
+ /**===========================================================================
+***************
+*** 1706,1712 ****
+ { PARSEB_NOSYNC, "TIME CODE NOT CONFIRMED" },
+ { PARSEB_DST, "DST" },
+ { PARSEB_UTC, "UTC DISPLAY" },
+! { PARSEB_LEAP, "LEAP WARNING" },
+ { PARSEB_LEAPSECOND, "LEAP SECOND" },
+ { PARSEB_ALTERNATE,"ALTERNATE ANTENNA" },
+ { PARSEB_TIMECODE, "TIME CODE" },
+--- 1706,1713 ----
+ { PARSEB_NOSYNC, "TIME CODE NOT CONFIRMED" },
+ { PARSEB_DST, "DST" },
+ { PARSEB_UTC, "UTC DISPLAY" },
+! { PARSEB_LEAPADD, "LEAP ADD WARNING" },
+! { PARSEB_LEAPDEL, "LEAP DELETE WARNING" },
+ { PARSEB_LEAPSECOND, "LEAP SECOND" },
+ { PARSEB_ALTERNATE,"ALTERNATE ANTENNA" },
+ { PARSEB_TIMECODE, "TIME CODE" },
+***************
+*** 2539,2547 ****
+ parse_leap()
+ {
+ /*
+- * PARSE does encode a leap warning... we are aware but not afraid of that
+- * as long as we get a little help for the direction from the operator until
+ * PARSE encodes the LEAP correction direction.
+ */
+ }
+
+--- 2540,2549 ----
+ parse_leap()
+ {
+ /*
+ * PARSE encodes the LEAP correction direction.
++ * For timecodes that do not pass on the leap correction direction
++ * the default PARSEB_LEAPADD must be used. It may then be modified
++ * with a fudge flag (flag2).
+ */
+ }
+
+***************
+*** 2821,2827 ****
+ sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
+
+ tt = add_var(&out->kv_list, 128, RO);
+! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp\"");
+
+ out->lencode = strlen(outstatus);
+ out->lastcode = outstatus;
+--- 2823,2829 ----
+ sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
+
+ tt = add_var(&out->kv_list, 128, RO);
+! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp\"");
+
+ out->lencode = strlen(outstatus);
+ out->lastcode = outstatus;
+***************
+*** 3245,3258 ****
+ }
+ else
+ {
+! if (PARSE_LEAP(parsetime->parse_state))
+ {
+ leap = (parse->flags & PARSE_LEAP_DELETE) ? LEAP_DELSECOND : LEAP_ADDSECOND;
+ }
+ else
+! {
+! leap = LEAP_NOWARNING;
+! }
+ }
+
+ refclock_receive(parse->peer, &off, 0, LFPTOFP(&dispersion), &reftime, &rectime, leap);
+--- 3247,3270 ----
+ }
+ else
+ {
+! if (PARSE_LEAPADD(parsetime->parse_state))
+ {
++ /*
++ * we pick this state also for time code that pass leap warnings
++ * without direction information (as earth is currently slowing
++ * down).
++ */
+ leap = (parse->flags & PARSE_LEAP_DELETE) ? LEAP_DELSECOND : LEAP_ADDSECOND;
+ }
+ else
+! if (PARSE_LEAPDEL(parsetime->parse_state))
+! {
+! leap = LEAP_DELSECOND;
+! }
+! else
+! {
+! leap = LEAP_NOWARNING;
+! }
+ }
+
+ refclock_receive(parse->peer, &off, 0, LFPTOFP(&dispersion), &reftime, &rectime, leap);
+***************
+*** 3395,3401 ****
+ /*
+ * History:
+ *
+! * refclock_parse.c,v
+ * Revision 3.47 1994/02/02 17:44:30 kardel
+ * rcs ids fixed
+ *
+--- 3407,3419 ----
+ /*
+ * History:
+ *
+! * refclock_parse.c,v
+! * Revision 3.49 1994/02/20 13:26:00 kardel
+! * rcs id cleanup
+! *
+! * Revision 3.48 1994/02/20 13:04:56 kardel
+! * parse add/delete second support
+! *
+ * Revision 3.47 1994/02/02 17:44:30 kardel
+ * rcs ids fixed
+ *
+*** parse/util/parsetest.c Sun Feb 20 15:54:11 1994
+--- parse/util/parsetest.c Sun Feb 20 14:04:46 1994
+***************
+*** 1,7 ****
+ /*
+! * /src/NTP/REPOSITORY/v3/kernel/parsetest.c,v 3.4 1993/03/17 17:16:57 kardel Exp
+ *
+! * parsetest.c,v 3.10 1994/01/23 17:22:18 kardel Exp
+ *
+ * Copyright (c) 1989,1990,1991,1992,1993,1994
+ * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
+--- 1,7 ----
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/util/parsetest.c,v 3.13 1994/02/20 13:04:46 kardel Exp
+ *
+! * parsetest.c,v 3.13 1994/02/20 13:04:46 kardel Exp
+ *
+ * Copyright (c) 1989,1990,1991,1992,1993,1994
+ * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
+***************
+*** 10,26 ****
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+! * parsetest.c,v
+! * Revision 3.4 1993/03/17 17:16:57 kardel
+! * DEC OSF/1 ALPHA Integration - 930314
+ *
+! * Revision 3.3 1993/01/18 09:24:33 kardel
+! * updated copyright conditions in conjunction with
+! * conditions set up in the COPYRIGHT file
+ *
+- * Revision 3.2 1993/01/17 13:43:00 kardel
+- * 1993 initial update
+- *
+ */
+
+ #ifndef STREAM
+--- 10,22 ----
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+! * parsetest.c,v
+! * Revision 3.13 1994/02/20 13:04:46 kardel
+! * parse add/delete second support
+ *
+! * Revision 3.12 1994/02/02 17:45:51 kardel
+! * rcs ids fixed
+ *
+ */
+
+ #ifndef STREAM
+***************
+*** 199,205 ****
+ parsetime_t parsetime;
+ struct strioctl strioc;
+
+! printf("parsetest.c,v 3.10 1994/01/23 17:22:18 kardel Exp\n");
+
+ while (ioctl(fd, I_POP, 0) == 0)
+ ;
+--- 195,201 ----
+ parsetime_t parsetime;
+ struct strioctl strioc;
+
+! printf("parsetest.c,v 3.13 1994/02/20 13:04:46 kardel Exp\n");
+
+ while (ioctl(fd, I_POP, 0) == 0)
+ ;
+===================================================================
+RCS file: /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v
+retrieving revision 3.16
+diff -c -r3.16 parsestreams.c
+*** 3.16 1994/02/15 22:39:50
+--- parse/parsestreams.c 1994/02/20 15:18:02
+***************
+*** 1,7 ****
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.16 1994/02/15 22:39:50 kardel Exp
+ *
+! * parsestreams.c,v 3.16 1994/02/15 22:39:50 kardel Exp
+ *
+ * STREAMS module for reference clocks
+ * (SunOS4.x)
+--- 1,7 ----
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.17 1994/02/20 15:18:02 kardel Exp
+ *
+! * parsestreams.c,v 3.17 1994/02/20 15:18:02 kardel Exp
+ *
+ * STREAMS module for reference clocks
+ * (SunOS4.x)
+***************
+*** 16,22 ****
+ */
+
+ #ifndef lint
+! static char rcsid[] = "parsestreams.c,v 3.12 1994/01/25 19:05:30 kardel Exp";
+ #endif
+
+ #include "sys/types.h"
+--- 16,22 ----
+ */
+
+ #ifndef lint
+! static char rcsid[] = "parsestreams.c,v 3.17 1994/02/20 15:18:02 kardel Exp";
+ #endif
+
+ #include "sys/types.h"
+***************
+*** 195,201 ****
+ }
+ else
+ {
+! static char revision[] = "3.12";
+ char *s, *S, *t;
+
+ strncpy(ifm->f_name, mname, FMNAMESZ);
+--- 195,201 ----
+ }
+ else
+ {
+! static char revision[] = "3.17";
+ char *s, *S, *t;
+
+ strncpy(ifm->f_name, mname, FMNAMESZ);
+***************
+*** 1259,1265 ****
+ /*
+ * History:
+ *
+! * parsestreams.c,v
+ * Revision 3.16 1994/02/15 22:39:50 kardel
+ * memory leak on open failure closed
+ *
+--- 1259,1268 ----
+ /*
+ * History:
+ *
+! * parsestreams.c,v
+! * Revision 3.17 1994/02/20 15:18:02 kardel
+! * rcs id cleanup
+! *
+ * Revision 3.16 1994/02/15 22:39:50 kardel
+ * memory leak on open failure closed
+ *
+--
+ Frank Kardel (kardel@informatik.uni-erlangen.de)
+ All SCSI disks will from now on be required to send an email
+ notice 24 hours prior to complete hardware failure!
+
diff --git a/usr.sbin/xntpd/patches/patch.21 b/usr.sbin/xntpd/patches/patch.21
new file mode 100644
index 0000000..9299971
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.21
@@ -0,0 +1,54 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa25363; 23 Feb 94 18:50 EST
+Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa28210;
+ 23 Feb 94 18:44 EST
+Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
+ id AA07903 (5.65c-6/7.3v-FAU); Thu, 24 Feb 1994 00:44:18 +0100
+Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
+ id AA19013 (5.65c-6/7.3m-FAU); Thu, 24 Feb 1994 00:44:17 +0100
+From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
+Message-Id: <199402232344.AA19013@faui43.informatik.uni-erlangen.de>
+Subject: TRAK clock
+To: mills@udel.edu
+Date: Thu, 24 Feb 94 0:44:12 MET
+X-Mailer: ELM [version 2.3 PL11]
+
+Hi, Dave - some obvious things about the TRAK clock:
+ - please removed the 4 ^A at the end of the
+ xntpd/reflock_trak.c file (email leftovers).
+ - add following refclocks/rclk.TRAK file
+
+#!/bin/sh -
+CMD="$1"
+shift;
+
+. refclocks/setup
+
+case "$CMD" in
+ info)
+ echo " TRAK - TRAK 8810 GPS station clock"
+ ;;
+ check)
+ if check "$RCONFIG" '$0 ~ /TRAK/'; then
+ echo "TRAK - TRAK 8810 GPS station clock"
+ fi
+ ;;
+ config)
+ if check "$REFCONF" '$0 ~ /TRAK/' ||
+ ( [ ! "$REFCONF" ] && query "Include TRAK 8810 GPS station clock (TRAK)" n); then
+ if check "$PPSFEATURES" '$0 ~ /CD/' &&
+ [ "$PPSOK" -eq 1 ] &&
+ (check "$REFCONF" '$0 ~ /TRAKPPS/' ||
+ ( [ ! "$REFCONF" ] && query " Use TRAK for PPS" n)); then
+ echo "-DTRAKPPS" >> $RCONFIG
+ else
+ echo "-DTRAK" >> $RCONFIG
+ fi
+ fi
+ ;;
+esac
+--
+ Frank Kardel (kardel@informatik.uni-erlangen.de)
+ All SCSI disks will from now on be required to send an email
+ notice 24 hours prior to complete hardware failure!
+
diff --git a/usr.sbin/xntpd/patches/patch.22 b/usr.sbin/xntpd/patches/patch.22
new file mode 100644
index 0000000..8b4296c
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.22
@@ -0,0 +1,296 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa02110; 24 Feb 94 18:54 EST
+Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa13897;
+ 24 Feb 94 18:53 EST
+Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
+ id AA27796 (5.65c-6/7.3v-FAU); Fri, 25 Feb 1994 00:53:32 +0100
+Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
+ id AA16114 (5.65c-6/7.3m-FAU); Fri, 25 Feb 1994 00:53:31 +0100
+From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
+Message-Id: <199402242353.AA16114@faui43.informatik.uni-erlangen.de>
+Subject: patches (parse pps/pll control)
+To: mills@udel.edu
+Date: Fri, 25 Feb 94 0:52:59 MET
+X-Mailer: ELM [version 2.3 PL11]
+
+Hi, here are some patches.
+
+pps pll control is nor supported by parse.
+pps output variable are readable via mode 6 messages.
+
+diff -c v3/parse/parsestreams.c:1.1.1.10 v3/parse/parsestreams.c:3.19
+*** v3/parse/parsestreams.c:1.1.1.10 Fri Feb 25 00:44:41 1994
+--- v3/parse/parsestreams.c Fri Feb 25 00:44:41 1994
+***************
+*** 1,7 ****
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.17 1994/02/20 15:18:02 kardel Exp
+ *
+! * parsestreams.c,v 3.17 1994/02/20 15:18:02 kardel Exp
+ *
+ * STREAMS module for reference clocks
+ * (SunOS4.x)
+--- 1,7 ----
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.19 1994/02/24 16:33:54 kardel Exp
+ *
+! * parsestreams.c,v 3.19 1994/02/24 16:33:54 kardel Exp
+ *
+ * STREAMS module for reference clocks
+ * (SunOS4.x)
+***************
+*** 16,22 ****
+ */
+
+ #ifndef lint
+! static char rcsid[] = "parsestreams.c,v 3.17 1994/02/20 15:18:02 kardel Exp";
+ #endif
+
+ #include "sys/types.h"
+--- 16,22 ----
+ */
+
+ #ifndef lint
+! static char rcsid[] = "parsestreams.c,v 3.19 1994/02/24 16:33:54 kardel Exp";
+ #endif
+
+ #include "sys/types.h"
+***************
+*** 195,201 ****
+ }
+ else
+ {
+! static char revision[] = "3.17";
+ char *s, *S, *t;
+
+ strncpy(ifm->f_name, mname, FMNAMESZ);
+--- 195,201 ----
+ }
+ else
+ {
+! static char revision[] = "3.19";
+ char *s, *S, *t;
+
+ strncpy(ifm->f_name, mname, FMNAMESZ);
+***************
+*** 1076,1081 ****
+--- 1076,1086 ----
+
+ #define MAXDEPTH 50 /* maximum allowed stream crawl */
+
++ #ifdef PPS_SYNC
++ extern hardpps();
++ extern struct timeval time;
++ #endif
++
+ /*
+ * take external status interrupt (only CD interests us)
+ */
+***************
+*** 1087,1101 ****
+ register queue_t *q;
+ register unsigned char zsstatus;
+ register int loopcheck;
+- register unsigned char cdstate;
+ register char *dname;
+
+ /*
+ * pick up current state
+ */
+ zsstatus = zsaddr->zscc_control;
+
+! if (za->za_rr0 ^ (cdstate = zsstatus & ZSRR0_CD))
+ {
+ timestamp_t cdevent;
+ register int status;
+--- 1092,1109 ----
+ register queue_t *q;
+ register unsigned char zsstatus;
+ register int loopcheck;
+ register char *dname;
++ #ifdef PPS_SYNC
++ register int s;
++ register long usec;
++ #endif
+
+ /*
+ * pick up current state
+ */
+ zsstatus = zsaddr->zscc_control;
+
+! if ((za->za_rr0 ^ zsstatus) & (ZSRR0_CD|ZSRR0_SYNC))
+ {
+ timestamp_t cdevent;
+ register int status;
+***************
+*** 1103,1129 ****
+ /*
+ * CONDITIONAL external measurement support
+ */
+! SET_LED(cdstate); /*
+ * inconsistent with upper SET_LED, but this
+ * is for oscilloscope business anyway and we
+ * are just interested in edge delays in the
+ * lower us range
+ */
+!
+ /*
+ * time stamp
+ */
+ uniqtime(&cdevent.tv);
+!
+! TIMEVAL_USADD(&cdevent.tv, xsdelay);
+!
+! q = za->za_ttycommon.t_readq;
+
+ /*
+ * logical state
+ */
+! status = cd_invert ? cdstate == 0 : cdstate != 0;
+
+ /*
+ * ok - now the hard part - find ourself
+ */
+--- 1111,1155 ----
+ /*
+ * CONDITIONAL external measurement support
+ */
+! SET_LED(zsstatus & (ZSRR0_CD|ZSRR0_SYNC)); /*
+ * inconsistent with upper SET_LED, but this
+ * is for oscilloscope business anyway and we
+ * are just interested in edge delays in the
+ * lower us range
+ */
+! #ifdef PPS_SYNC
+! s = splclock();
+! usec = time.tv_usec;
+! #endif
+ /*
+ * time stamp
+ */
+ uniqtime(&cdevent.tv);
+!
+! #ifdef PPS_SYNC
+! splx(s);
+! #endif
+
+ /*
+ * logical state
+ */
+! status = cd_invert ? (zsstatus & (ZSRR0_CD|ZSRR0_SYNC)) == 0 : (zsstatus & (ZSRR0_CD|ZSRR0_SYNC)) != 0;
+
++ #ifdef PPS_SYNC
++ if (status)
++ {
++ usec = cdevent.tv.tv_usec - usec;
++ if (usec < 0)
++ usec += 1000000;
++
++ hardpps(&cdevent.tv, usec);
++ }
++ #endif
++
++ TIMEVAL_USADD(&cdevent.tv, xsdelay);
++
++ q = za->za_ttycommon.t_readq;
++
+ /*
+ * ok - now the hard part - find ourself
+ */
+***************
+*** 1179,1188 ****
+ /*
+ * only pretend that CD has been handled
+ */
+! za->za_rr0 = za->za_rr0 & ~ZSRR0_CD | zsstatus & ZSRR0_CD;
+ ZSDELAY(2);
+
+! if (!((za->za_rr0 ^ zsstatus) & ~ZSRR0_CD))
+ {
+ /*
+ * all done - kill status indication and return
+--- 1205,1214 ----
+ /*
+ * only pretend that CD has been handled
+ */
+! za->za_rr0 = za->za_rr0 & ~(ZSRR0_CD|ZSRR0_SYNC) | zsstatus & (ZSRR0_CD|ZSRR0_SYNC);
+ ZSDELAY(2);
+
+! if (!((za->za_rr0 ^ zsstatus) & ~(ZSRR0_CD|ZSRR0_SYNC)))
+ {
+ /*
+ * all done - kill status indication and return
+***************
+*** 1260,1265 ****
+--- 1286,1297 ----
+ * History:
+ *
+ * parsestreams.c,v
++ * Revision 3.19 1994/02/24 16:33:54 kardel
++ * CD events can also be posted on sync flag
++ *
++ * Revision 3.18 1994/02/24 14:12:58 kardel
++ * initial PPS_SYNC support version
++ *
+ * Revision 3.17 1994/02/20 15:18:02 kardel
+ * rcs id cleanup
+ *
+diff -c v3/xntpd/ntp_loopfilter.c:1.1.1.33 v3/xntpd/ntp_loopfilter.c:3.40
+*** v3/xntpd/ntp_loopfilter.c:1.1.1.33 Fri Feb 25 00:46:20 1994
+--- v3/xntpd/ntp_loopfilter.c Fri Feb 25 00:46:21 1994
+***************
+*** 522,529 ****
+--- 522,545 ----
+ ntv.maxerror = sys_rootdispersion + sys_rootdelay / 2;
+ ntv.esterror = sys_rootdispersion;
+ ntv.time_constant = time_constant;
++ ntv.shift = 0;
+ (void)ntp_adjtime(&ntv);
+ drift_comp = ntv.frequency;
++ if (ntv.shift != 0) {
++ char buf[128];
++ (void) sprintf(buf, "pps_freq=%s", fptoa(ntv.ybar, 3));
++ set_sys_var(buf, strlen(buf)+1, RO|DEF);
++ (void) sprintf(buf, "pps_disp=%s", fptoa(ntv.disp, 3));
++ set_sys_var(buf, strlen(buf)+1, RO|DEF);
++ (void) sprintf(buf, "pps_interval=%ld",1 << ntv.shift);
++ set_sys_var(buf, strlen(buf)+1, RO);
++ (void) sprintf(buf, "pps_intervals=%ld", ntv.calcnt);
++ set_sys_var(buf, strlen(buf)+1, RO);
++ (void) sprintf(buf, "pps_jitterexceeded=%ld", ntv.jitcnt);
++ set_sys_var(buf, strlen(buf)+1, RO);
++ (void) sprintf(buf, "pps_dispersionexceeded=%ld", ntv.discnt);
++ set_sys_var(buf, strlen(buf)+1, RO);
++ }
+ #endif /* KERNEL_PLL */
+ } else {
+ if (offset < 0) {
+***************
+*** 725,730 ****
+--- 741,748 ----
+ "loop_config: skew compensation %s too large",
+ fptoa(tmp, 5));
+ } else {
++ char var[40];
++
+ drift_comp = tmp;
+
+ #if defined(KERNEL_PLL)
+***************
+*** 751,756 ****
+--- 769,778 ----
+ syslog(LOG_NOTICE,
+ "%susing kernel phase-lock loop",
+ (pll_control) ? "" : "Not ");
++ (void)sprintf(var, "kernel_pll=%s", pll_control ? "true" : "false");
++
++ set_sys_var(var, strlen(var)+1, RO);
++
+ #if DEBUG
+ if (debug)
+ printf("pll_control %d\n", pll_control);
+--
+ Frank Kardel (kardel@informatik.uni-erlangen.de)
+ All SCSI disks will from now on be required to send an email
+ notice 24 hours prior to complete hardware failure!
+
diff --git a/usr.sbin/xntpd/patches/patch.23 b/usr.sbin/xntpd/patches/patch.23
new file mode 100644
index 0000000..5fee16f
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.23
@@ -0,0 +1,80 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa18634; 27 Feb 94 13:54 EST
+Received: from rincewind.mech.virginia.edu by louie.udel.edu id aa11711;
+ 27 Feb 94 13:53 EST
+Received: from localhost (dmm0t@localhost) by rincewind.mech.virginia.edu (8.6.5/8.6.5) id NAA04646 for mills@udel.edu; Sun, 27 Feb 1994 13:53:35 -0500
+From: David Meyer <dmm0t@rincewind.mech.virginia.edu>
+Message-Id: <199402271853.NAA04646@rincewind.mech.virginia.edu>
+Subject: patches to xntpd-3.3j for NeXT
+To: mills@udel.edu
+Date: Sun, 27 Feb 1994 13:53:34 -0500 (EST)
+X-Mailer: ELM [version 2.4 PL23]
+MIME-Version: 1.0
+Content-Type: text/plain; charset=US-ASCII
+Content-Transfer-Encoding: 7bit
+Content-Length: 2043
+
+I have a couple of patches to make the 3.3j beta compile on a NeXT
+running NS3.1.
+
+The first patch just defines RETSIGTYPE. The second patch puts
+HAVE_BSD_TTYS in DEFS rather than AUTHDEFS. The last patch just fixes
+a type - using # rather than * in a comment block.
+
+*** ../orig/include/ntp_machine.h Sun Feb 20 22:23:29 1994
+--- include/ntp_machine.h Sun Feb 27 13:47:59 1994
+***************
+*** 313,318 ****
+--- 313,319 ----
+ * Next
+ */
+ #if defined(SYS_NEXT)
++ #define RETSIGTYPE void
+ #define DOSYNCTODR
+ #define HAVE_READKMEM
+ #define HAVE_BSD_NICE
+
+*** ../orig/machines/next Sun Feb 20 22:23:36 1994
+--- machines/next Sun Feb 27 13:47:15 1994
+***************
+*** 1,6 ****
+ RANLIB= ranlib -c -s
+! DEFS= -DSYS_NEXT
+! AUTHDEFS= -DDES -DMD5 -DFAST_MD5 -DHAVE_BSD_TTYS
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+ RESLIB=
+--- 1,6 ----
+ RANLIB= ranlib -c -s
+! DEFS= -DSYS_NEXT -DHAVE_BSD_TTYS
+! AUTHDEFS= -DDES -DMD5 -DFAST_MD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+ DAEMONLIBS=
+ RESLIB=
+
+*** ../orig/xntpd/refclock_irig.c Thu Jan 27 09:03:58 1994
+--- xntpd/refclock_irig.c Sun Feb 27 13:36:30 1994
+***************
+*** 19,25 ****
+ * This driver supports the IRIG audio decoder. This clever gadget uses
+ * a modified BSD audio driver for the Sun SPARCstation which provides
+ * a timestamp, raw binary timecode, status byte and decoded ASCII
+! # timecode. The data are represented in the structure:
+ *
+ * struct irig_time {
+ * struct timeval stamp; timestamp
+--- 19,25 ----
+ * This driver supports the IRIG audio decoder. This clever gadget uses
+ * a modified BSD audio driver for the Sun SPARCstation which provides
+ * a timestamp, raw binary timecode, status byte and decoded ASCII
+! * timecode. The data are represented in the structure:
+ *
+ * struct irig_time {
+ * struct timeval stamp; timestamp
+
+
+--
+David M. Meyer Mechanical & Aerospace Engineering
+dmm0t@rincewind.mech.virginia.edu University of Virginia
+NeXTmail ok
+
diff --git a/usr.sbin/xntpd/patches/patch.24 b/usr.sbin/xntpd/patches/patch.24
new file mode 100644
index 0000000..6ab00e2
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.24
@@ -0,0 +1,474 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa16943; 4 Mar 94 6:43 EST
+Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa02686;
+ 4 Mar 94 6:34 EST
+Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
+ id AA12349 (5.65c-6/7.3v-FAU); Fri, 4 Mar 1994 12:34:08 +0100
+Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
+ id AA26044 (5.65c-6/7.3m-FAU); Fri, 4 Mar 1994 12:34:06 +0100
+From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
+Message-Id: <199403041134.AA26044@faui43.informatik.uni-erlangen.de>
+Subject: Re: patches for 3.3l
+To: Mills@udel.edu
+Date: Fri, 4 Mar 94 12:33:49 MET
+In-Reply-To: <9403040253.aa16147@huey.udel.edu>; from "Mills@udel.edu" at Mar 4, 94 2:53 am
+X-Mailer: ELM [version 2.3 PL11]
+
+
+> Frank,
+
+
+> ld: ../lib/libntp.a: warning: archive has no table of contents; add one using ranlib(1)
+I didn't fiddle with lib/* this round. Thus it must be some problem
+with the lib building process. Try make clean and again. I just checked
+the patches with my 3.3l tree - fine. I do admit being a bit lax when
+sending you the patches - you might have had to enter some paths
+manually.
+
+> ld: Undefined symbol
+> _DESauth1crypt ....
+Happens if ranlib isn't run.
+
+> Obviously, it bombed.
+Not likely being a problem from my patches - the lib/libntp.a got
+inconsistent.
+Usually this should not happen (ranlib need to be run on BSD systems).
+Try building again from scratch (make clean all). If the problem
+persists look (or send me) at the output of the lib building step
+something is amiss there at your site.
+
+I'll include the patches here again not properly prepared for a
+plain "patch < patchfile".
+
+
+Hi, Dave,
+
+Here are some more patches:
+ - allow parse conversion routines to deliver UTC directly
+ - irix4 machine/cc from Amos
+ - rcs id fixing
+ - linux hints
+ - modload hints
+ - full integration of trak refclock driver (was only partially integrated)
+
+diff -c /dev/null compilers/irix4.cc:1.1
+*** /dev/null Thu Mar 3 10:29:50 1994
+--- compilers/irix4.cc Thu Mar 3 10:29:50 1994
+***************
+*** 0 ****
+--- 1,2 ----
++ COMPILER= cc -cckr
++ COPTS= -O2
+diff -c hints/linux:1.1.1.3 hints/linux:1.5
+*** hints/linux:1.1.1.3 Thu Mar 3 10:30:53 1994
+--- hints/linux Thu Mar 3 10:30:53 1994
+***************
+*** 1,5 ****
+
+! Requirements: kernel 0.99.14y or newer, libc 4.5.20 or newer
+ ------------
+
+ With this configuration, xntp should build an run right out of the box
+--- 1,5 ----
+
+! Requirements: kernel 0.99.14y or newer, libc 4.5.21 or newer
+ ------------
+
+ With this configuration, xntp should build an run right out of the box
+***************
+*** 7,14 ****
+ versions of the kernel or libc, or have any other question not covered in the
+ READMEs / hint files (sorry, necessary comment in the Linux community ;-) feel
+ free to ask me (duwe@informatik.uni-erlangen.de)
+-
+- [NOTE: libc-4.5.20 is (or was ? ;-) a beta testing release, but the first
+- binary compiled under the appropriate kernel. Get this one from
+- tsx-11:.../GCC/private/dontuse , compile 4.5.19 yourself or wait for the next
+- puplic relase after 4.5.20]
+--- 7,9 ----
+diff -c include/parse.h:1.1.1.8 include/parse.h:3.17
+*** include/parse.h:1.1.1.8 Thu Mar 3 10:31:37 1994
+--- include/parse.h Thu Mar 3 10:31:37 1994
+***************
+*** 1,7 ****
+ /*
+! * /src/NTP/REPOSITORY/v3/include/parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp
+ *
+! * parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp
+ *
+ * Copyright (c) 1989,1990,1991,1992,1993,1994
+ * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
+--- 1,7 ----
+ /*
+! * /src/NTP/REPOSITORY/v3/include/parse.h,v 3.17 1994/03/03 09:27:20 kardel Exp
+ *
+! * parse.h,v 3.17 1994/03/03 09:27:20 kardel Exp
+ *
+ * Copyright (c) 1989,1990,1991,1992,1993,1994
+ * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
+***************
+*** 15,21 ****
+ #ifndef __PARSE_H__
+ #define __PARSE_H__
+ #if !(defined(lint) || defined(__GNUC__))
+! static char parsehrcsid[]="parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp FAU";
+ #endif
+
+ #include "ntp_types.h"
+--- 15,21 ----
+ #ifndef __PARSE_H__
+ #define __PARSE_H__
+ #if !(defined(lint) || defined(__GNUC__))
+! static char parsehrcsid[]="parse.h,v 3.17 1994/03/03 09:27:20 kardel Exp";
+ #endif
+
+ #include "ntp_types.h"
+***************
+*** 301,306 ****
+--- 301,307 ----
+ LONG second;
+ LONG usecond;
+ LONG utcoffset; /* in seconds */
++ time_t utctime; /* the actual time - alternative to date/time */
+ LONG flags; /* current clock status */
+ };
+
+***************
+*** 385,390 ****
+--- 386,394 ----
+ * History:
+ *
+ * parse.h,v
++ * Revision 3.17 1994/03/03 09:27:20 kardel
++ * rcs ids fixed
++ *
+ * Revision 3.13 1994/01/25 19:04:21 kardel
+ * 94/01/23 reconcilation
+ *
+diff -c parse/Makefile.kernel:1.1.1.3 parse/Makefile.kernel:3.9
+*** parse/Makefile.kernel:1.1.1.3 Thu Mar 3 10:35:48 1994
+--- parse/Makefile.kernel Thu Mar 3 10:35:48 1994
+***************
+*** 40,46 ****
+ rm -f parsestreams.o
+
+ parsestreams.o: parsestreams.o.$(KARCH)
+! @echo "--- You may load parsestreams.o.$(KARCH) via 'modload parsestreams.o.$(KARCH)' into the kernel"
+
+ parsestreams.o.$(KARCH): parsestreams.c ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h
+ cc -c $(DEFS) -I../include parsestreams.c
+--- 40,46 ----
+ rm -f parsestreams.o
+
+ parsestreams.o: parsestreams.o.$(KARCH)
+! @echo "--- You may load parsestreams.o.$(KARCH) via 'modload parsestreams.o' (put in e.g. /sys/<karch>/OBJ) into the kernel"
+
+ parsestreams.o.$(KARCH): parsestreams.c ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h
+ cc -c $(DEFS) -I../include parsestreams.c
+diff -c parse/README.new_clocks:1.1.1.3 parse/README.new_clocks:3.5
+*** parse/README.new_clocks:1.1.1.3 Thu Mar 3 10:35:52 1994
+--- parse/README.new_clocks Thu Mar 3 10:35:53 1994
+***************
+*** 23,28 ****
+--- 23,29 ----
+ LONG second;
+ LONG usecond;
+ LONG utcoffset; /* in seconds */
++ time_t utcoffset; /* true utc time instead of date/time */
+ LONG flags; /* current clock status */
+ };
+
+***************
+*** 52,57 ****
+--- 53,65 ----
+ PARSEB_S_PPS supports PPS time stamping
+ PARSEB_S_POSITION supports position information (GPS)
+
++ If the utctime field is non zero this value will be take as
++ time code value. This allows for conversion routines that
++ already have the utc time value. The utctime field gives the seconds
++ since Jan 1st 1970, 0:00:00. The useconds field gives the respective
++ usec value. The fields for date and time (down to second resolution)
++ will be ignored.
++
+ Conversion is done in the cvt_* routine in parse/clk_*.c files. look in
+ them for examples. The basic structure is:
+
+diff -c parse/parse.c:1.1.1.9 parse/parse.c:3.22
+*** parse/parse.c:1.1.1.9 Thu Mar 3 10:36:06 1994
+--- parse/parse.c Thu Mar 3 10:36:07 1994
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.21 1994/02/02 17:45:30 kardel Exp
+ *
+! * parse.c,v 3.21 1994/02/02 17:45:30 kardel Exp
+ *
+ * Parser module for reference clock
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp
+ *
+! * parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp
+ *
+ * Parser module for reference clock
+ *
+***************
+*** 556,561 ****
+--- 556,564 ----
+ register int i;
+ time_t t;
+
++ if (clock->utctime)
++ return clock->utctime; /* if the conversion routine gets it right away - why not */
++
+ if (clock->year < 100)
+ clock->year += 1900;
+
+***************
+*** 628,633 ****
+--- 631,639 ----
+ t += clock->utcoffset; /* warp to UTC */
+
+ /* done */
++
++ clock->utctime = t; /* documentray only */
++
+ return t;
+ }
+
+***************
+*** 890,895 ****
+--- 896,903 ----
+
+ if (parseio->parse_flags & PARSE_FIXED_FMT)
+ {
++ clock.utctime = 0;
++
+ switch ((cvtrtc = clockformats[format]->convert ? clockformats[format]->convert(parseio->parse_data, parseio->parse_index, clockformats[format]->data, &clock) : CVT_NONE) & CVT_MASK)
+ {
+ case CVT_FAIL:
+***************
+*** 941,946 ****
+--- 949,956 ----
+ {
+ do
+ {
++ clock.utctime = 0;
++
+ switch ((cvtrtc = (clockformats[format]->convert && !(clockformats[format]->flags & CVT_FIXEDONLY)) ?
+ clockformats[format]->convert(parseio->parse_data, parseio->parse_index, clockformats[format]->data, &clock) :
+ CVT_NONE) & CVT_MASK)
+***************
+*** 1148,1153 ****
+--- 1158,1166 ----
+ * History:
+ *
+ * parse.c,v
++ * Revision 3.22 1994/02/25 12:34:49 kardel
++ * allow for converter generated utc times
++ *
+ * Revision 3.21 1994/02/02 17:45:30 kardel
+ * rcs ids fixed
+ *
+diff -c parse/util/testdcf.c:1.1.1.6 parse/util/testdcf.c:3.11
+*** parse/util/testdcf.c:1.1.1.6 Thu Mar 3 10:36:27 1994
+--- parse/util/testdcf.c Thu Mar 3 10:36:27 1994
+***************
+*** 1,7 ****
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/util/testdcf.c,v 3.9 1994/01/25 19:05:45 kardel Exp
+ *
+! * testdcf.c,v 3.9 1994/01/25 19:05:45 kardel Exp
+ *
+ * simple DCF77 100/200ms pulse test program (via 50Baud serial line)
+ *
+--- 1,7 ----
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/util/testdcf.c,v 3.11 1994/02/02 17:45:55 kardel Exp
+ *
+! * testdcf.c,v 3.11 1994/02/02 17:45:55 kardel Exp
+ *
+ * simple DCF77 100/200ms pulse test program (via 50Baud serial line)
+ *
+diff -c xntpd/Makefile.tmpl:1.1.1.18 xntpd/Makefile.tmpl:3.28
+*** xntpd/Makefile.tmpl:1.1.1.18 Thu Mar 3 10:38:13 1994
+--- xntpd/Makefile.tmpl Thu Mar 3 10:38:13 1994
+***************
+*** 34,40 ****
+ refclock_wwvb.c refclock_goes.c refclock_mx4200.c \
+ refclock_parse.c refclock_as2201.c refclock_omega.c \
+ refclock_tpro.c refclock_leitch.c refclock_irig.c \
+! refclock_msfees.c refclock_gpstm.c ntp_intres.c ntp_filegen.c
+
+ OBJS= ntp_config.o ntp_control.o ntp_io.o ntp_leap.o \
+ ntp_loopfilter.o ntp_monitor.o ntp_peer.o ntp_proto.o \
+--- 34,41 ----
+ refclock_wwvb.c refclock_goes.c refclock_mx4200.c \
+ refclock_parse.c refclock_as2201.c refclock_omega.c \
+ refclock_tpro.c refclock_leitch.c refclock_irig.c \
+! refclock_msfees.c refclock_gpstm.c refclock_trak.c \
+! ntp_intres.c ntp_filegen.c
+
+ OBJS= ntp_config.o ntp_control.o ntp_io.o ntp_leap.o \
+ ntp_loopfilter.o ntp_monitor.o ntp_peer.o ntp_proto.o \
+***************
+*** 44,50 ****
+ refclock_wwvb.o refclock_goes.o refclock_mx4200.o \
+ refclock_parse.o refclock_as2201.o refclock_omega.o \
+ refclock_tpro.o refclock_leitch.o refclock_irig.o \
+! refclock_msfees.o refclock_gpstm.o ntp_intres.o ntp_filegen.o
+
+ all: $(PROGRAM)
+
+--- 45,52 ----
+ refclock_wwvb.o refclock_goes.o refclock_mx4200.o \
+ refclock_parse.o refclock_as2201.o refclock_omega.o \
+ refclock_tpro.o refclock_leitch.o refclock_irig.o \
+! refclock_msfees.o refclock_gpstm.o refclock_trak.o \
+! ntp_intres.o ntp_filegen.o
+
+ all: $(PROGRAM)
+
+***************
+*** 136,141 ****
+--- 138,146 ----
+
+ refclock_msfees.o: refclock_msfees.c
+ $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
++
++ refclock_trak.o: refclock_trak.c
++ $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
+
+ refclock_gpstm.o: refclock_gpstm.c
+ $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
+diff -c xntpd/ntp_control.c:1.1.1.17 xntpd/ntp_control.c:3.26
+*** xntpd/ntp_control.c:1.1.1.17 Thu Mar 3 10:38:16 1994
+--- xntpd/ntp_control.c Thu Mar 3 10:38:17 1994
+***************
+*** 301,307 ****
+ static u_char clocktypes[] = {
+ CTL_SST_TS_NTP, /* REFCLK_NONE */
+ CTL_SST_TS_UNSPEC, /* REFCLK_LOCALCLOCK */
+! CTL_SST_TS_HF, /* REFCLK_WWV_HEATH */
+ CTL_SST_TS_HF, /* REFCLK_WWV_PST */
+ CTL_SST_TS_LF, /* REFCLK_WWVB_SPECTRACOM */
+ CTL_SST_TS_UHF, /* REFCLK_GOES_TRUETIME */
+--- 301,307 ----
+ static u_char clocktypes[] = {
+ CTL_SST_TS_NTP, /* REFCLK_NONE */
+ CTL_SST_TS_UNSPEC, /* REFCLK_LOCALCLOCK */
+! CTL_SST_TS_HF, /* REFCLK_GPS_TRAK */
+ CTL_SST_TS_HF, /* REFCLK_WWV_PST */
+ CTL_SST_TS_LF, /* REFCLK_WWVB_SPECTRACOM */
+ CTL_SST_TS_UHF, /* REFCLK_GOES_TRUETIME */
+diff -c xntpd/refclock_conf.c:1.1.1.22 xntpd/refclock_conf.c:3.21
+*** xntpd/refclock_conf.c:1.1.1.22 Thu Mar 3 10:38:54 1994
+--- xntpd/refclock_conf.c Thu Mar 3 10:38:54 1994
+***************
+*** 113,119 ****
+ struct refclock *refclock_conf[] = {
+ &refclock_none, /* 0 REFCLK_NONE */
+ &refclock_local, /* 1 REFCLK_LOCAL */
+! &refclock_none, /* 2 REFCLK_WWV_HEATH */
+ &refclock_pst, /* 3 REFCLK_WWV_PST */
+ &refclock_wwvb, /* 4 REFCLK_WWVB_SPECTRACOM */
+ &refclock_goes, /* 5 REFCLK_GOES_TRUETIME */
+--- 113,119 ----
+ struct refclock *refclock_conf[] = {
+ &refclock_none, /* 0 REFCLK_NONE */
+ &refclock_local, /* 1 REFCLK_LOCAL */
+! &refclock_trak, /* 2 REFCLK_GPS_TRAK */
+ &refclock_pst, /* 3 REFCLK_WWV_PST */
+ &refclock_wwvb, /* 4 REFCLK_WWVB_SPECTRACOM */
+ &refclock_goes, /* 5 REFCLK_GOES_TRUETIME */
+RCS file: /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v
+retrieving revision 1.1.1.12
+diff -c -r1.1.1.12 xntpd/refclock_parse.c
+*** xntpd/refclock_parse.c:1.1.1.12 1994/02/22 21:57:57
+--- xntpd/refclock_parse.c 1994/03/03 09:49:54
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp
+ *
+! * refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp
+ *
+ * generic reference clock driver for receivers
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp
+ *
+! * refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp
+ *
+ * generic reference clock driver for receivers
+ *
+***************
+*** 129,135 ****
+ #include "parse.h"
+
+ #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
+! static char rcsid[]="refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp";
+ #endif
+
+ /**===========================================================================
+--- 129,135 ----
+ #include "parse.h"
+
+ #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
+! static char rcsid[]="refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp";
+ #endif
+
+ /**===========================================================================
+***************
+*** 1653,1659 ****
+ * done if no more characters are available
+ */
+ FD_SET(fd, &fdmask);
+! if (select(fd + 1, &fdmask, 0, 0, &null_time) == 0)
+ return;
+ }
+ }
+--- 1653,1660 ----
+ * done if no more characters are available
+ */
+ FD_SET(fd, &fdmask);
+! if ((i == 0) &&
+! (select(fd + 1, &fdmask, 0, 0, &null_time) == 0))
+ return;
+ }
+ }
+***************
+*** 2823,2829 ****
+ sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
+
+ tt = add_var(&out->kv_list, 128, RO);
+! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp\"");
+
+ out->lencode = strlen(outstatus);
+ out->lastcode = outstatus;
+--- 2824,2830 ----
+ sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
+
+ tt = add_var(&out->kv_list, 128, RO);
+! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp\"");
+
+ out->lencode = strlen(outstatus);
+ out->lastcode = outstatus;
+--
+ Frank Kardel (kardel@informatik.uni-erlangen.de)
+ All SCSI disks will from now on be required to send an email
+ notice 24 hours prior to complete hardware failure!
+
+
+--
+ Frank Kardel (kardel@informatik.uni-erlangen.de)
+ All SCSI disks will from now on be required to send an email
+ notice 24 hours prior to complete hardware failure!
+
diff --git a/usr.sbin/xntpd/patches/patch.25 b/usr.sbin/xntpd/patches/patch.25
new file mode 100644
index 0000000..6ab00e2
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.25
@@ -0,0 +1,474 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa16943; 4 Mar 94 6:43 EST
+Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa02686;
+ 4 Mar 94 6:34 EST
+Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
+ id AA12349 (5.65c-6/7.3v-FAU); Fri, 4 Mar 1994 12:34:08 +0100
+Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
+ id AA26044 (5.65c-6/7.3m-FAU); Fri, 4 Mar 1994 12:34:06 +0100
+From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
+Message-Id: <199403041134.AA26044@faui43.informatik.uni-erlangen.de>
+Subject: Re: patches for 3.3l
+To: Mills@udel.edu
+Date: Fri, 4 Mar 94 12:33:49 MET
+In-Reply-To: <9403040253.aa16147@huey.udel.edu>; from "Mills@udel.edu" at Mar 4, 94 2:53 am
+X-Mailer: ELM [version 2.3 PL11]
+
+
+> Frank,
+
+
+> ld: ../lib/libntp.a: warning: archive has no table of contents; add one using ranlib(1)
+I didn't fiddle with lib/* this round. Thus it must be some problem
+with the lib building process. Try make clean and again. I just checked
+the patches with my 3.3l tree - fine. I do admit being a bit lax when
+sending you the patches - you might have had to enter some paths
+manually.
+
+> ld: Undefined symbol
+> _DESauth1crypt ....
+Happens if ranlib isn't run.
+
+> Obviously, it bombed.
+Not likely being a problem from my patches - the lib/libntp.a got
+inconsistent.
+Usually this should not happen (ranlib need to be run on BSD systems).
+Try building again from scratch (make clean all). If the problem
+persists look (or send me) at the output of the lib building step
+something is amiss there at your site.
+
+I'll include the patches here again not properly prepared for a
+plain "patch < patchfile".
+
+
+Hi, Dave,
+
+Here are some more patches:
+ - allow parse conversion routines to deliver UTC directly
+ - irix4 machine/cc from Amos
+ - rcs id fixing
+ - linux hints
+ - modload hints
+ - full integration of trak refclock driver (was only partially integrated)
+
+diff -c /dev/null compilers/irix4.cc:1.1
+*** /dev/null Thu Mar 3 10:29:50 1994
+--- compilers/irix4.cc Thu Mar 3 10:29:50 1994
+***************
+*** 0 ****
+--- 1,2 ----
++ COMPILER= cc -cckr
++ COPTS= -O2
+diff -c hints/linux:1.1.1.3 hints/linux:1.5
+*** hints/linux:1.1.1.3 Thu Mar 3 10:30:53 1994
+--- hints/linux Thu Mar 3 10:30:53 1994
+***************
+*** 1,5 ****
+
+! Requirements: kernel 0.99.14y or newer, libc 4.5.20 or newer
+ ------------
+
+ With this configuration, xntp should build an run right out of the box
+--- 1,5 ----
+
+! Requirements: kernel 0.99.14y or newer, libc 4.5.21 or newer
+ ------------
+
+ With this configuration, xntp should build an run right out of the box
+***************
+*** 7,14 ****
+ versions of the kernel or libc, or have any other question not covered in the
+ READMEs / hint files (sorry, necessary comment in the Linux community ;-) feel
+ free to ask me (duwe@informatik.uni-erlangen.de)
+-
+- [NOTE: libc-4.5.20 is (or was ? ;-) a beta testing release, but the first
+- binary compiled under the appropriate kernel. Get this one from
+- tsx-11:.../GCC/private/dontuse , compile 4.5.19 yourself or wait for the next
+- puplic relase after 4.5.20]
+--- 7,9 ----
+diff -c include/parse.h:1.1.1.8 include/parse.h:3.17
+*** include/parse.h:1.1.1.8 Thu Mar 3 10:31:37 1994
+--- include/parse.h Thu Mar 3 10:31:37 1994
+***************
+*** 1,7 ****
+ /*
+! * /src/NTP/REPOSITORY/v3/include/parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp
+ *
+! * parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp
+ *
+ * Copyright (c) 1989,1990,1991,1992,1993,1994
+ * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
+--- 1,7 ----
+ /*
+! * /src/NTP/REPOSITORY/v3/include/parse.h,v 3.17 1994/03/03 09:27:20 kardel Exp
+ *
+! * parse.h,v 3.17 1994/03/03 09:27:20 kardel Exp
+ *
+ * Copyright (c) 1989,1990,1991,1992,1993,1994
+ * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
+***************
+*** 15,21 ****
+ #ifndef __PARSE_H__
+ #define __PARSE_H__
+ #if !(defined(lint) || defined(__GNUC__))
+! static char parsehrcsid[]="parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp FAU";
+ #endif
+
+ #include "ntp_types.h"
+--- 15,21 ----
+ #ifndef __PARSE_H__
+ #define __PARSE_H__
+ #if !(defined(lint) || defined(__GNUC__))
+! static char parsehrcsid[]="parse.h,v 3.17 1994/03/03 09:27:20 kardel Exp";
+ #endif
+
+ #include "ntp_types.h"
+***************
+*** 301,306 ****
+--- 301,307 ----
+ LONG second;
+ LONG usecond;
+ LONG utcoffset; /* in seconds */
++ time_t utctime; /* the actual time - alternative to date/time */
+ LONG flags; /* current clock status */
+ };
+
+***************
+*** 385,390 ****
+--- 386,394 ----
+ * History:
+ *
+ * parse.h,v
++ * Revision 3.17 1994/03/03 09:27:20 kardel
++ * rcs ids fixed
++ *
+ * Revision 3.13 1994/01/25 19:04:21 kardel
+ * 94/01/23 reconcilation
+ *
+diff -c parse/Makefile.kernel:1.1.1.3 parse/Makefile.kernel:3.9
+*** parse/Makefile.kernel:1.1.1.3 Thu Mar 3 10:35:48 1994
+--- parse/Makefile.kernel Thu Mar 3 10:35:48 1994
+***************
+*** 40,46 ****
+ rm -f parsestreams.o
+
+ parsestreams.o: parsestreams.o.$(KARCH)
+! @echo "--- You may load parsestreams.o.$(KARCH) via 'modload parsestreams.o.$(KARCH)' into the kernel"
+
+ parsestreams.o.$(KARCH): parsestreams.c ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h
+ cc -c $(DEFS) -I../include parsestreams.c
+--- 40,46 ----
+ rm -f parsestreams.o
+
+ parsestreams.o: parsestreams.o.$(KARCH)
+! @echo "--- You may load parsestreams.o.$(KARCH) via 'modload parsestreams.o' (put in e.g. /sys/<karch>/OBJ) into the kernel"
+
+ parsestreams.o.$(KARCH): parsestreams.c ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h
+ cc -c $(DEFS) -I../include parsestreams.c
+diff -c parse/README.new_clocks:1.1.1.3 parse/README.new_clocks:3.5
+*** parse/README.new_clocks:1.1.1.3 Thu Mar 3 10:35:52 1994
+--- parse/README.new_clocks Thu Mar 3 10:35:53 1994
+***************
+*** 23,28 ****
+--- 23,29 ----
+ LONG second;
+ LONG usecond;
+ LONG utcoffset; /* in seconds */
++ time_t utcoffset; /* true utc time instead of date/time */
+ LONG flags; /* current clock status */
+ };
+
+***************
+*** 52,57 ****
+--- 53,65 ----
+ PARSEB_S_PPS supports PPS time stamping
+ PARSEB_S_POSITION supports position information (GPS)
+
++ If the utctime field is non zero this value will be take as
++ time code value. This allows for conversion routines that
++ already have the utc time value. The utctime field gives the seconds
++ since Jan 1st 1970, 0:00:00. The useconds field gives the respective
++ usec value. The fields for date and time (down to second resolution)
++ will be ignored.
++
+ Conversion is done in the cvt_* routine in parse/clk_*.c files. look in
+ them for examples. The basic structure is:
+
+diff -c parse/parse.c:1.1.1.9 parse/parse.c:3.22
+*** parse/parse.c:1.1.1.9 Thu Mar 3 10:36:06 1994
+--- parse/parse.c Thu Mar 3 10:36:07 1994
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.21 1994/02/02 17:45:30 kardel Exp
+ *
+! * parse.c,v 3.21 1994/02/02 17:45:30 kardel Exp
+ *
+ * Parser module for reference clock
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp
+ *
+! * parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp
+ *
+ * Parser module for reference clock
+ *
+***************
+*** 556,561 ****
+--- 556,564 ----
+ register int i;
+ time_t t;
+
++ if (clock->utctime)
++ return clock->utctime; /* if the conversion routine gets it right away - why not */
++
+ if (clock->year < 100)
+ clock->year += 1900;
+
+***************
+*** 628,633 ****
+--- 631,639 ----
+ t += clock->utcoffset; /* warp to UTC */
+
+ /* done */
++
++ clock->utctime = t; /* documentray only */
++
+ return t;
+ }
+
+***************
+*** 890,895 ****
+--- 896,903 ----
+
+ if (parseio->parse_flags & PARSE_FIXED_FMT)
+ {
++ clock.utctime = 0;
++
+ switch ((cvtrtc = clockformats[format]->convert ? clockformats[format]->convert(parseio->parse_data, parseio->parse_index, clockformats[format]->data, &clock) : CVT_NONE) & CVT_MASK)
+ {
+ case CVT_FAIL:
+***************
+*** 941,946 ****
+--- 949,956 ----
+ {
+ do
+ {
++ clock.utctime = 0;
++
+ switch ((cvtrtc = (clockformats[format]->convert && !(clockformats[format]->flags & CVT_FIXEDONLY)) ?
+ clockformats[format]->convert(parseio->parse_data, parseio->parse_index, clockformats[format]->data, &clock) :
+ CVT_NONE) & CVT_MASK)
+***************
+*** 1148,1153 ****
+--- 1158,1166 ----
+ * History:
+ *
+ * parse.c,v
++ * Revision 3.22 1994/02/25 12:34:49 kardel
++ * allow for converter generated utc times
++ *
+ * Revision 3.21 1994/02/02 17:45:30 kardel
+ * rcs ids fixed
+ *
+diff -c parse/util/testdcf.c:1.1.1.6 parse/util/testdcf.c:3.11
+*** parse/util/testdcf.c:1.1.1.6 Thu Mar 3 10:36:27 1994
+--- parse/util/testdcf.c Thu Mar 3 10:36:27 1994
+***************
+*** 1,7 ****
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/util/testdcf.c,v 3.9 1994/01/25 19:05:45 kardel Exp
+ *
+! * testdcf.c,v 3.9 1994/01/25 19:05:45 kardel Exp
+ *
+ * simple DCF77 100/200ms pulse test program (via 50Baud serial line)
+ *
+--- 1,7 ----
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/util/testdcf.c,v 3.11 1994/02/02 17:45:55 kardel Exp
+ *
+! * testdcf.c,v 3.11 1994/02/02 17:45:55 kardel Exp
+ *
+ * simple DCF77 100/200ms pulse test program (via 50Baud serial line)
+ *
+diff -c xntpd/Makefile.tmpl:1.1.1.18 xntpd/Makefile.tmpl:3.28
+*** xntpd/Makefile.tmpl:1.1.1.18 Thu Mar 3 10:38:13 1994
+--- xntpd/Makefile.tmpl Thu Mar 3 10:38:13 1994
+***************
+*** 34,40 ****
+ refclock_wwvb.c refclock_goes.c refclock_mx4200.c \
+ refclock_parse.c refclock_as2201.c refclock_omega.c \
+ refclock_tpro.c refclock_leitch.c refclock_irig.c \
+! refclock_msfees.c refclock_gpstm.c ntp_intres.c ntp_filegen.c
+
+ OBJS= ntp_config.o ntp_control.o ntp_io.o ntp_leap.o \
+ ntp_loopfilter.o ntp_monitor.o ntp_peer.o ntp_proto.o \
+--- 34,41 ----
+ refclock_wwvb.c refclock_goes.c refclock_mx4200.c \
+ refclock_parse.c refclock_as2201.c refclock_omega.c \
+ refclock_tpro.c refclock_leitch.c refclock_irig.c \
+! refclock_msfees.c refclock_gpstm.c refclock_trak.c \
+! ntp_intres.c ntp_filegen.c
+
+ OBJS= ntp_config.o ntp_control.o ntp_io.o ntp_leap.o \
+ ntp_loopfilter.o ntp_monitor.o ntp_peer.o ntp_proto.o \
+***************
+*** 44,50 ****
+ refclock_wwvb.o refclock_goes.o refclock_mx4200.o \
+ refclock_parse.o refclock_as2201.o refclock_omega.o \
+ refclock_tpro.o refclock_leitch.o refclock_irig.o \
+! refclock_msfees.o refclock_gpstm.o ntp_intres.o ntp_filegen.o
+
+ all: $(PROGRAM)
+
+--- 45,52 ----
+ refclock_wwvb.o refclock_goes.o refclock_mx4200.o \
+ refclock_parse.o refclock_as2201.o refclock_omega.o \
+ refclock_tpro.o refclock_leitch.o refclock_irig.o \
+! refclock_msfees.o refclock_gpstm.o refclock_trak.o \
+! ntp_intres.o ntp_filegen.o
+
+ all: $(PROGRAM)
+
+***************
+*** 136,141 ****
+--- 138,146 ----
+
+ refclock_msfees.o: refclock_msfees.c
+ $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
++
++ refclock_trak.o: refclock_trak.c
++ $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
+
+ refclock_gpstm.o: refclock_gpstm.c
+ $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
+diff -c xntpd/ntp_control.c:1.1.1.17 xntpd/ntp_control.c:3.26
+*** xntpd/ntp_control.c:1.1.1.17 Thu Mar 3 10:38:16 1994
+--- xntpd/ntp_control.c Thu Mar 3 10:38:17 1994
+***************
+*** 301,307 ****
+ static u_char clocktypes[] = {
+ CTL_SST_TS_NTP, /* REFCLK_NONE */
+ CTL_SST_TS_UNSPEC, /* REFCLK_LOCALCLOCK */
+! CTL_SST_TS_HF, /* REFCLK_WWV_HEATH */
+ CTL_SST_TS_HF, /* REFCLK_WWV_PST */
+ CTL_SST_TS_LF, /* REFCLK_WWVB_SPECTRACOM */
+ CTL_SST_TS_UHF, /* REFCLK_GOES_TRUETIME */
+--- 301,307 ----
+ static u_char clocktypes[] = {
+ CTL_SST_TS_NTP, /* REFCLK_NONE */
+ CTL_SST_TS_UNSPEC, /* REFCLK_LOCALCLOCK */
+! CTL_SST_TS_HF, /* REFCLK_GPS_TRAK */
+ CTL_SST_TS_HF, /* REFCLK_WWV_PST */
+ CTL_SST_TS_LF, /* REFCLK_WWVB_SPECTRACOM */
+ CTL_SST_TS_UHF, /* REFCLK_GOES_TRUETIME */
+diff -c xntpd/refclock_conf.c:1.1.1.22 xntpd/refclock_conf.c:3.21
+*** xntpd/refclock_conf.c:1.1.1.22 Thu Mar 3 10:38:54 1994
+--- xntpd/refclock_conf.c Thu Mar 3 10:38:54 1994
+***************
+*** 113,119 ****
+ struct refclock *refclock_conf[] = {
+ &refclock_none, /* 0 REFCLK_NONE */
+ &refclock_local, /* 1 REFCLK_LOCAL */
+! &refclock_none, /* 2 REFCLK_WWV_HEATH */
+ &refclock_pst, /* 3 REFCLK_WWV_PST */
+ &refclock_wwvb, /* 4 REFCLK_WWVB_SPECTRACOM */
+ &refclock_goes, /* 5 REFCLK_GOES_TRUETIME */
+--- 113,119 ----
+ struct refclock *refclock_conf[] = {
+ &refclock_none, /* 0 REFCLK_NONE */
+ &refclock_local, /* 1 REFCLK_LOCAL */
+! &refclock_trak, /* 2 REFCLK_GPS_TRAK */
+ &refclock_pst, /* 3 REFCLK_WWV_PST */
+ &refclock_wwvb, /* 4 REFCLK_WWVB_SPECTRACOM */
+ &refclock_goes, /* 5 REFCLK_GOES_TRUETIME */
+RCS file: /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v
+retrieving revision 1.1.1.12
+diff -c -r1.1.1.12 xntpd/refclock_parse.c
+*** xntpd/refclock_parse.c:1.1.1.12 1994/02/22 21:57:57
+--- xntpd/refclock_parse.c 1994/03/03 09:49:54
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp
+ *
+! * refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp
+ *
+ * generic reference clock driver for receivers
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp
+ *
+! * refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp
+ *
+ * generic reference clock driver for receivers
+ *
+***************
+*** 129,135 ****
+ #include "parse.h"
+
+ #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
+! static char rcsid[]="refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp";
+ #endif
+
+ /**===========================================================================
+--- 129,135 ----
+ #include "parse.h"
+
+ #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
+! static char rcsid[]="refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp";
+ #endif
+
+ /**===========================================================================
+***************
+*** 1653,1659 ****
+ * done if no more characters are available
+ */
+ FD_SET(fd, &fdmask);
+! if (select(fd + 1, &fdmask, 0, 0, &null_time) == 0)
+ return;
+ }
+ }
+--- 1653,1660 ----
+ * done if no more characters are available
+ */
+ FD_SET(fd, &fdmask);
+! if ((i == 0) &&
+! (select(fd + 1, &fdmask, 0, 0, &null_time) == 0))
+ return;
+ }
+ }
+***************
+*** 2823,2829 ****
+ sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
+
+ tt = add_var(&out->kv_list, 128, RO);
+! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp\"");
+
+ out->lencode = strlen(outstatus);
+ out->lastcode = outstatus;
+--- 2824,2830 ----
+ sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
+
+ tt = add_var(&out->kv_list, 128, RO);
+! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp\"");
+
+ out->lencode = strlen(outstatus);
+ out->lastcode = outstatus;
+--
+ Frank Kardel (kardel@informatik.uni-erlangen.de)
+ All SCSI disks will from now on be required to send an email
+ notice 24 hours prior to complete hardware failure!
+
+
+--
+ Frank Kardel (kardel@informatik.uni-erlangen.de)
+ All SCSI disks will from now on be required to send an email
+ notice 24 hours prior to complete hardware failure!
+
diff --git a/usr.sbin/xntpd/patches/patch.26 b/usr.sbin/xntpd/patches/patch.26
new file mode 100644
index 0000000..a55360d
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.26
@@ -0,0 +1,36 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa24501; 5 Mar 94 21:23 EST
+Received: from goofus.wustl.edu by louie.udel.edu id aa01087; 5 Mar 94 21:15 EST
+Received: from mumps.pfcs.com by goofus.wustl.edu with UUCP id AA17154
+ (5.67a+/IDA-1.5 for mills@udel.edu); Sat, 5 Mar 1994 20:15:06 -0600
+Received: by mumps.pfcs.com id AA09821
+ (5.65c/IDA-1.4.4 for mills@udel.edu); Sat, 5 Mar 1994 19:10:18 -0600
+Date: Sat, 5 Mar 1994 19:10:18 -0600
+From: Harlan Stenn <harlan@mumps.pfcs.com>
+Message-Id: <199403060110.AA09821@mumps.pfcs.com>
+To: mills@udel.edu
+Subject: xntpd/Makefile and 3.3l
+
+Dave,
+
+xntpd/Makefile doesn't get -DSYS_whatever and -DHAVE_xxx_TTYS "installed"
+when the Makefile gets created. This is for OS=mips.
+
+Same for xntpdc/Makefile.
+
+A patch follows...
+
+Harlan
+
+PS - might you have a copy of the message I sent you a couple of weeks
+ago where I asked about broadcast servers and clients and the ntp.conf
+file? I was going to send it to the maling list but I lost my copy.
+
+machines/mips
+3,4c3,4
+< DEFS=
+< AUTHDEFS= -DDES -DMD5 -DSYS_MIPS -DHAVE_BSD_TTYS
+---
+> DEFS= -DSYS_MIPS -DHAVE_BSD_TTYS
+> AUTHDEFS= -DDES -DMD5
+
diff --git a/usr.sbin/xntpd/patches/patch.27 b/usr.sbin/xntpd/patches/patch.27
new file mode 100644
index 0000000..5d450d4
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.27
@@ -0,0 +1,86 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa23654; 11 Mar 94 7:49 EST
+Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa14038;
+ 10 Mar 94 14:14 EST
+Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
+ id AA13885 (5.65c-6/7.3v-FAU); Thu, 10 Mar 1994 20:10:36 +0100
+Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
+ id AA03872 (5.65c-6/7.3m-FAU); Thu, 10 Mar 1994 20:10:33 +0100
+From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
+Message-Id: <199403101910.AA03872@faui43.informatik.uni-erlangen.de>
+Subject: RAW dcf77 showstopper 8-(.
+To: mills@udel.edu
+Date: Thu, 10 Mar 94 20:10:25 MET
+Cc: dpk@morgan.com, Frank.Kardel@informatik.uni-erlangen.de,
+ Piete.Brooks@cl.cam.ac.uk, jcs@bear.zoo.bt.co.uk
+X-Mailer: ELM [version 2.3 PL11]
+
+Hi, my changes for 3.3m introduced a subtle reliability problem for
+the cheap DCF77 receiver code - it only returned somtimes the
+correct time 8-(.
+
+Well, here is the patch. (I'll post this one to the news group
+also as it is a show stopper for the cheap clocks 8-(). So
+don't be confused.
+
+
+RCS file: /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v
+retrieving revision 3.12
+diff -c -r3.12 clk_rawdcf.c
+*** parse/clk_rawdcf.c:3.12 1994/02/20 13:04:39
+--- parse/clk_rawdcf.c 1994/03/10 19:00:43
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.12 1994/02/20 13:04:39 kardel Exp
+ *
+! * clk_rawdcf.c,v 3.12 1994/02/20 13:04:39 kardel Exp
+ *
+ * Raw DCF77 pulse clock support
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.13 1994/03/10 19:00:43 kardel Exp
+ *
+! * clk_rawdcf.c,v 3.13 1994/03/10 19:00:43 kardel Exp
+ *
+ * Raw DCF77 pulse clock support
+ *
+***************
+*** 245,250 ****
+--- 245,251 ----
+ parseprintf(DD_RAWDCF,("parse: convert_rawdcf: parity check passed\n"));
+
+ clock->flags = PARSEB_S_ANTENNA|PARSEB_S_LEAP;
++ clock->utctime= 0;
+ clock->usecond= 0;
+ clock->second = 0;
+ clock->minute = ext_bf(buffer, DCF_M10, dcfparam->zerobits);
+***************
+*** 528,534 ****
+ /*
+ * History:
+ *
+! * clk_rawdcf.c,v
+ * Revision 3.12 1994/02/20 13:04:39 kardel
+ * parse add/delete second support
+ *
+--- 529,538 ----
+ /*
+ * History:
+ *
+! * clk_rawdcf.c,v
+! * Revision 3.13 1994/03/10 19:00:43 kardel
+! * clear utctime field to avoid confusion on synthesize time stamps
+! *
+ * Revision 3.12 1994/02/20 13:04:39 kardel
+ * parse add/delete second support
+ *
+
+--
+ Frank Kardel (kardel@informatik.uni-erlangen.de)
+ All SCSI disks will from now on be required to send an email
+ notice 24 hours prior to complete hardware failure!
+
diff --git a/usr.sbin/xntpd/patches/patch.28 b/usr.sbin/xntpd/patches/patch.28
new file mode 100644
index 0000000..37e2065
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.28
@@ -0,0 +1,454 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa07183; 13 Mar 94 23:57 EST
+Received: from hpsdlo.sdd.hp.com by louie.udel.edu id aa17483;
+ 13 Mar 94 23:50 EST
+Received: from hpsdlz.sdd.hp.com by hpsdlo.sdd.hp.com with SMTP
+ (1.36.108.4/15.5+IOS 3.21+sdd) id AA07032; Sun, 13 Mar 1994 20:50:23 -0800
+Received: from localhost by hpsdlz.sdd.hp.com with SMTP
+ (1.36.108.4/15.5+IOS 3.21+sdd) id AA05726; Sun, 13 Mar 1994 20:50:21 -0800
+Message-Id: <9403140450.AA05726@hpsdlz.sdd.hp.com>
+To: mills@udel.edu
+Subject: patches for xntpd
+Date: Sun, 13 Mar 1994 20:50:21 -0800
+From: Ken Stone <ken@sdd.hp.com>
+
+
+Ok Dave,
+
+I guess I'll take a poke at the "m" version for cleanup and updates. This
+should take care of the newly released 9.03 for s300/s400 which has the
+adjtime(2) syscall. Also, cleanup in readiness for 10.0 all around.
+
+ -- Ken
+
+P.S. How is your HP hardware/software deal going ? I haven't heard anything
+ lately.
+
+
+
+First do a "rm */hpux10+*" as I have renamed all that to hpux-adj ... that
+9.03 blew me out of the water on the naming scheme :-)
+
+Then unshar the following ... it will add a few new files and give you
+diff to apply (diffs.hpux).
+
+
+#---------------------------------- cut here ----------------------------------
+# This is a shell archive. Remove anything before this line,
+# then unpack it by saving it in a file and typing "sh file".
+#
+# Wrapped by Source Hacker <src@hpsdlz> on Sun Mar 13 20:47:57 1994
+#
+# This archive contains:
+# compilers/hpux-adj.cc compilers/hpux-adj.gcc
+# machines/hpux-adj scripts/hpadjtime.sh
+# diffs.hpux
+#
+# Error checking via wc(1) will be performed.
+# Error checking via sum(1) will be performed.
+
+LANG=""; export LANG
+PATH=/bin:/usr/bin:$PATH; export PATH
+
+if sum -r </dev/null >/dev/null 2>&1
+then
+ sumopt='-r'
+else
+ sumopt=''
+fi
+
+echo x - compilers/hpux-adj.cc
+cat >compilers/hpux-adj.cc <<'@EOF'
+COMPILER=cc +O1
+@EOF
+set `sum $sumopt <compilers/hpux-adj.cc`; if test $1 -ne 22541
+then
+ echo ERROR: compilers/hpux-adj.cc checksum is $1 should be 22541
+fi
+set `wc -lwc <compilers/hpux-adj.cc`
+if test $1$2$3 != 1216
+then
+ echo ERROR: wc results of compilers/hpux-adj.cc are $* should be 1 2 16
+fi
+
+chmod 644 compilers/hpux-adj.cc
+
+echo x - compilers/hpux-adj.gcc
+cat >compilers/hpux-adj.gcc <<'@EOF'
+COMPILER=gcc -O2
+@EOF
+set `sum $sumopt <compilers/hpux-adj.gcc`; if test $1 -ne 23593
+then
+ echo ERROR: compilers/hpux-adj.gcc checksum is $1 should be 23593
+fi
+set `wc -lwc <compilers/hpux-adj.gcc`
+if test $1$2$3 != 1217
+then
+ echo ERROR: wc results of compilers/hpux-adj.gcc are $* should be 1 2 17
+fi
+
+chmod 644 compilers/hpux-adj.gcc
+
+echo x - machines/hpux-adj
+cat >machines/hpux-adj <<'@EOF'
+SHELL= /bin/sh
+RANLIB= ls # ar does the work of ranlib under System V
+DEFS_LOCAL= -DREFCLOCK
+DEFS= -DHAVE_TERMIOS -DSYS_HPUX=10
+AUTHDEFS= -DDES -DMD5
+CLOCKDEFS= -DLOCAL_CLOCK
+COPTS=
+INSTALL=$(TOP)scripts/install.sh
+@EOF
+set `sum $sumopt <machines/hpux-adj`; if test $1 -ne 42265
+then
+ echo ERROR: machines/hpux-adj checksum is $1 should be 42265
+fi
+set `wc -lwc <machines/hpux-adj`
+if test $1$2$3 != 826251
+then
+ echo ERROR: wc results of machines/hpux-adj are $* should be 8 26 251
+fi
+
+chmod 644 machines/hpux-adj
+
+echo x - scripts/hpadjtime.sh
+cat >scripts/hpadjtime.sh <<'@EOF'
+#! /bin/sh
+
+if [ -f /bin/uname -o -f /usr/bin/uname ]; then
+ set `uname -a | tr '[A-Z]' '[a-z]'`
+ case "$1" in
+ hp-ux) case "$3" in
+ *.10.*) val=1 ;;
+ *.09.03) case "$5" in
+ 9000/3*) val=1 ;;
+ *) val=0 ;;
+ esac ;;
+ *) val=0 ;;
+ esac
+ ;;
+ *)
+ esac
+fi
+exit $val
+@EOF
+set `sum $sumopt <scripts/hpadjtime.sh`; if test $1 -ne 1497
+then
+ echo ERROR: scripts/hpadjtime.sh checksum is $1 should be 1497
+fi
+set `wc -lwc <scripts/hpadjtime.sh`
+if test $1$2$3 != 1850287
+then
+ echo ERROR: wc results of scripts/hpadjtime.sh are $* should be 18 50 287
+fi
+
+chmod 755 scripts/hpadjtime.sh
+
+echo x - diffs.hpux
+cat >diffs.hpux <<'@EOF'
+*** xntp3.3m.orig/compilers/hpux.cc Thu Sep 2 13:19:56 1993
+--- xntp3.3m/compilers/hpux.cc Sun Mar 13 12:10:23 1994
+***************
+*** 1,2 ****
+! COMPILER=cc
+! COPTS=+O1
+--- 1 ----
+! COMPILER=cc +O1
+*** xntp3.3m.orig/compilers/hpux.gcc Thu Sep 2 13:19:59 1993
+--- xntp3.3m/compilers/hpux.gcc Sun Mar 13 12:10:29 1994
+***************
+*** 1,2 ****
+! COMPILER=gcc
+! COPTS=-O2
+--- 1 ----
+! COMPILER=gcc -O2
+*** xntp3.3m.orig/hints/hpux Fri Dec 3 02:28:57 1993
+--- xntp3.3m/hints/hpux Sun Mar 13 20:20:38 1994
+***************
+*** 1,59 ****
+ This file hopefully describes the whatever and however of how to get xntp
+! running on hpux 8.0 and later s300, s700, and s800.
+
+ First off, all the standard disclaimers hold here ... HP doesn't have anthing
+ to do with this stuff. I fool with it in my spare time because we use it and
+ because I like to. We just happen to have a lot of HP machines around here :-)
+! Xntp has been in use here for several months and has a fair amount of mileage
+ on various HP platforms within the company. I can't really guarantee bug fixes
+ but I'd certainly like to hear about bugs and I won't hestitate to look at
+ any fixes sent to me.
+
+! Now lets talk OS. If you don't have 8.0 or later, pretty much hang it up now.
+! This stuff has run here on 8.0 s300, s700, and s800. Its possible that it
+! runs on 7.0 but I have not tried v3 code on 7.0 at all.
+
+! [Note that recent reports state that this release does in fact run on HP
+! 300 and 400 boxes, which run 7.0 - Ed.]
+
+! Next, let me explain a bit about how this stuff works on HP-UX since we don't
+ have adjtime(2). The directory adjtime contains libadjtime.a and the adjtimed
+ daemon. Instead of the adjtime(2) system call, we use a library routine to
+ talk to adjtimed thru message queues. Adjtimed munges into /dev/kmem and
+ causes the clock to skew properly as needed. PLEASE NOTE that the adjtime
+ code provided here is NOT a general replacement for adjtime(2) ... use of
+! this adjtime(3)/adjtimed(8) other than here may yield very odd results.
+
+ What to do to get this stuff running ?
+
+! * cd ..
+! * Say "make makeconfig"
+
+! * cd ..
+! * Say "make", sit back for a few minutes.
+
+ * cd authstuff
+ * Say "./authcert < certdata" and check the output. Every line should
+ end with "OK" ... if not, we got trouble.
+ * Now try "./authspeed auth.samplekeys". What we want to
+ remember here is the "authentication delay in CPU time"
+
+! * cd ..
+! * Now we need to install this stuff ... make install will not work
+! unless you have replaced the SYSV install command with a BSD
+! compatible version. So ... the simplest thing to do is run
+! make -n install and do manually what it would have done.
+
+ * I'd suggest reading the xntp docs about now :-) ... seriously !!
+
+! * Check out the docs and the stuff in xntp/conf and build a config
+! file ... put it in /usr/local/etc/xntp.conf (or where ever you
+! defined the config file to be in Config). One thing we have
+! added to this version of xntpd is a way to select config files
+! if you are sharing /usr/local thru NFS or whatever. If the
+! file /usr/local/etc/xntp.conf happens to be a directory, the files
+! in that directory are searched until a match is found. The rules
+! for a match are:
+
+ 1. Our hostname
+ 2. default.<machine id> (as in default.375 or default.850)
+--- 1,63 ----
++ Last update: Sun Mar 13 15:05:31 PST 1994
++
+ This file hopefully describes the whatever and however of how to get xntp
+! running on hpux 7.0 and later s300. s400, s700, and s800.
+
+ First off, all the standard disclaimers hold here ... HP doesn't have anthing
+ to do with this stuff. I fool with it in my spare time because we use it and
+ because I like to. We just happen to have a lot of HP machines around here :-)
+! Xntpd has been in use here for several years and has a fair amount of mileage
+ on various HP platforms within the company. I can't really guarantee bug fixes
+ but I'd certainly like to hear about bugs and I won't hestitate to look at
+ any fixes sent to me.
+
+! Now lets talk OS. If you don't have 7.0 or later, pretty much hang it up now.
+! This stuff has run here on pretty much everything from 8.0 upward on s300,
+! s700, and s800. It is known to run on 7.0 s300/s400 but all reports are
+! from the field and not my personal experience.
+
+! If you are lucky enough to have a s300 or s400 with 9.03, then you no longer
+! have to worry about adjtimed as HP-UX now has adjtime(2). The rest of you
+! will have to wait on 10.0 which will have adjtime(2) and a supported though
+! a bit older version of xntpd.
+
+! Next, let me explain a bit about how this stuff works on HP-UX's that do not
+ have adjtime(2). The directory adjtime contains libadjtime.a and the adjtimed
+ daemon. Instead of the adjtime(2) system call, we use a library routine to
+ talk to adjtimed thru message queues. Adjtimed munges into /dev/kmem and
+ causes the clock to skew properly as needed. PLEASE NOTE that the adjtime
+ code provided here is NOT a general replacement for adjtime(2) ... use of
+! this adjtime(3)/adjtimed(8) other than with xntpd may yield very odd results.
+
+ What to do to get this stuff running ?
+
+! * If you are running an OS less than 10.0 or do not have a s300/s400
+! with 9.03 or better
+! -> cd machines
+! -> vi hpux
+! -> (change -DSYS_HPUX=? to match whatever you are running [7,8,9])
+! -> cd ..
+
+! * Say "make makeconfig"
+
++ * Say "make", sit back for a few minutes.
++
+ * cd authstuff
+ * Say "./authcert < certdata" and check the output. Every line should
+ end with "OK" ... if not, we got trouble.
+ * Now try "./authspeed auth.samplekeys". What we want to
+ remember here is the "authentication delay in CPU time"
++ * cd ..
+
+! * Say "make install"
+
+ * I'd suggest reading the xntp docs about now :-) ... seriously !!
+
+! * One thing I have added to this version of xntpd is a way to select
+! config files if you are sharing /usr/local thru NFS or whatever.
+! If the file /usr/local/etc/xntp.conf happens to be a directory, the
+! files in that directory are searched until a match is found. The
+! rules for a match are:
+
+ 1. Our hostname
+ 2. default.<machine id> (as in default.375 or default.850)
+***************
+*** 72,76 ****
+--- 76,92 ----
+
+ * On some 320's and 835's we have had to run adjtimed with "-p 45" or
+ so to get rid of syslog messages about "last adjust did not finish".
++
++ * At 9.0, there is a problem with DIAGMON (patch available from the
++ response center) which causes it to delete the message queue that
++ adjtimed/xntpd use to communicate. (see next note for result)
++
++ * Xntpd has been known to get really ticked off when adjtime() fails
++ which is usually only while running the emulation code on HP-UX.
++ When it gets mad, it usually jumps the clock into never never land.
++ Possible reasons for this are adjtimed being killed or just never
++ started or adjtimed being completely swapped out on a really busy
++ machine (newer adjtimed try to lock themselves in memory to prevent
++ this one).
+
+ Anything else ... just drop me a line at ken@sdd.hp.com
+*** xntp3.3m.orig/include/ntp_machine.h Sun Feb 27 19:34:59 1994
+--- xntp3.3m/include/ntp_machine.h Sun Mar 13 15:35:33 1994
+***************
+*** 334,341 ****
+ #define setlinebuf(f) setvbuf(f, NULL, _IOLBF, 0)
+ #define NO_SIGNED_CHAR_DECL
+ #define LOCK_PROCESS
+- #define HAVE_NO_NICE /* HPUX uses rtprio instead */
+ #define RETSIGTYPE void
+ #if (SYS_HPUX < 10)
+ #define NOKMEM
+ #else
+--- 334,345 ----
+ #define setlinebuf(f) setvbuf(f, NULL, _IOLBF, 0)
+ #define NO_SIGNED_CHAR_DECL
+ #define LOCK_PROCESS
+ #define RETSIGTYPE void
++ #if (SYS_HPUX < 9)
++ #define HAVE_NO_NICE /* HPUX uses rtprio instead */
++ #else
++ #define HAVE_BSD_NICE /* new at 9.X */
++ #endif
+ #if (SYS_HPUX < 10)
+ #define NOKMEM
+ #else
+*** xntp3.3m.orig/lib/Makefile.tmpl Wed Feb 2 21:20:13 1994
+--- xntp3.3m/lib/Makefile.tmpl Sun Mar 13 16:27:50 1994
+***************
+*** 49,55 ****
+ $(LIBNAME).a: $(OBJS)
+ ar rv $@ $?
+ -rm -f $?
+! @if ( hp-pa || hp-mc680x0 ) > /dev/null 2>&1; then \
+ ( cd ../adjtime && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)" ) && ar rv $@ ../adjtime/adjtime.o; \
+ else \
+ :; \
+--- 49,55 ----
+ $(LIBNAME).a: $(OBJS)
+ ar rv $@ $?
+ -rm -f $?
+! @if ( ../scripts/hpadjtime.sh ) > /dev/null 2>&1; then \
+ ( cd ../adjtime && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)" ) && ar rv $@ ../adjtime/adjtime.o; \
+ else \
+ :; \
+*** xntp3.3m.orig/scripts/Guess.sh Wed Jan 26 15:26:03 1994
+--- xntp3.3m/scripts/Guess.sh Sun Mar 13 14:10:19 1994
+***************
+*** 40,46 ****
+ guess="ultrix"
+ ;;
+ hp-ux) case "$3" in
+! *.10.*) guess="hpux10+" ;;
+ *) guess="hpux" ;;
+ esac
+ ;;
+--- 40,50 ----
+ guess="ultrix"
+ ;;
+ hp-ux) case "$3" in
+! *.10.*) guess="hpux-adj" ;;
+! *.09.03) case "$5" in
+! 9000/3*) guess="hpux-adj" ;;
+! *) guess="hpux" ;;
+! esac ;;
+ *) guess="hpux" ;;
+ esac
+ ;;
+*** xntp3.3m.orig/util/tickadj.c Wed Feb 2 21:20:17 1994
+--- xntp3.3m/util/tickadj.c Sun Mar 13 13:55:53 1994
+***************
+*** 388,393 ****
+--- 388,409 ----
+ #endif
+ #endif
+
++ #if defined(SYS_HPUX)
++ #define X_TICKADJ 0
++ #define X_TICK 1
++ #define X_DEF
++ static struct nlist nl[] =
++ #ifdef hp9000s300
++ { {"_tickadj"},
++ {"_old_tick"},
++ #else
++ { {"tickadj"},
++ {"old_tick"},
++ #endif
++ {""},
++ };
++ #endif
++
+ #if !defined(X_DEF)
+ #define X_TICKADJ 0
+ #define X_TICK 1
+***************
+*** 408,413 ****
+--- 424,430 ----
+ "/kernel/unix",
+ "/386bsd",
+ "/netbsd",
++ "/hp-ux",
+ NULL
+ };
+ struct stat stbuf;
+*** xntp3.3m.orig/xntpd/ntp_loopfilter.c Sun Feb 27 19:36:16 1994
+--- xntp3.3m/xntpd/ntp_loopfilter.c Sun Mar 13 14:03:54 1994
+***************
+*** 349,356 ****
+ }
+ }
+ #endif /* HAVE_BSD_TTYS */
+- fdpps = fd232;
+ #endif /* HPUXGADGET */
+
+ /*
+ * Insert in device list.
+--- 349,356 ----
+ }
+ }
+ #endif /* HAVE_BSD_TTYS */
+ #endif /* HPUXGADGET */
++ fdpps = fd232;
+
+ /*
+ * Insert in device list.
+@EOF
+set `sum $sumopt <diffs.hpux`; if test $1 -ne 46307
+then
+ echo ERROR: diffs.hpux checksum is $1 should be 46307
+fi
+set `wc -lwc <diffs.hpux`
+if test $1$2$3 != 288172410391
+then
+ echo ERROR: wc results of diffs.hpux are $* should be 288 1724 10391
+fi
+
+chmod 664 diffs.hpux
+
+exit 0
+
+
+
diff --git a/usr.sbin/xntpd/patches/patch.29 b/usr.sbin/xntpd/patches/patch.29
new file mode 100644
index 0000000..ee161a2
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.29
@@ -0,0 +1,52 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa24239; 16 Mar 94 18:01 EST
+Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa18720;
+ 16 Mar 94 17:57 EST
+Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
+ id AA25324 (5.65c-6/7.3v-FAU); Wed, 16 Mar 1994 23:57:39 +0100
+Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
+ id AA18230 (5.65c-6/7.3m-FAU); Wed, 16 Mar 1994 23:57:37 +0100
+From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
+Message-Id: <199403162257.AA18230@faui43.informatik.uni-erlangen.de>
+Subject: hpadjtime.sh
+To: mills@udel.edu, ken@sdd.hp.com
+Date: Wed, 16 Mar 94 23:57:32 MET
+Return-Receipt-To: "Frank Kardel" <Frank.Kardel@informatik.uni-erlangen.de>
+X-Mailer: ELM [version 2.3 PL11]
+
+Hi, 3.3n is somewhat broken...
+
+First of all
+ - scripts/hpadjtime.sh is missing (it's in patch.28)
+
+And
+ - scripts/hpadjtime.sh is broken for non hp-ux
+ (will try to build adjtime libs on non hp-ux architectures
+ as a default value was no set)
+
+Please use this version of scripts/hpadjtime.sh for increased safety:
+
+#! /bin/sh
+val=1
+if [ -f /bin/uname -o -f /usr/bin/uname ]; then
+ set `uname -a | tr '[A-Z]' '[a-z]'`
+ case "$1" in
+ hp-ux) case "$3" in
+ *.10.*) val=1 ;;
+ *.09.03) case "$5" in
+ 9000/3*) val=1 ;;
+ *) val=0 ;;
+ esac ;;
+ *) val=0 ;;
+ esac
+ ;;
+ *)
+ esac
+fi
+exit $val
+
+--
+ Frank Kardel (kardel@informatik.uni-erlangen.de)
+ All SCSI disks will from now on be required to send an email
+ notice 24 hours prior to complete hardware failure!
+
diff --git a/usr.sbin/xntpd/patches/patch.3 b/usr.sbin/xntpd/patches/patch.3
new file mode 100644
index 0000000..beba805
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.3
@@ -0,0 +1,3032 @@
+diff -c TODO:1.1.1.3 TODO:3.5
+*** TODO:1.1.1.3 Wed Jan 26 21:46:47 1994
+--- TODO Wed Jan 26 21:46:48 1994
+***************
+*** 1,5 ****
+ #
+! # TODO,v 3.4 1994/01/23 17:19:06 kardel Exp
+ #
+ This file contains problems known to the authors that still need to be done.
+ We would appreciate if you could spare some of your time to look through
+--- 1,5 ----
+ #
+! # TODO,v 3.5 1994/01/25 19:03:55 kardel Exp
+ #
+ This file contains problems known to the authors that still need to be done.
+ We would appreciate if you could spare some of your time to look through
+diff -c doc/xntpd.8:1.1.1.11 doc/xntpd.8:3.21
+*** doc/xntpd.8:1.1.1.11 Wed Jan 26 21:47:54 1994
+--- doc/xntpd.8 Wed Jan 26 21:47:55 1994
+***************
+*** 74,79 ****
+--- 74,85 ----
+ ] [
+ .B -t
+ .I trustedkey
++ ] [
++ .B -v
++ .I variable
++ ] [
++ .B -V
++ .I variable
+ ]
+ .SH DESCRIPTION
+ .I Xntpd
+***************
+*** 140,145 ****
+--- 146,155 ----
+ specify a directory to be used for creating statistics files
+ .Ip -t 8
+ add a key number to the trusted key list
++ .Ip -v 8
++ add a system variable
++ .Ip -V 8
++ add a system variable listed by default
+ .SH "CONFIGURATION FILE OPTIONS"
+ .IR Xntpd 's
+ configuration file is relatively free format. Comments, which may be
+***************
+*** 494,499 ****
+--- 504,534 ----
+ This command is obsolete and not available in this version of
+ .I xntpd.
+ .PP
++ .B setvar
++ .I variable
++ .I [default]
++ .PP
++ This command adds an additional system variable. These variables can be
++ used to distribute additional information such as the access policy. If
++ the variable of the from <name>=<value> is followed by the
++ .I default
++ keyword the variable will be listed as part of the default system
++ variables (ntpq rv command). These additional variables serve informational
++ purposes only. They are not related to the protocol other that they can be
++ listed. The known protocol variables will always overide any variables defined
++ via the
++ .I setvar
++ mechanism.
++ .PP
++ There are three special variables that contain the names of all variable of
++ the same group. The
++ .I sys_var_list
++ holds the names of all system variables. The
++ .I peer_var_list
++ holds the names of all peer variables and the
++ .I clock_var_list
++ hold the names of the reference clock variables.
++ .PP
+ .B resolver
+ .I /path/xntpres
+ .PP
+***************
+*** 1093,1101 ****
+ time.
+ On the availability of PPS information the
+ .I time2
+! fudge factor show the difference betwteen the PPS time stamp and the reception
+! time stamp of the serial signal. This parameter is read only attempts to
+! set this parameter will be ignored.
+ The
+ .I flag0
+ enables input filtering. This a median filter with continuous sampling. The
+--- 1128,1140 ----
+ time.
+ On the availability of PPS information the
+ .I time2
+! fudge factor defines the skew between the PPS time stamp and the reception
+! time stamp of the PPS signal. This parameter is usually 0 as usually
+! the PPS signal is believed in time and OS delays should be corrected
+! in the machine specific section of the kernel driver.
+! .I time2
+! needs only be set when the actial PPS signal is delayed for some
+! reason.
+ The
+ .I flag0
+ enables input filtering. This a median filter with continuous sampling. The
+***************
+*** 1109,1121 ****
+ .I ntpq
+ timecode variable
+ .PP
+! The timecode variable in the ntpq read clock variable command contains several
+! fields. The first field is the local time in Unix format. The second field is
+! the offset to UTC (format HHMM). The currently active receiver flags are listed
+! next. Additional feature flags of the receiver are optionally listed in paranthesis.
+! The actual time code is enclosed in angle brackets < >. A qualification of the
+! decoded time code format is following the time code. The last piece of information
+! is the overall running time and the accumulated times for the clock event states.
+ .PP
+ Unit encoding
+ .PP
+--- 1148,1172 ----
+ .I ntpq
+ timecode variable
+ .PP
+! The ntpq read clock variables command list several variables. These
+! hold followinf information:
+! .I refclock_time
+! is the local time with the offset to UTC (format HHMM).
+! The currently active receiver flags are listed in
+! .I refclock_status.
+! Additional feature flags of the receiver are optionally listed in paranthesis.
+! The actual time code is listed in
+! .I timecode.
+! A qualification of the decoded time code format is following in
+! .I refclock_format.
+! The last piece of information is the overall running time and the accumulated
+! times for the clock event states in
+! .I refclock_states.
+! When PPS information is present additional variable are available.
+! .I refclock_ppstime
+! lists then the PPS timestamp and
+! .I refclock_ppsskew
+! lists the difference between RS232 derived timestamp and the PPS timestamp.
+ .PP
+ Unit encoding
+ .PP
+diff -c include/ntp_control.h:1.1.1.5 include/ntp_control.h:3.6
+*** include/ntp_control.h:1.1.1.5 Wed Jan 26 21:48:21 1994
+--- include/ntp_control.h Wed Jan 26 21:48:21 1994
+***************
+*** 163,171 ****
+ #define CS_SYSTEM 17
+ #define CS_KEYID 18
+ #define CS_REFSKEW 19
+! #define CS_VERSION 20
+
+! #define CS_MAXCODE CS_VERSION
+
+ /*
+ * Peer variables we understand
+--- 163,171 ----
+ #define CS_SYSTEM 17
+ #define CS_KEYID 18
+ #define CS_REFSKEW 19
+! #define CS_VARLIST 20
+
+! #define CS_MAXCODE CS_VARLIST
+
+ /*
+ * Peer variables we understand
+***************
+*** 204,212 ****
+ #define CP_SENT 32
+ #define CP_FILTERROR 33
+ #define CP_FLASH 34
+! #define CP_DISP 35
+! #define CP_MAXCODE CP_DISP
+
+ /*
+ * Clock variables we understand
+ */
+--- 204,213 ----
+ #define CP_SENT 32
+ #define CP_FILTERROR 33
+ #define CP_FLASH 34
+! #define CP_VARLIST 35
+
++ #define CP_MAXCODE CP_VARLIST
++
+ /*
+ * Clock variables we understand
+ */
+***************
+*** 222,229 ****
+ #define CC_FUDGEVAL2 10
+ #define CC_FLAGS 11
+ #define CC_DEVICE 12
+
+! #define CC_MAXCODE CC_DEVICE
+
+ /*
+ * Definition of the structure used internally to hold trap information.
+--- 223,231 ----
+ #define CC_FUDGEVAL2 10
+ #define CC_FLAGS 11
+ #define CC_DEVICE 12
++ #define CC_VARLIST 13
+
+! #define CC_MAXCODE CC_VARLIST
+
+ /*
+ * Definition of the structure used internally to hold trap information.
+diff -c include/ntp_filegen.h:1.1.1.3 include/ntp_filegen.h:3.7
+*** include/ntp_filegen.h:1.1.1.3 Wed Jan 26 21:48:22 1994
+--- include/ntp_filegen.h Wed Jan 26 21:48:22 1994
+***************
+*** 1,5 ****
+ /*
+! * ntp_filegen.h,v 3.6 1993/09/01 21:51:24 kardel Exp
+ *
+ * definitions for NTP file generations support
+ *
+--- 1,5 ----
+ /*
+! * ntp_filegen.h,v 3.7 1994/01/25 19:04:16 kardel Exp
+ *
+ * definitions for NTP file generations support
+ *
+diff -c include/ntp_machine.h:1.1.1.9 include/ntp_machine.h:1.24
+*** include/ntp_machine.h:1.1.1.9 Wed Jan 26 21:48:27 1994
+--- include/ntp_machine.h Wed Jan 26 21:48:27 1994
+***************
+*** 123,134 ****
+
+ HAVE_UNISTD_H - Maybe should be part of NTP_POSIX_SOURCE ?
+
+ You could just put the defines on the DEFS line in machines/<os> file.
+ I don't since there are lost of different types compiler that a systemm might
+ have, some that can do proto typing and others that cannot on the saem system.
+ I get a chanse to twiddle some of the configuration paramasters at compile
+ time based on compler/machine combinatsions by using this include file.
+! See convex, aix and sun configurations see how complex it get.
+
+ */
+
+--- 123,138 ----
+
+ HAVE_UNISTD_H - Maybe should be part of NTP_POSIX_SOURCE ?
+
++ DEFINITIONS FOR SYSTEM && PROCESSOR
++ STR_SYSTEM - value of system variable
++ STR_PROCESSOR - value of processor variable
++
+ You could just put the defines on the DEFS line in machines/<os> file.
+ I don't since there are lost of different types compiler that a systemm might
+ have, some that can do proto typing and others that cannot on the saem system.
+ I get a chanse to twiddle some of the configuration paramasters at compile
+ time based on compler/machine combinatsions by using this include file.
+! See convex, aix and sun configurations see how complex it gets.
+
+ */
+
+***************
+*** 152,157 ****
+--- 156,164 ----
+ #endif
+ #endif /*_BSD */
+ #define HAVE_BSD_NICE
++ #ifndef STR_SYSTEM
++ #define STR_SYSTEM "UNIX/AIX"
++ #endif
+ #endif /* RS6000 */
+
+ /*
+***************
+*** 166,171 ****
+--- 173,181 ----
+ #define RETSIGTYPE void
+ #define NTP_SYSCALL_GET 132
+ #define NTP_SYSCALL_ADJ 147
++ #ifndef STR_SYSTEM
++ #define STR_SYSTEM "UNIX/SunOS 4.x"
++ #endif
+ #endif
+
+ /*
+***************
+*** 182,188 ****
+--- 192,201 ----
+ #define NTP_POSIX_SOURCE
+ #define HAVE_ATT_SETPGRP
+ #define HAVE_ATT_NICE
++ #ifndef STR_SYSTEM
++ #define STR_SYSTEM "UNIX/SINIX-M"
+ #endif
++ #endif
+
+ /*
+ * SunOS 5.1 or SunOS 5.2 or Solaris 2.1 or Solaris 2.2
+***************
+*** 198,203 ****
+--- 211,219 ----
+ #define HAVE_ATT_SETPGRP
+ #define HAVE_ATT_NICE
+ #define UDP_WILDCARD_DELIVERY
++ #ifndef STR_SYSTEM
++ #define STR_SYSTEM "UNIX/Solaris 2.x"
++ #endif
+ #endif
+
+ /*
+***************
+*** 221,227 ****
+--- 237,246 ----
+ #define NTP_POSIX_SOURCE
+ #define HAVE_ATT_SETPGRP
+ #endif
++ #ifndef STR_SYSTEM
++ #define STR_SYSTEM "UNIX/ConvexOS"
+ #endif
++ #endif
+
+ /*
+ * IRIX 4.X and IRIX 5.x
+***************
+*** 235,240 ****
+--- 254,262 ----
+ #define HAVE_ATT_SETPGRP
+ #define HAVE_BSD_NICE
+ #define NTP_POSIX_SOURCE
++ #ifndef STR_SYSTEM
++ #define STR_SYSTEM "UNIX/IRIX"
++ #endif
+ #endif
+
+ /*
+***************
+*** 247,253 ****
+--- 269,278 ----
+ #define HAVE_BSD_NICE
+ #define RETSIGTYPE void
+ #define NTP_SYSCALLS_STD
++ #ifndef STR_SYSTEM
++ #define STR_SYSTEM "UNIX/Ultrix"
+ #endif
++ #endif
+
+ /*
+ * AUX
+***************
+*** 272,277 ****
+--- 297,305 ----
+ #define HAVE_BSD_TTYS
+ #define LOG_NTP LOG_LOCAL1
+ #define HAVE_SIGNALED_IO
++ #ifndef STR_SYSTEM
++ #define STR_SYSTEM "UNIX/AUX"
++ #endif
+ #endif
+
+ /*
+***************
+*** 283,289 ****
+--- 311,320 ----
+ #define HAVE_BSD_NICE
+ #define HAVE_N_UN
+ #undef NTP_POSIX_SOURCE
++ #ifndef STR_SYSTEM
++ #define STR_SYSTEM "UNIX/Next"
+ #endif
++ #endif
+
+ /*
+ * HPUX
+***************
+*** 301,306 ****
+--- 332,340 ----
+ #else
+ #define HAVE_READKMEM
+ #endif
++ #ifndef STR_SYSTEM
++ #define STR_SYSTEM "UNIX/HPUX"
++ #endif
+ #endif
+
+ /*
+***************
+*** 311,316 ****
+--- 345,353 ----
+ #define HAVE_LIBKVM
+ #define NTP_POSIX_SOURCE
+ #define HAVE_BSD_NICE
++ #ifndef STR_SYSTEM
++ #define STR_SYSTEM "UNIX/BSDI"
++ #endif
+ #define HAVE_BSD_TTYS
+ #endif
+
+***************
+*** 327,332 ****
+--- 364,372 ----
+ * along with a standard name one day ! */
+ #define ntp_adjtime __adjtimex
+ #define HAVE_BSD_NICE
++ #ifndef STR_SYSTEM
++ #define STR_SYSTEM "UNIX/Linux"
++ #endif
+ #endif
+
+ /*
+***************
+*** 338,344 ****
+--- 378,387 ----
+ #define HAVE_READKMEM
+ #define NTP_POSIX_SOURCE
+ #define HAVE_BSD_NICE
++ #ifndef STR_SYSTEM
++ #define STR_SYSTEM "UNIX/*BSD"
+ #endif
++ #endif
+
+ /*
+ * DECOSF1
+***************
+*** 349,354 ****
+--- 392,400 ----
+ #define NTP_POSIX_SOURCE
+ #define NTP_SYSCALLS_STD
+ #define HAVE_BSD_NICE
++ #ifndef STR_SYSTEM
++ #define STR_SYSTEM "UNIX/DECOSF1"
++ #endif
+ #endif
+
+ /*
+***************
+*** 358,364 ****
+--- 404,413 ----
+ #define HAVE_READKMEM
+ #define S_CHAR_DEFINED
+ #define HAVE_BSD_NICE
++ #ifndef STR_SYSTEM
++ #define STR_SYSTEM "UNIX/I386"
+ #endif
++ #endif
+
+ /*
+ * Mips
+***************
+*** 366,371 ****
+--- 415,423 ----
+ #if defined(SYS_MIPS)
+ #define NOKMEM
+ #define HAVE_BSD_NICE
++ #ifndef STR_SYSTEM
++ #define STR_SYSTEM "UNIX/Mips"
++ #endif
+ #endif
+
+ /*
+***************
+*** 373,379 ****
+--- 425,434 ----
+ */
+ #if defined(SYS_SEQUENT)
+ #define HAVE_BSD_NICE
++ #ifndef STR_SYSTEM
++ #define STR_SYSTEM "UNIX/Sequent Dynix 3"
+ #endif
++ #endif
+
+ /*
+ * PTX
+***************
+*** 407,412 ****
+--- 462,470 ----
+ typedef unsigned short u_short;
+ typedef unsigned long u_long;
+ #endif
++ #ifndef STR_SYSTEM
++ #define STR_SYSTEM "UNIX/Sequent PTX"
++ #endif
+ #endif
+
+
+***************
+*** 417,423 ****
+--- 475,484 ----
+ #define NO_SIGNED_CHAR_DECL
+ #define HAVE_READKMEM
+ #define HAVE_BSD_NICE
++ #ifndef STR_SYSTEM
++ #define STR_SYSTEM "UNIX/Sony"
+ #endif
++ #endif
+
+ /*
+ * VAX
+***************
+*** 426,431 ****
+--- 487,495 ----
+ #define NO_SIGNED_CHAR_DECL
+ #define HAVE_READKMEM
+ #define HAVE_BSD_NICE
++ #ifndef STR_SYSTEM
++ #define STR_SYSTEM "UNIX/VAX"
++ #endif
+ #endif
+
+ /*
+***************
+*** 445,455 ****
+ #define LOCK_PROCESS
+ #define SYSV_TIMEOFDAY
+ #define SIZE_RETURNED_IN_BUFFER
+! #endif
+!
+! #ifdef STREAM /* STREAM implies TERMIOS */
+! #ifndef HAVE_TERMIOS
+! #define HAVE_TERMIOS
+ #endif
+ #endif
+
+--- 509,516 ----
+ #define LOCK_PROCESS
+ #define SYSV_TIMEOFDAY
+ #define SIZE_RETURNED_IN_BUFFER
+! #ifndef STR_SYSTEM
+! #define STR_SYSTEM "UNIX/SysVR4"
+ #endif
+ #endif
+
+***************
+*** 464,469 ****
+--- 525,539 ----
+ #define NTP_SYSCALLS_STD
+ #define USE_PROTOTYPES
+ #define UDP_WILDCARD_DELIVERY
++ #ifndef STR_SYSTEM
++ #define STR_SYSTEM "UNIX/DOMAINOS"
++ #endif
++ #endif
++
++ #ifdef STREAM /* STREAM implies TERMIOS */
++ #ifndef HAVE_TERMIOS
++ #define HAVE_TERMIOS
++ #endif
+ #endif
+
+ #ifndef RETSIGTYPE
+diff -c include/ntp_refclock.h:1.1.1.8 include/ntp_refclock.h:3.8
+*** include/ntp_refclock.h:1.1.1.8 Wed Jan 26 21:48:28 1994
+--- include/ntp_refclock.h Wed Jan 26 21:48:28 1994
+***************
+*** 75,84 ****
+ LONG fudgeval2;
+ u_char currentstatus;
+ u_char lastevent;
+! u_char unused[1];
+ };
+
+-
+ /*
+ * Reference clock I/O structure. Used to provide an interface between
+ * the reference clock drivers and the I/O module.
+--- 75,84 ----
+ LONG fudgeval2;
+ u_char currentstatus;
+ u_char lastevent;
+! u_char unused;
+! struct ctl_var *kv_list; /* additional variables */
+ };
+
+ /*
+ * Reference clock I/O structure. Used to provide an interface between
+ * the reference clock drivers and the I/O module.
+diff -c include/ntpd.h:1.1.1.6 include/ntpd.h:1.5
+*** include/ntpd.h:1.1.1.6 Wed Jan 26 21:48:35 1994
+--- include/ntpd.h Wed Jan 26 21:48:35 1994
+***************
+*** 1,4 ****
+! /* ntpd.h,v 3.1 1993/07/06 01:07:03 jbj Exp
+ * ntpd.h - Prototypes for xntpd.
+ */
+
+--- 1,4 ----
+! /*
+ * ntpd.h - Prototypes for xntpd.
+ */
+
+***************
+*** 21,26 ****
+--- 21,55 ----
+ extern void process_control P((struct recvbuf *, int));
+ extern void report_event P((int, struct peer *));
+
++ /* ntp_control.c */
++ /*
++ * Structure for translation tables between internal system
++ * variable indices and text format.
++ */
++ struct ctl_var {
++ u_short code;
++ u_short flags;
++ char *text;
++ };
++ /*
++ * Flag values
++ */
++ #define CAN_READ 0x01
++ #define CAN_WRITE 0x02
++
++ #define DEF 0x20
++ #define PADDING 0x40
++ #define EOV 0x80
++
++ #define RO (CAN_READ)
++ #define WO (CAN_WRITE)
++ #define RW (CAN_READ|CAN_WRITE)
++
++ extern char * add_var P((struct ctl_var **, unsigned long, int));
++ extern void free_varlist P((struct ctl_var *));
++ extern void set_var P((struct ctl_var **, char *, unsigned long, int));
++ extern void set_sys_var P((char *, unsigned long, int));
++
+ /* ntp_intres.c */
+ extern void ntp_intres P((void));
+
+diff -c include/parse.h:1.1.1.6 include/parse.h:3.13
+*** include/parse.h:1.1.1.6 Wed Jan 26 21:48:36 1994
+--- include/parse.h Wed Jan 26 21:48:36 1994
+***************
+*** 1,7 ****
+ /*
+! * /src/NTP/REPOSITORY/v3/include/parse.h,v 3.12 1994/01/23 17:23:05 kardel Exp
+ *
+! * parse.h,v 3.12 1994/01/23 17:23:05 kardel Exp
+ *
+ * Copyright (c) 1989,1990,1991,1992,1993,1994
+ * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
+--- 1,7 ----
+ /*
+! * /src/NTP/REPOSITORY/v3/include/parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp
+ *
+! * parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp
+ *
+ * Copyright (c) 1989,1990,1991,1992,1993,1994
+ * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
+***************
+*** 15,21 ****
+ #ifndef __PARSE_H__
+ #define __PARSE_H__
+ #if !(defined(lint) || defined(__GNUC__))
+! static char parsehrcsid[]="parse.h,v 3.12 1994/01/23 17:23:05 kardel Exp FAU";
+ #endif
+
+ #include "ntp_types.h"
+--- 15,21 ----
+ #ifndef __PARSE_H__
+ #define __PARSE_H__
+ #if !(defined(lint) || defined(__GNUC__))
+! static char parsehrcsid[]="parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp FAU";
+ #endif
+
+ #include "ntp_types.h"
+***************
+*** 365,370 ****
+--- 365,373 ----
+ * History:
+ *
+ * parse.h,v
++ * Revision 3.13 1994/01/25 19:04:21 kardel
++ * 94/01/23 reconcilation
++ *
+ * Revision 3.12 1994/01/23 17:23:05 kardel
+ * 1994 reconcilation
+ *
+diff -c include/parse_conf.h:1.1.1.5 include/parse_conf.h:3.5
+*** include/parse_conf.h:1.1.1.5 Wed Jan 26 21:48:37 1994
+--- include/parse_conf.h Wed Jan 26 21:48:37 1994
+***************
+*** 1,7 ****
+ /*
+! * /src/NTP/REPOSITORY/v3/include/parse_conf.h,v 3.4 1994/01/23 17:23:07 kardel Exp
+ *
+! * parse_conf.h,v 3.4 1994/01/23 17:23:07 kardel Exp
+ *
+ * Copyright (c) 1993,1994
+ * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
+--- 1,7 ----
+ /*
+! * /src/NTP/REPOSITORY/v3/include/parse_conf.h,v 3.5 1994/01/25 19:04:23 kardel Exp
+ *
+! * parse_conf.h,v 3.5 1994/01/25 19:04:23 kardel Exp
+ *
+ * Copyright (c) 1993,1994
+ * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
+***************
+*** 15,21 ****
+ #ifndef __PARSE_CONF_H__
+ #define __PARSE_CONF_H__
+ #if !(defined(lint) || defined(__GNUC__))
+! static char dcfhrcsid[]="parse_conf.h,v 3.4 1994/01/23 17:23:07 kardel Exp FAU";
+ #endif
+
+ /*
+--- 15,21 ----
+ #ifndef __PARSE_CONF_H__
+ #define __PARSE_CONF_H__
+ #if !(defined(lint) || defined(__GNUC__))
+! static char dcfhrcsid[]="parse_conf.h,v 3.5 1994/01/25 19:04:23 kardel Exp FAU";
+ #endif
+
+ /*
+diff -c include/sys/parsestreams.h:1.1.1.6 include/sys/parsestreams.h:3.11
+*** include/sys/parsestreams.h:1.1.1.6 Wed Jan 26 21:48:44 1994
+--- include/sys/parsestreams.h Wed Jan 26 21:48:44 1994
+***************
+*** 1,7 ****
+ /*
+! * /src/NTP/REPOSITORY/v3/include/sys/parsestreams.h,v 3.10 1994/01/23 17:23:12 kardel Exp
+ *
+! * parsestreams.h,v 3.10 1994/01/23 17:23:12 kardel Exp
+ *
+ * Copyright (c) 1989,1990,1991,1992,1993,1994
+ * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
+--- 1,7 ----
+ /*
+! * /src/NTP/REPOSITORY/v3/include/sys/parsestreams.h,v 3.11 1994/01/25 19:04:30 kardel Exp
+ *
+! * parsestreams.h,v 3.11 1994/01/25 19:04:30 kardel Exp
+ *
+ * Copyright (c) 1989,1990,1991,1992,1993,1994
+ * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
+***************
+*** 13,19 ****
+ */
+
+ #if !(defined(lint) || defined(__GNUC__))
+! static char parse77hrcsid[]="parsestreams.h,v 3.10 1994/01/23 17:23:12 kardel Exp";
+ #endif
+
+ #undef PARSEKERNEL
+--- 13,19 ----
+ */
+
+ #if !(defined(lint) || defined(__GNUC__))
+! static char parse77hrcsid[]="parsestreams.h,v 3.11 1994/01/25 19:04:30 kardel Exp";
+ #endif
+
+ #undef PARSEKERNEL
+diff -c kernel/Makefile.tmpl:1.1.1.3 kernel/Makefile.tmpl:3.6
+*** kernel/Makefile.tmpl:1.1.1.3 Wed Jan 26 21:48:49 1994
+--- kernel/Makefile.tmpl Wed Jan 26 21:48:49 1994
+***************
+*** 1,7 ****
+ #
+! # /src/NTP/REPOSITORY/v3/kernel/Makefile.tmpl,v 3.5 1994/01/23 17:37:53 kardel Exp
+ #
+- #
+ # parse routine that could be used in two places
+ #
+ COMPILER= cc
+--- 1,6 ----
+ #
+! # /src/NTP/REPOSITORY/v3/kernel/Makefile.tmpl,v 3.6 1994/01/25 19:04:35 kardel Exp
+ #
+ # parse routine that could be used in two places
+ #
+ COMPILER= cc
+diff -c lib/systime.c:1.1.1.10 lib/systime.c:1.7
+*** lib/systime.c:1.1.1.10 Wed Jan 26 21:50:00 1994
+--- lib/systime.c Wed Jan 26 21:50:00 1994
+***************
+*** 238,273 ****
+ #endif
+ }
+
+- sys_clock_offset.l_ui = offset_i;
+- sys_clock_offset.l_uf = offset_f;
+-
+ if (adjtime(&adjtv, &oadjtv) < 0) {
+ syslog(LOG_ERR, "Can't do time adjustment: %m");
+ rval = 0;
+! } else
+ rval = 1;
+
+ #ifdef DEBUGRS6000
+! syslog(LOG_ERR, "adj_systime(%s): offset = %s%s\n",
+! mfptoa((adj<0?-1:0), adj, 9), isneg?"-":"",
+! umfptoa(offset_i, offset_f, 9));
+! syslog(LOG_ERR, "%d %d %d %d\n", (int) adjtv.tv_sec,
+! (int) adjtv.tv_usec, (int) oadjtv.tv_sec, (int)
+! oadjtv.tv_usec);
+ #endif /* DEBUGRS6000 */
+
+! if ((oadjtv.tv_sec != 0 || oadjtv.tv_usec != 0) && (max_no_complete > 0)) {
+! sTVTOTS(&oadjtv, &oadjts);
+! L_ADD(&sys_clock_offset, &oadjts);
+! syslog(LOG_WARNING, "Previous time adjustment didn't complete");
+ #ifdef DEBUG
+! if (debug > 4)
+! syslog(LOG_DEBUG,
+! "Previous adjtime() incomplete, residual = %s\n",
+! tvtoa(&oadjtv));
+ #endif
+! if (--max_no_complete == 0) syslog(LOG_WARNING,
+! "*** No more 'Prev time adj didn't complete'");
+ }
+ return(rval);
+ }
+--- 238,277 ----
+ #endif
+ }
+
+ if (adjtime(&adjtv, &oadjtv) < 0) {
+ syslog(LOG_ERR, "Can't do time adjustment: %m");
+ rval = 0;
+! } else {
+! sys_clock_offset.l_ui = offset_i;
+! sys_clock_offset.l_uf = offset_f;
+ rval = 1;
+
+ #ifdef DEBUGRS6000
+! syslog(LOG_ERR, "adj_systime(%s): offset = %s%s\n",
+! mfptoa((adj<0?-1:0), adj, 9), isneg?"-":"",
+! umfptoa(offset_i, offset_f, 9));
+! syslog(LOG_ERR, "%d %d %d %d\n", (int) adjtv.tv_sec,
+! (int) adjtv.tv_usec, (int) oadjtv.tv_sec, (int)
+! oadjtv.tv_usec);
+ #endif /* DEBUGRS6000 */
+
+! if (oadjtv.tv_sec != 0 || oadjtv.tv_usec != 0) {
+! sTVTOTS(&oadjtv, &oadjts);
+! L_ADD(&sys_clock_offset, &oadjts);
+! if (max_no_complete > 0) {
+! syslog(LOG_WARNING,
+! "Previous time adjustment didn't complete");
+ #ifdef DEBUG
+! if (debug > 4)
+! syslog(LOG_DEBUG,
+! "Previous adjtime() incomplete, residual = %s\n",
+! tvtoa(&oadjtv));
+ #endif
+! if (--max_no_complete == 0)
+! syslog(LOG_WARNING,
+! "*** No more 'Prev time adj didn't complete'");
+! }
+! }
+ }
+ return(rval);
+ }
+diff -c ntpq/ntpq.c:1.1.1.20 ntpq/ntpq.c:3.20
+*** ntpq/ntpq.c:1.1.1.20 Wed Jan 26 21:50:59 1994
+--- ntpq/ntpq.c Wed Jan 26 21:50:59 1994
+***************
+*** 2577,2582 ****
+--- 2577,2583 ----
+ register char *cp;
+ register char *np;
+ register char *cpend;
++ int quoted = 0;
+ static char name[MAXVARLEN];
+ static char value[MAXVALLEN];
+
+***************
+*** 2623,2630 ****
+ while (cp < cpend && (isspace(*cp) && *cp != '\r' && *cp != '\n'))
+ cp++;
+ np = value;
+! while (cp < cpend && *cp != ',')
+! *np++ = *cp++;
+ while (np > value && isspace(*(np-1)))
+ np--;
+ *np = '\0';
+--- 2624,2634 ----
+ while (cp < cpend && (isspace(*cp) && *cp != '\r' && *cp != '\n'))
+ cp++;
+ np = value;
+! while (cp < cpend && ((*cp != ',') || quoted))
+! {
+! quoted ^= ((*np++ = *cp++) == '"');
+! }
+!
+ while (np > value && isspace(*(np-1)))
+ np--;
+ *np = '\0';
+diff -c parse/Makefile.kernel:1.1.1.2 parse/Makefile.kernel:3.8
+*** parse/Makefile.kernel:1.1.1.2 Wed Jan 26 21:51:11 1994
+--- parse/Makefile.kernel Wed Jan 26 21:51:11 1994
+***************
+*** 30,46 ****
+ ld -r -o parse parsesolaris.o libparse_kernel.a ../lib/libntp.a
+ @echo "--- Install 'parse' in /kernel/strmod for automatic loading"
+
+! mparsestreams.o: parsestreams.c microtime.o ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h
+ cc -c -DMICROTIME $(DEFS) -I../include parsestreams.c
+ ld -r -o $@ parsestreams.o ../lib/libntp.a libparse_kernel.a \
+ microtime.o
+ rm -f parsestreams.o
+! @echo "--- You may load mparsestreams.o via 'modload mparsestreams.o' into the kernel"
+
+! parsestreams.o: parsestreams.c ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h
+ cc -c $(DEFS) -I../include parsestreams.c
+! ld -r -o $@ $@ ../lib/libntp.a libparse_kernel.a
+! @echo "--- You may load parsestreams.o via 'modload parsestreams.o' into the kernel"
+
+ microtime.o: $(MICROTIME) assym.s
+ cc -E -I. $(MICROTIME) | sed -e '/\.global _uniqtime/d' > $@.i
+--- 30,51 ----
+ ld -r -o parse parsesolaris.o libparse_kernel.a ../lib/libntp.a
+ @echo "--- Install 'parse' in /kernel/strmod for automatic loading"
+
+! mparsestreams.o: mparsestreams.o.$(KARCH)
+! @echo "--- You may load mparsestreams.o.$(KARCH) via 'modload mparsestreams.o.$(KARCH)' into the kernel"
+!
+! mparsestreams.o.$(KARCH): parsestreams.c microtime.o ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h
+ cc -c -DMICROTIME $(DEFS) -I../include parsestreams.c
+ ld -r -o $@ parsestreams.o ../lib/libntp.a libparse_kernel.a \
+ microtime.o
+ rm -f parsestreams.o
+!
+! parsestreams.o: parsestreams.o.$(KARCH)
+! @echo "--- You may load parsestreams.o.$(KARCH) via 'modload parsestreams.o.$(KARCH)' into the kernel"
+
+! parsestreams.o.$(KARCH): parsestreams.c ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h
+ cc -c $(DEFS) -I../include parsestreams.c
+! ld -r -o $@ parsestreams.o ../lib/libntp.a libparse_kernel.a
+! rm -f parsestreams.o
+
+ microtime.o: $(MICROTIME) assym.s
+ cc -E -I. $(MICROTIME) | sed -e '/\.global _uniqtime/d' > $@.i
+diff -c parse/clk_dcf7000.c:1.1.1.7 parse/clk_dcf7000.c:3.10
+*** parse/clk_dcf7000.c:1.1.1.7 Wed Jan 26 21:51:16 1994
+--- parse/clk_dcf7000.c Wed Jan 26 21:51:17 1994
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_DCF7000)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_dcf7000.c,v 3.9 1994/01/23 17:21:51 kardel Exp
+ *
+! * clk_dcf7000.c,v 3.9 1994/01/23 17:21:51 kardel Exp
+ *
+ * ELV DCF7000 module
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_DCF7000)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_dcf7000.c,v 3.10 1994/01/25 19:05:07 kardel Exp
+ *
+! * clk_dcf7000.c,v 3.10 1994/01/25 19:05:07 kardel Exp
+ *
+ * ELV DCF7000 module
+ *
+diff -c parse/clk_meinberg.c:1.1.1.7 parse/clk_meinberg.c:3.11
+*** parse/clk_meinberg.c:1.1.1.7 Wed Jan 26 21:51:17 1994
+--- parse/clk_meinberg.c Wed Jan 26 21:51:18 1994
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_MEINBERG)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_meinberg.c,v 3.10 1994/01/23 17:21:54 kardel Exp
+ *
+! * clk_meinberg.c,v 3.10 1994/01/23 17:21:54 kardel Exp
+ *
+ * Meinberg clock support
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_MEINBERG)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_meinberg.c,v 3.11 1994/01/25 19:05:10 kardel Exp
+ *
+! * clk_meinberg.c,v 3.11 1994/01/25 19:05:10 kardel Exp
+ *
+ * Meinberg clock support
+ *
+***************
+*** 414,419 ****
+--- 414,422 ----
+ * History:
+ *
+ * clk_meinberg.c,v
++ * Revision 3.11 1994/01/25 19:05:10 kardel
++ * 94/01/23 reconcilation
++ *
+ * Revision 3.10 1994/01/23 17:21:54 kardel
+ * 1994 reconcilation
+ *
+diff -c parse/clk_rawdcf.c:1.1.1.7 parse/clk_rawdcf.c:3.9
+*** parse/clk_rawdcf.c:1.1.1.7 Wed Jan 26 21:51:19 1994
+--- parse/clk_rawdcf.c Wed Jan 26 21:51:19 1994
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.8 1994/01/22 11:24:11 kardel Exp
+ *
+! * clk_rawdcf.c,v 3.8 1994/01/22 11:24:11 kardel Exp
+ *
+ * Raw DCF77 pulse clock support
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.9 1994/01/25 19:05:12 kardel Exp
+ *
+! * clk_rawdcf.c,v 3.9 1994/01/25 19:05:12 kardel Exp
+ *
+ * Raw DCF77 pulse clock support
+ *
+***************
+*** 529,534 ****
+--- 529,537 ----
+ * History:
+ *
+ * clk_rawdcf.c,v
++ * Revision 3.9 1994/01/25 19:05:12 kardel
++ * 94/01/23 reconcilation
++ *
+ * Revision 3.8 1994/01/22 11:24:11 kardel
+ * fixed PPS handling
+ *
+diff -c parse/clk_schmid.c:1.1.1.7 parse/clk_schmid.c:3.10
+*** parse/clk_schmid.c:1.1.1.7 Wed Jan 26 21:51:20 1994
+--- parse/clk_schmid.c Wed Jan 26 21:51:20 1994
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_SCHMID)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_schmid.c,v 3.9 1994/01/23 17:21:56 kardel Exp
+ *
+! * clk_schmid.c,v 3.9 1994/01/23 17:21:56 kardel Exp
+ *
+ * Schmid clock support
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_SCHMID)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_schmid.c,v 3.10 1994/01/25 19:05:15 kardel Exp
+ *
+! * clk_schmid.c,v 3.10 1994/01/25 19:05:15 kardel Exp
+ *
+ * Schmid clock support
+ *
+***************
+*** 168,173 ****
+--- 168,176 ----
+ * History:
+ *
+ * clk_schmid.c,v
++ * Revision 3.10 1994/01/25 19:05:15 kardel
++ * 94/01/23 reconcilation
++ *
+ * Revision 3.9 1994/01/23 17:21:56 kardel
+ * 1994 reconcilation
+ *
+diff -c parse/clk_trimble.c:1.1.1.2 parse/clk_trimble.c:3.7
+*** parse/clk_trimble.c:1.1.1.2 Wed Jan 26 21:51:21 1994
+--- parse/clk_trimble.c Wed Jan 26 21:51:21 1994
+***************
+*** 1,6 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_TRIMSV6)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_trimble.c,v 3.6 1993/10/30 09:44:45 kardel Exp
+ *
+ * Trimble SV6 clock support
+ */
+--- 1,6 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_TRIMSV6)
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/clk_trimble.c,v 3.7 1994/01/25 19:05:17 kardel Exp
+ *
+ * Trimble SV6 clock support
+ */
+***************
+*** 106,111 ****
+--- 106,114 ----
+ * History:
+ *
+ * clk_trimble.c,v
++ * Revision 3.7 1994/01/25 19:05:17 kardel
++ * 94/01/23 reconcilation
++ *
+ * Revision 3.6 1993/10/30 09:44:45 kardel
+ * conditional compilation flag cleanup
+ *
+diff -c parse/parse.c:1.1.1.7 parse/parse.c:3.19
+*** parse/parse.c:1.1.1.7 Wed Jan 26 21:51:24 1994
+--- parse/parse.c Wed Jan 26 21:51:24 1994
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.18 1994/01/23 17:21:59 kardel Exp
+ *
+! * parse.c,v 3.18 1994/01/23 17:21:59 kardel Exp
+ *
+ * Parser module for reference clock
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.19 1994/01/25 19:05:20 kardel Exp
+ *
+! * parse.c,v 3.19 1994/01/25 19:05:20 kardel Exp
+ *
+ * Parser module for reference clock
+ *
+***************
+*** 22,28 ****
+ */
+
+ #if !(defined(lint) || defined(__GNUC__))
+! static char rcsid[] = "parse.c,v 3.18 1994/01/23 17:21:59 kardel Exp";
+ #endif
+
+ #include "sys/types.h"
+--- 22,28 ----
+ */
+
+ #if !(defined(lint) || defined(__GNUC__))
+! static char rcsid[] = "parse.c,v 3.19 1994/01/25 19:05:20 kardel Exp";
+ #endif
+
+ #include "sys/types.h"
+***************
+*** 1139,1144 ****
+--- 1139,1147 ----
+ * History:
+ *
+ * parse.c,v
++ * Revision 3.19 1994/01/25 19:05:20 kardel
++ * 94/01/23 reconcilation
++ *
+ * Revision 3.18 1994/01/23 17:21:59 kardel
+ * 1994 reconcilation
+ *
+diff -c parse/parse_conf.c:1.1.1.7 parse/parse_conf.c:3.13
+*** parse/parse_conf.c:1.1.1.7 Wed Jan 26 21:51:25 1994
+--- parse/parse_conf.c Wed Jan 26 21:51:25 1994
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parse_conf.c,v 3.12 1994/01/23 17:22:02 kardel Exp
+ *
+! * parse_conf.c,v 3.12 1994/01/23 17:22:02 kardel Exp
+ *
+ * Parser configuration module for reference clocks
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parse_conf.c,v 3.13 1994/01/25 19:05:23 kardel Exp
+ *
+! * parse_conf.c,v 3.13 1994/01/25 19:05:23 kardel Exp
+ *
+ * Parser configuration module for reference clocks
+ *
+***************
+*** 81,86 ****
+--- 81,89 ----
+ * History:
+ *
+ * parse_conf.c,v
++ * Revision 3.13 1994/01/25 19:05:23 kardel
++ * 94/01/23 reconcilation
++ *
+ * Revision 3.12 1994/01/23 17:22:02 kardel
+ * 1994 reconcilation
+ *
+diff -c parse/parsesolaris.c:1.1.1.4 parse/parsesolaris.c:3.9
+*** parse/parsesolaris.c:1.1.1.4 Wed Jan 26 21:51:26 1994
+--- parse/parsesolaris.c Wed Jan 26 21:51:27 1994
+***************
+*** 1,7 ****
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v 3.8 1994/01/23 17:22:04 kardel Exp
+ *
+! * parsesolaris.c,v 3.8 1994/01/23 17:22:04 kardel Exp
+ *
+ * STREAMS module for reference clocks
+ * (SunOS5.x - not fully tested - buyer beware ! - OS KILLERS may still be
+--- 1,7 ----
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v 3.9 1994/01/25 19:05:26 kardel Exp
+ *
+! * parsesolaris.c,v 3.9 1994/01/25 19:05:26 kardel Exp
+ *
+ * STREAMS module for reference clocks
+ * (SunOS5.x - not fully tested - buyer beware ! - OS KILLERS may still be
+***************
+*** 19,25 ****
+ */
+
+ #ifndef lint
+! static char rcsid[] = "parsesolaris.c,v 3.8 1994/01/23 17:22:04 kardel Exp";
+ #endif
+
+ /*
+--- 19,25 ----
+ */
+
+ #ifndef lint
+! static char rcsid[] = "parsesolaris.c,v 3.9 1994/01/25 19:05:26 kardel Exp";
+ #endif
+
+ /*
+***************
+*** 139,145 ****
+ /*ARGSUSED*/
+ int _init(void)
+ {
+! static char revision[] = "3.8";
+ char *s, *S, *t;
+
+ /*
+--- 139,145 ----
+ /*ARGSUSED*/
+ int _init(void)
+ {
+! static char revision[] = "3.9";
+ char *s, *S, *t;
+
+ /*
+***************
+*** 1179,1184 ****
+--- 1179,1187 ----
+ * History:
+ *
+ * parsesolaris.c,v
++ * Revision 3.9 1994/01/25 19:05:26 kardel
++ * 94/01/23 reconcilation
++ *
+ * Revision 3.8 1994/01/23 17:22:04 kardel
+ * 1994 reconcilation
+ *
+diff -c parse/parsestreams.c:1.1.1.6 parse/parsestreams.c:3.12
+*** parse/parsestreams.c:1.1.1.6 Wed Jan 26 21:51:28 1994
+--- parse/parsestreams.c Wed Jan 26 21:51:28 1994
+***************
+*** 1,7 ****
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.11 1994/01/23 17:22:07 kardel Exp
+ *
+! * parsestreams.c,v 3.11 1994/01/23 17:22:07 kardel Exp
+ *
+ * STREAMS module for reference clocks
+ * (SunOS4.x)
+--- 1,7 ----
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.12 1994/01/25 19:05:30 kardel Exp
+ *
+! * parsestreams.c,v 3.12 1994/01/25 19:05:30 kardel Exp
+ *
+ * STREAMS module for reference clocks
+ * (SunOS4.x)
+***************
+*** 16,22 ****
+ */
+
+ #ifndef lint
+! static char rcsid[] = "parsestreams.c,v 3.11 1994/01/23 17:22:07 kardel Exp";
+ #endif
+
+ #include "sys/types.h"
+--- 16,22 ----
+ */
+
+ #ifndef lint
+! static char rcsid[] = "parsestreams.c,v 3.12 1994/01/25 19:05:30 kardel Exp";
+ #endif
+
+ #include "sys/types.h"
+***************
+*** 195,201 ****
+ }
+ else
+ {
+! static char revision[] = "3.11";
+ char *s, *S, *t;
+
+ strncpy(ifm->f_name, mname, FMNAMESZ);
+--- 195,201 ----
+ }
+ else
+ {
+! static char revision[] = "3.12";
+ char *s, *S, *t;
+
+ strncpy(ifm->f_name, mname, FMNAMESZ);
+***************
+*** 1258,1263 ****
+--- 1258,1266 ----
+ * History:
+ *
+ * parsestreams.c,v
++ * Revision 3.12 1994/01/25 19:05:30 kardel
++ * 94/01/23 reconcilation
++ *
+ * Revision 3.11 1994/01/23 17:22:07 kardel
+ * 1994 reconcilation
+ *
+diff -c parse/util/Makefile.tmpl:1.1.1.2 parse/util/Makefile.tmpl:3.12
+*** parse/util/Makefile.tmpl:1.1.1.2 Wed Jan 26 21:51:31 1994
+--- parse/util/Makefile.tmpl Wed Jan 26 21:51:31 1994
+***************
+*** 1,5 ****
+ #
+! # /src/NTP/REPOSITORY/v3/parse/util/Makefile.tmpl,v 3.11 1993/11/17 13:34:12 kardel Exp
+ #
+ COMPILER= cc
+ DEFS=
+--- 1,5 ----
+ #
+! # /src/NTP/REPOSITORY/v3/parse/util/Makefile.tmpl,v 3.12 1994/01/25 19:05:39 kardel Exp
+ #
+ COMPILER= cc
+ DEFS=
+diff -c parse/util/dcfd.c:1.1.1.4 parse/util/dcfd.c:3.15
+*** parse/util/dcfd.c:1.1.1.4 Wed Jan 26 21:51:33 1994
+--- parse/util/dcfd.c Wed Jan 26 21:51:33 1994
+***************
+*** 1,7 ****
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/util/dcfd.c,v 3.13 1994/01/23 17:22:15 kardel Exp
+ *
+! * dcfd.c,v 3.13 1994/01/23 17:22:15 kardel Exp
+ *
+ * DCF77 100/200ms pulse synchronisation daemon program (via 50Baud serial line)
+ *
+--- 1,7 ----
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/util/dcfd.c,v 3.15 1994/01/25 19:05:42 kardel Exp
+ *
+! * dcfd.c,v 3.15 1994/01/25 19:05:42 kardel Exp
+ *
+ * DCF77 100/200ms pulse synchronisation daemon program (via 50Baud serial line)
+ *
+***************
+*** 733,740 ****
+ * assume that we convert timecode within the unix/UTC epoch -
+ * prolonges validity of 2 digit years
+ */
+! if (clock->year < 1900)
+! clock->year += 100; /* XXX this will do it till <2092 */
+
+ /*
+ * must have been a really negative year code - drop it
+--- 733,740 ----
+ * assume that we convert timecode within the unix/UTC epoch -
+ * prolonges validity of 2 digit years
+ */
+! if (clock->year < 1994)
+! clock->year += 100; /* XXX this will do it till <2094 */
+
+ /*
+ * must have been a really negative year code - drop it
+diff -c parse/util/testdcf.c:1.1.1.5 parse/util/testdcf.c:3.9
+*** parse/util/testdcf.c:1.1.1.5 Wed Jan 26 21:51:35 1994
+--- parse/util/testdcf.c Wed Jan 26 21:51:35 1994
+***************
+*** 1,7 ****
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/util/testdcf.c,v 3.8 1994/01/23 17:22:20 kardel Exp
+ *
+! * testdcf.c,v 3.8 1994/01/23 17:22:20 kardel Exp
+ *
+ * simple DCF77 100/200ms pulse test program (via 50Baud serial line)
+ *
+--- 1,7 ----
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/util/testdcf.c,v 3.9 1994/01/25 19:05:45 kardel Exp
+ *
+! * testdcf.c,v 3.9 1994/01/25 19:05:45 kardel Exp
+ *
+ * simple DCF77 100/200ms pulse test program (via 50Baud serial line)
+ *
+diff -c scripts/Guess.sh:1.1.1.6 scripts/Guess.sh:1.11
+*** scripts/Guess.sh:1.1.1.6 Wed Jan 26 21:52:11 1994
+--- scripts/Guess.sh Wed Jan 26 21:52:12 1994
+***************
+*** 19,25 ****
+ sinix-m)
+ guess=sinix-m
+ ;;
+! sunos) case "$3" in
+ 4.1*) guess="sunos4" ;;
+ 5.1) guess="sunos5.1" ;;
+ 5.*) guess="sunos5.2" ;;
+--- 19,26 ----
+ sinix-m)
+ guess=sinix-m
+ ;;
+! sunos|solaris)
+! case "$3" in
+ 4.1*) guess="sunos4" ;;
+ 5.1) guess="sunos5.1" ;;
+ 5.*) guess="sunos5.2" ;;
+***************
+*** 59,65 ****
+ guess="netbsd"
+ ;;
+ # now the fun starts - there are vendors that
+! # do not really identify their OS un uname.
+ # Fine - now I look at our version and hope
+ # that nobody else had this marvellous idea.
+ # I am not willing to mention the vendor explicitly
+--- 60,66 ----
+ guess="netbsd"
+ ;;
+ # now the fun starts - there are vendors that
+! # do not really identify their OS in uname.
+ # Fine - now I look at our version and hope
+ # that nobody else had this marvellous idea.
+ # I am not willing to mention the vendor explicitly
+diff -c xntpd/ntp_config.c:1.1.1.18 xntpd/ntp_config.c:3.21
+*** xntpd/ntp_config.c:1.1.1.18 Wed Jan 26 21:52:59 1994
+--- xntpd/ntp_config.c Wed Jan 26 21:53:00 1994
+***************
+*** 93,98 ****
+--- 93,99 ----
+ #define CONFIG_PPS 24
+ #define CONFIG_PIDFILE 25
+ #define CONFIG_LOGFILE 26
++ #define CONFIG_SETVAR 27
+
+ #define CONF_MOD_VERSION 1
+ #define CONF_MOD_KEY 2
+***************
+*** 177,182 ****
+--- 178,184 ----
+ { "statistics", CONFIG_STATISTICS },
+ { "pidfile", CONFIG_PIDFILE },
+ { "logfile", CONFIG_LOGFILE },
++ { "setvar", CONFIG_SETVAR },
+ { "", CONFIG_UNKNOWN }
+ };
+
+***************
+*** 316,322 ****
+ #endif
+ extern char *FindConfig();
+ char *progname;
+! static char *xntp_options = "abc:de:f:k:l:p:r:s:t:";
+
+ static int gettokens P((FILE *, char *, char **, int *));
+ static int matchkey P((char *, struct keyword *));
+--- 318,324 ----
+ #endif
+ extern char *FindConfig();
+ char *progname;
+! static char *xntp_options = "abc:de:f:k:l:p:r:s:t:v:V:";
+
+ static int gettokens P((FILE *, char *, char **, int *));
+ static int matchkey P((char *, struct keyword *));
+***************
+*** 374,381 ****
+ }
+
+ if (errflg || optind != argc) {
+! (void) fprintf(stderr,
+! "usage: %s [ -bd ] [ -c config_file ]\n", progname);
+ exit(2);
+ }
+ optind = 0; /* reset optind to restart getopt_l */
+--- 376,385 ----
+ }
+
+ if (errflg || optind != argc) {
+! (void) fprintf(stderr, "usage: %s [ -abd ] [ -c config_file ] [ -e encryption delay ]\n", progname);
+! (void) fprintf(stderr, "\t\t[ -f frequency file ] [ -k key file ] [ -l log file ]\n");
+! (void) fprintf(stderr, "\t\t[ -p pid file ] [ -r broadcast delay ] [ -s status directory ]\n");
+! (void) fprintf(stderr, "\t\t[ -t trusted key ] [ -v sys variable ] [ -V default sys variable ]\n");
+ exit(2);
+ }
+ optind = 0; /* reset optind to restart getopt_l */
+***************
+*** 428,433 ****
+--- 432,438 ----
+ char keyfile[MAXFILENAME];
+ extern int optind;
+ extern char *optarg;
++ extern char *Version;
+ extern U_LONG info_auth_keyid;
+ FILEGEN *filegen;
+
+***************
+*** 443,448 ****
+--- 448,459 ----
+ res_fp = NULL;
+ have_resolver = have_keyfile = 0;
+
++ /*
++ * install a non default variable with this daemon version
++ */
++ (void) sprintf(line, "daemon_version=\"%s\"", Version);
++ set_sys_var(line, strlen(line)+1, RO);
++
+ #ifdef RESOLVE_INTERNAL
+ resolve_internal = 1;
+ #endif
+***************
+*** 546,551 ****
+--- 557,566 ----
+ } while (0);
+ break;
+
++ case 'v':
++ case 'V':
++ set_sys_var(optarg, strlen(optarg)+1, RW | ((c == 'V') ? DEF : 0));
++ break;
+
+ default:
+ errflg++;
+***************
+*** 1386,1392 ****
+ (u_char)peerkey, (u_char)peerflags);
+ }
+ break;
+!
+ }
+ }
+ (void) fclose(fp);
+--- 1401,1419 ----
+ (u_char)peerkey, (u_char)peerflags);
+ }
+ break;
+!
+! case CONFIG_SETVAR:
+! if (ntokens < 2)
+! {
+! syslog(LOG_ERR,
+! "no value for setvar command - line ignored");
+! }
+! else
+! {
+! set_sys_var(tokens[1], strlen(tokens[1])+1, RW |
+! ((((ntokens > 2) && !strcmp(tokens[2], "default"))) ? DEF : 0));
+! }
+! break;
+ }
+ }
+ (void) fclose(fp);
+***************
+*** 1445,1450 ****
+--- 1472,1478 ----
+ register char *cp;
+ register int eol;
+ register int ntok;
++ register int quoted = 0;
+
+ /*
+ * Find start of first token
+***************
+*** 1469,1476 ****
+ ntok = 0;
+ while (!eol) {
+ tokenlist[ntok++] = cp;
+! while (!ISEOL(*cp) && !ISSPACE(*cp))
+! cp++;
+ if (ISEOL(*cp)) {
+ *cp = '\0';
+ eol = 1;
+--- 1497,1505 ----
+ ntok = 0;
+ while (!eol) {
+ tokenlist[ntok++] = cp;
+! while (!ISEOL(*cp) && (!ISSPACE(*cp) || quoted))
+! quoted ^= (*cp++ == '"');
+!
+ if (ISEOL(*cp)) {
+ *cp = '\0';
+ eol = 1;
+diff -c xntpd/ntp_control.c:1.1.1.15 xntpd/ntp_control.c:3.21
+*** xntpd/ntp_control.c:1.1.1.15 Wed Jan 26 21:53:01 1994
+--- xntpd/ntp_control.c Wed Jan 26 21:53:02 1994
+***************
+*** 1,4 ****
+! /* ntp_control.c,v 3.1 1993/07/06 01:11:13 jbj Exp
+ * ntp_control.c - respond to control messages and send async traps
+ */
+ #include <stdio.h>
+--- 1,4 ----
+! /*
+ * ntp_control.c - respond to control messages and send async traps
+ */
+ #include <stdio.h>
+***************
+*** 61,66 ****
+--- 61,67 ----
+ static void ctl_putclock P((int, struct refclockstat *, int));
+ #endif /* REFCLOCK */
+ static struct ctl_var *ctl_getitem P((struct ctl_var *, char **));
++ static unsigned long count_var P((struct ctl_var *));
+ static void control_unspec P((struct recvbuf *, int));
+ static void read_status P((struct recvbuf *, int));
+ static void read_variables P((struct recvbuf *, int));
+***************
+*** 83,113 ****
+ { NO_REQUEST, 0 }
+ };
+
+-
+- /*
+- * Structure for translation tables between internal system
+- * variable indices and text format.
+- */
+- struct ctl_var {
+- u_short code;
+- u_short flags;
+- char *text;
+- };
+-
+ /*
+- * Flag values
+- */
+- #define CAN_READ 0x1
+- #define CAN_WRITE 0x2
+- #define PADDING 0x80
+- #define EOV 0x40
+-
+- #define RO (CAN_READ)
+- #define WO (CAN_WRITE)
+- #define RW (CAN_READ|CAN_WRITE)
+-
+-
+- /*
+ * System variable values. The array can be indexed by
+ * the variable index to find the textual name.
+ */
+--- 84,90 ----
+***************
+*** 132,141 ****
+ { CS_SYSTEM, RO, "system" }, /* 17 */
+ { CS_KEYID, RO, "keyid" }, /* 18 */
+ { CS_REFSKEW, RO, "refskew" }, /* 19 */
+! { CS_VERSION, RO, "daemon_version" }, /* 20 */
+ { 0, EOV, "" }
+ };
+
+ /*
+ * System variables we print by default (in fuzzball order, more-or-less)
+ */
+--- 109,120 ----
+ { CS_SYSTEM, RO, "system" }, /* 17 */
+ { CS_KEYID, RO, "keyid" }, /* 18 */
+ { CS_REFSKEW, RO, "refskew" }, /* 19 */
+! { CS_VARLIST, RO, "sys_var_list" },/* 20 */
+ { 0, EOV, "" }
+ };
+
++ static struct ctl_var *ext_sys_var = (struct ctl_var *)0;
++
+ /*
+ * System variables we print by default (in fuzzball order, more-or-less)
+ */
+***************
+*** 153,159 ****
+ CS_OFFSET,
+ CS_DRIFT,
+ CS_COMPLIANCE,
+- CS_VERSION,
+ 0
+ };
+
+--- 132,137 ----
+***************
+*** 197,202 ****
+--- 175,181 ----
+ { CP_SENT, RO, "sent" }, /* 32 */
+ { CP_FILTERROR, RO, "filterror" }, /* 33 */
+ { CP_FLASH, RO, "flash" }, /* 34 */
++ { CP_VARLIST, RO, "peer_var_list" }, /* 35 */
+ { 0, EOV, "" }
+ };
+
+***************
+*** 255,260 ****
+--- 234,240 ----
+ { CC_FUDGEVAL2, RO, "fudgeval2" }, /* 10 */
+ { CC_FLAGS, RO, "flags" }, /* 11 */
+ { CC_DEVICE, RO, "device" }, /* 12 */
++ { CC_VARLIST, RO, "clock_var_list" },/* 13 */
+ { 0, EOV, "" }
+ };
+
+***************
+*** 283,290 ****
+--- 263,277 ----
+ /*
+ * System and processor definitions. These will change for the gizmo board.
+ */
++ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX"
++ #endif
++ #ifndef STR_PROCESSOR
+ #define STR_PROCESSOR "unknown"
++ #endif
++
++ static char str_system[] = STR_SYSTEM;
++ static char str_processor[] = STR_PROCESSOR;
+
+ /*
+ * Trap structures. We only allow a few of these, and send
+***************
+*** 1221,1227 ****
+ ctl_putsys(varid)
+ int varid;
+ {
+- extern char *Version;
+ l_fp tmp;
+
+ switch (varid) {
+--- 1208,1213 ----
+***************
+*** 1280,1291 ****
+ ctl_putuint(sys_var[CS_LEAPWARNING].text, (U_LONG)leap_warning);
+ break;
+ case CS_PROCESSOR:
+! ctl_putstr(sys_var[CS_PROCESSOR].text, STR_PROCESSOR,
+! sizeof(STR_PROCESSOR) - 1);
+ break;
+ case CS_SYSTEM:
+! ctl_putstr(sys_var[CS_SYSTEM].text, STR_SYSTEM,
+! sizeof(STR_SYSTEM) - 1);
+ break;
+ case CS_KEYID:
+ ctl_putuint(sys_var[CS_KEYID].text, (U_LONG)0);
+--- 1266,1277 ----
+ ctl_putuint(sys_var[CS_LEAPWARNING].text, (U_LONG)leap_warning);
+ break;
+ case CS_PROCESSOR:
+! ctl_putstr(sys_var[CS_PROCESSOR].text, str_processor,
+! sizeof(str_processor) - 1);
+ break;
+ case CS_SYSTEM:
+! ctl_putstr(sys_var[CS_SYSTEM].text, str_system,
+! sizeof(str_system) - 1);
+ break;
+ case CS_KEYID:
+ ctl_putuint(sys_var[CS_KEYID].text, (U_LONG)0);
+***************
+*** 1293,1301 ****
+ case CS_REFSKEW:
+ ctl_putlfp(sys_var[CS_REFSKEW].text, &sys_refskew);
+ break;
+! case CS_VERSION:
+! ctl_putstr(sys_var[CS_VERSION].text, Version,
+! strlen(Version));
+ break;
+ }
+ }
+--- 1279,1338 ----
+ case CS_REFSKEW:
+ ctl_putlfp(sys_var[CS_REFSKEW].text, &sys_refskew);
+ break;
+! case CS_VARLIST:
+! {
+! char buf[CTL_MAX_DATA_LEN];
+! register char *s, *ss, *t, *be;
+! register int i;
+! register struct ctl_var *k;
+!
+! s = buf;
+! be = buf + sizeof(buf) - strlen(sys_var[CS_VARLIST].text) - 4;
+! if (s > be)
+! break; /* really long var name 8-( - Killer */
+!
+! strcpy(s, sys_var[CS_VARLIST].text);
+! strcat(s, "=\"");
+! s += strlen(s);
+! t = s;
+!
+! for (k = sys_var; !(k->flags &EOV); k++)
+! {
+! i = strlen(k->text);
+! if (s+i+1 >= be)
+! break;
+! if (s != t)
+! *s++ = ',';
+! strcpy(s, k->text);
+! s += i;
+! }
+!
+! for (k = ext_sys_var; k && !(k->flags &EOV); k++)
+! {
+! ss = k->text;
+! if (!ss)
+! continue;
+!
+! while (*ss && *ss != '=')
+! ss++;
+!
+! i = ss - k->text;
+! if (s+i+1 >= be)
+! break;
+! if (s != t)
+! *s++ = ',';
+! strncpy(s, k->text, i);
+! s += i;
+! }
+!
+! if (s+2 >= be)
+! break;
+!
+! *s++ = '"';
+! *s = '\0';
+!
+! ctl_putdata(buf, s - buf, 0);
+! }
+ break;
+ }
+ }
+***************
+*** 1428,1433 ****
+--- 1465,1507 ----
+ case CP_SENT:
+ ctl_putuint(peer_var[CP_SENT].text, peer->sent);
+ break;
++ case CP_VARLIST:
++ {
++ char buf[CTL_MAX_DATA_LEN];
++ register char *s, *t, *be;
++ register int i;
++ register struct ctl_var *k;
++
++ s = buf;
++ be = buf + sizeof(buf) - strlen(peer_var[CP_VARLIST].text) - 4;
++ if (s > be)
++ break; /* really long var name 8-( - Killer */
++
++ strcpy(s, peer_var[CP_VARLIST].text);
++ strcat(s, "=\"");
++ s += strlen(s);
++ t = s;
++
++ for (k = peer_var; !(k->flags &EOV); k++)
++ {
++ i = strlen(k->text);
++ if (s+i+1 >= be)
++ break;
++ if (s != t)
++ *s++ = ',';
++ strcpy(s, k->text);
++ s += i;
++ }
++
++ if (s+2 >= be)
++ break;
++
++ *s++ = '"';
++ *s = '\0';
++
++ ctl_putdata(buf, s - buf, 0);
++ }
++ break;
+ }
+ }
+
+***************
+*** 1501,1506 ****
+--- 1575,1636 ----
+ strlen(clock->clockdesc));
+ }
+ break;
++ case CC_VARLIST:
++ {
++ char buf[CTL_MAX_DATA_LEN];
++ register char *s, *ss, *t, *be;
++ register int i;
++ register struct ctl_var *k;
++
++ s = buf;
++ be = buf + sizeof(buf) - strlen(clock_var[CC_VARLIST].text) - 4;
++ if (s > be)
++ break; /* really long var name 8-( - Killer */
++
++ strcpy(s, clock_var[CC_VARLIST].text);
++ strcat(s, "=\"");
++ s += strlen(s);
++ t = s;
++
++ for (k = clock_var; !(k->flags &EOV); k++)
++ {
++ i = strlen(k->text);
++ if (s+i+1 >= be)
++ break;
++ if (s != t)
++ *s++ = ',';
++ strcpy(s, k->text);
++ s += i;
++ }
++
++ for (k = clock->kv_list; k && !(k->flags &EOV); k++)
++ {
++ ss = k->text;
++ if (!ss)
++ continue;
++
++ while (*ss && *ss != '=')
++ ss++;
++
++ i = ss - k->text;
++ if (s+i+1 >= be)
++ break;
++ if (s != t)
++ *s++ = ',';
++ strncpy(s, k->text, i);
++ s += i;
++ *s = '\0';
++ }
++
++ if (s+2 >= be)
++ break;
++
++ *s++ = '"';
++ *s = '\0';
++
++ ctl_putdata(buf, s - buf, 0);
++ }
++ break;
+ }
+ }
+ #endif
+***************
+*** 1517,1522 ****
+--- 1647,1653 ----
+ {
+ register struct ctl_var *v;
+ register char *cp, *tp;
++ static struct ctl_var eol = { 0, EOV, };
+ static char buf[128];
+
+ /*
+***************
+*** 1528,1533 ****
+--- 1659,1667 ----
+
+ if (reqpt >= reqend)
+ return 0;
++
++ if (var_list == (struct ctl_var *)0)
++ return &eol;
+
+ /*
+ * Look for a first character match on the tag. If we find
+***************
+*** 1538,1548 ****
+ while (!(v->flags & EOV)) {
+ if (!(v->flags & PADDING) && *cp == *(v->text)) {
+ tp = v->text;
+! while (*tp != '\0' && cp < reqend && *cp == *tp) {
+ cp++;
+ tp++;
+ }
+! if (*tp == '\0') {
+ while (cp < reqend && isspace(*cp))
+ cp++;
+ if (cp == reqend || *cp == ',') {
+--- 1672,1682 ----
+ while (!(v->flags & EOV)) {
+ if (!(v->flags & PADDING) && *cp == *(v->text)) {
+ tp = v->text;
+! while (*tp != '\0' && *tp != '=' && cp < reqend && *cp == *tp) {
+ cp++;
+ tp++;
+ }
+! if ((*tp == '\0') || (*tp == '=')) {
+ while (cp < reqend && isspace(*cp))
+ cp++;
+ if (cp == reqend || *cp == ',') {
+***************
+*** 1685,1692 ****
+ register struct ctl_var *v;
+ register int i;
+ char *valuep;
+! u_char wants[(CS_MAXCODE>CP_MAXCODE) ? (CS_MAXCODE+1) : (CP_MAXCODE+1)];
+! int gotvar;
+
+ if (res_associd == 0) {
+ /*
+--- 1819,1826 ----
+ register struct ctl_var *v;
+ register int i;
+ char *valuep;
+! u_char *wants;
+! int gotvar = (CS_MAXCODE>CP_MAXCODE) ? (CS_MAXCODE+1) : (CP_MAXCODE+1);
+
+ if (res_associd == 0) {
+ /*
+***************
+*** 1696,1707 ****
+ rpkt.status = htons(ctlsysstatus());
+ if (res_authokay)
+ ctl_sys_num_events = 0;
+! bzero((char *)wants, CS_MAXCODE+1);
+ gotvar = 0;
+ while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
+ if (v->flags & EOV) {
+! ctl_error(CERR_UNKNOWNVAR);
+! return;
+ }
+ wants[v->code] = 1;
+ gotvar = 1;
+--- 1830,1853 ----
+ rpkt.status = htons(ctlsysstatus());
+ if (res_authokay)
+ ctl_sys_num_events = 0;
+! gotvar += count_var(ext_sys_var);
+! wants = (u_char *)emalloc(gotvar);
+! bzero((char *)wants, gotvar);
+ gotvar = 0;
+ while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
+ if (v->flags & EOV) {
+! if ((v = ctl_getitem(ext_sys_var, &valuep)) != 0) {
+! if (v->flags & EOV) {
+! ctl_error(CERR_UNKNOWNVAR);
+! free((char *)wants);
+! return;
+! }
+! wants[CS_MAXCODE+1+v->code] = 1;
+! gotvar = 1;
+! continue;
+! } else {
+! break; /* shouldn't happen ! */
+! }
+ }
+ wants[v->code] = 1;
+ gotvar = 1;
+***************
+*** 1710,1721 ****
+ for (i = 1; i <= CS_MAXCODE; i++)
+ if (wants[i])
+ ctl_putsys(i);
+ } else {
+ register u_char *cs;
+
+ for (cs = def_sys_var; *cs != 0; cs++)
+! ctl_putsys((int)*cs);
+ }
+ } else {
+ register struct peer *peer;
+
+--- 1856,1876 ----
+ for (i = 1; i <= CS_MAXCODE; i++)
+ if (wants[i])
+ ctl_putsys(i);
++ for (i = 0; ext_sys_var && !(ext_sys_var[i].flags & EOV); i++)
++ if (wants[i+CS_MAXCODE+1])
++ ctl_putdata(ext_sys_var[i].text,
++ strlen(ext_sys_var[i].text), 0);
+ } else {
+ register u_char *cs;
++ register struct ctl_var *kv;
+
+ for (cs = def_sys_var; *cs != 0; cs++)
+! ctl_putsys((int)*cs);
+! for (kv = ext_sys_var; kv && !(kv->flags & EOV); kv++)
+! if (kv->flags & DEF)
+! ctl_putdata(kv->text, strlen(kv->text), 0);
+ }
++ free((char *)wants);
+ } else {
+ register struct peer *peer;
+
+***************
+*** 1732,1742 ****
+ rpkt.status = htons(ctlpeerstatus(peer));
+ if (res_authokay)
+ peer->num_events = 0;
+! bzero((char*)wants, CP_MAXCODE+1);
+ gotvar = 0;
+ while ((v = ctl_getitem(peer_var, &valuep)) != 0) {
+ if (v->flags & EOV) {
+ ctl_error(CERR_UNKNOWNVAR);
+ return;
+ }
+ wants[v->code] = 1;
+--- 1887,1899 ----
+ rpkt.status = htons(ctlpeerstatus(peer));
+ if (res_authokay)
+ peer->num_events = 0;
+! wants = (u_char *)emalloc(gotvar);
+! bzero((char*)wants, gotvar);
+ gotvar = 0;
+ while ((v = ctl_getitem(peer_var, &valuep)) != 0) {
+ if (v->flags & EOV) {
+ ctl_error(CERR_UNKNOWNVAR);
++ free((char *)wants);
+ return;
+ }
+ wants[v->code] = 1;
+***************
+*** 1752,1757 ****
+--- 1909,1915 ----
+ for (cp = def_peer_var; *cp != 0; cp++)
+ ctl_putpeer((int)*cp, peer);
+ }
++ free((char *)wants);
+ }
+ ctl_flushpkt(0);
+ }
+***************
+*** 1768,1773 ****
+--- 1926,1932 ----
+ int restrict;
+ {
+ register struct ctl_var *v;
++ register int ext_var;
+ char *valuep;
+ LONG val;
+ u_char leapind, leapwarn;
+***************
+*** 1795,1831 ****
+ * Look through the variables. Dump out at the first sign of trouble.
+ */
+ while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
+ if (v->flags & EOV) {
+! ctl_error(CERR_UNKNOWNVAR);
+! return;
+ }
+ if (!(v->flags & CAN_WRITE)) {
+ ctl_error(CERR_PERMISSION);
+ return;
+ }
+! if (*valuep == '\0' || !atoint(valuep, &val)) {
+ ctl_error(CERR_BADFMT);
+ return;
+ }
+! if ((val & ~LEAP_NOTINSYNC) != 0) {
+ ctl_error(CERR_BADVALUE);
+ return;
+ }
+
+! /*
+! * This one seems sane. Save it.
+! */
+! switch(v->code) {
+! case CS_LEAP:
+! case CS_LEAPIND:
+! leapind = (u_char)val;
+! break;
+! case CS_LEAPWARNING:
+! leapwarn = (u_char)val;
+! break;
+! default:
+! ctl_error(CERR_UNSPEC); /* our fault, really */
+! return;
+ }
+ }
+
+--- 1954,2013 ----
+ * Look through the variables. Dump out at the first sign of trouble.
+ */
+ while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
++ ext_var = 0;
+ if (v->flags & EOV) {
+! if ((v = ctl_getitem(ext_sys_var, &valuep)) != 0) {
+! if (v->flags & EOV) {
+! ctl_error(CERR_UNKNOWNVAR);
+! return;
+! }
+! ext_var = 1;
+! } else {
+! break;
+! }
+ }
+ if (!(v->flags & CAN_WRITE)) {
+ ctl_error(CERR_PERMISSION);
+ return;
+ }
+! if (!ext_var && (*valuep == '\0' || !atoint(valuep, &val))) {
+ ctl_error(CERR_BADFMT);
+ return;
+ }
+! if (!ext_var && (val & ~LEAP_NOTINSYNC) != 0) {
+ ctl_error(CERR_BADVALUE);
+ return;
+ }
+
+! if (ext_var) {
+! char *s = emalloc(strlen(v->text)+strlen(valuep)+2);
+! char *t, *tt = s;
+!
+! t = v->text;
+! while (*t && *t != '=')
+! *tt++ = *t++;
+!
+! *tt++ = '=';
+! strcat(tt, valuep);
+!
+! set_sys_var(s, strlen(s)+1, v->flags);
+! free(s);
+! } else {
+! /*
+! * This one seems sane. Save it.
+! */
+! switch(v->code) {
+! case CS_LEAP:
+! case CS_LEAPIND:
+! leapind = (u_char)val;
+! break;
+! case CS_LEAPWARNING:
+! leapwarn = (u_char)val;
+! break;
+! default:
+! ctl_error(CERR_UNSPEC); /* our fault, really */
+! return;
+! }
+ }
+ }
+
+***************
+*** 1861,1867 ****
+ register int i;
+ register struct peer *peer;
+ char *valuep;
+! u_char wants[CC_MAXCODE+1];
+ int gotvar;
+ struct refclockstat clock;
+
+--- 2043,2049 ----
+ register int i;
+ register struct peer *peer;
+ char *valuep;
+! u_char *wants;
+ int gotvar;
+ struct refclockstat clock;
+
+***************
+*** 1898,1915 ****
+ /*
+ * If we got here we have a peer which is a clock. Get his status.
+ */
+ refclock_control(&peer->srcadr, (struct refclockstat *)0, &clock);
+
+ /*
+ * Look for variables in the packet.
+ */
+ rpkt.status = htons(ctlclkstatus(&clock));
+ gotvar = 0;
+! bzero((char*)wants, CC_MAXCODE+1);
+! while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
+ if (v->flags & EOV) {
+! ctl_error(CERR_UNKNOWNVAR);
+! return;
+ }
+ wants[v->code] = 1;
+ gotvar = 1;
+--- 2080,2112 ----
+ /*
+ * If we got here we have a peer which is a clock. Get his status.
+ */
++ clock.kv_list = (struct ctl_var *)0;
++
+ refclock_control(&peer->srcadr, (struct refclockstat *)0, &clock);
+
+ /*
+ * Look for variables in the packet.
+ */
+ rpkt.status = htons(ctlclkstatus(&clock));
++ gotvar = CC_MAXCODE+1+count_var(clock.kv_list);
++ wants = (u_char *)emalloc(gotvar);
++ bzero((char*)wants, gotvar);
+ gotvar = 0;
+! while ((v = ctl_getitem(clock_var, &valuep)) != 0) {
+ if (v->flags & EOV) {
+! if ((v = ctl_getitem(clock.kv_list, &valuep)) != 0) {
+! if (v->flags & EOV) {
+! ctl_error(CERR_UNKNOWNVAR);
+! free((char*)wants);
+! free_varlist(clock.kv_list);
+! return;
+! }
+! wants[CC_MAXCODE+1+v->code] = 1;
+! gotvar = 1;
+! continue;
+! } else {
+! break; /* shouldn't happen ! */
+! }
+ }
+ wants[v->code] = 1;
+ gotvar = 1;
+***************
+*** 1919,1930 ****
+--- 2116,2139 ----
+ for (i = 1; i <= CC_MAXCODE; i++)
+ if (wants[i])
+ ctl_putclock(i, &clock, 1);
++ for (i = 0; !(clock.kv_list[i].flags & EOV); i++)
++ if (wants[i+CC_MAXCODE+1])
++ ctl_putdata(clock.kv_list[i].text,
++ strlen(clock.kv_list[i].text), 0);
+ } else {
+ register u_char *cc;
++ register struct ctl_var *kv;
+
+ for (cc = def_clock_var; *cc != 0; cc++)
+ ctl_putclock((int)*cc, &clock, 0);
++ for (kv = clock.kv_list; kv && !(kv->flags & EOV); kv++)
++ if (kv->flags & DEF)
++ ctl_putdata(kv->text, strlen(kv->text), 0);
+ }
++
++ free((char*)wants);
++ free_varlist(clock.kv_list);
++
+ ctl_flushpkt(0);
+ #endif
+ }
+***************
+*** 2237,2249 ****
+ */
+ if (err == EVNT_CLOCKEXCPT) {
+ struct refclockstat clock;
+! refclock_control(&peer->srcadr,
+ (struct refclockstat *)0,
+ &clock);
+ ctl_puthex("refclockstatus",
+ (U_LONG)ctlclkstatus(&clock));
+ for (i = 1; i <= CC_MAXCODE; i++)
+ ctl_putclock(i, &clock, 0);
+ }
+ #endif /*REFCLOCK*/
+ } else {
+--- 2446,2468 ----
+ */
+ if (err == EVNT_CLOCKEXCPT) {
+ struct refclockstat clock;
+! struct ctl_var *kv;
+!
+! clock.kv_list = (struct ctl_var *)0;
+!
+! refclock_control(&peer->srcadr,
+ (struct refclockstat *)0,
+ &clock);
+ ctl_puthex("refclockstatus",
+ (U_LONG)ctlclkstatus(&clock));
++
+ for (i = 1; i <= CC_MAXCODE; i++)
+ ctl_putclock(i, &clock, 0);
++ for (kv = clock.kv_list; kv && !(kv->flags & EOV); kv++)
++ if (kv->flags & DEF)
++ ctl_putdata(kv->text, strlen(kv->text), 0);
++
++ free_varlist(clock.kv_list);
+ }
+ #endif /*REFCLOCK*/
+ } else {
+***************
+*** 2262,2274 ****
+--- 2481,2504 ----
+ */
+ if (err == EVNT_PEERCLOCK) {
+ struct refclockstat clock;
++ struct ctl_var *kv;
++
++ clock.kv_list = (struct ctl_var *)0;
++
+ refclock_control(&peer->srcadr,
+ (struct refclockstat *)0,
+ &clock);
++
+ ctl_puthex("refclockstatus",
+ (U_LONG)ctlclkstatus(&clock));
++
+ for (i = 1; i <= CC_MAXCODE; i++)
+ ctl_putclock(i, &clock, 0);
++ for (kv = clock.kv_list; kv && !(kv->flags & EOV); kv++)
++ if (kv->flags & DEF)
++ ctl_putdata(kv->text, strlen(kv->text), 0);
++
++ free_varlist(clock.kv_list);
+ }
+ #endif /*REFCLOCK*/
+ }
+***************
+*** 2303,2305 ****
+--- 2533,2647 ----
+ numctlbadop = 0;
+ numasyncmsgs = 0;
+ }
++
++ static unsigned long
++ count_var(k)
++ struct ctl_var *k;
++ {
++ register unsigned long c;
++
++ c = 0;
++ while (k && !(k++->flags & EOV))
++ c++;
++
++ return c;
++ }
++
++ char *
++ add_var(kv, size, def)
++ struct ctl_var **kv;
++ unsigned long size;
++ int def;
++ {
++ register unsigned long c;
++ register struct ctl_var *k;
++
++ c = count_var(*kv);
++
++ k = *kv;
++ *kv = (struct ctl_var *)emalloc((c+2)*sizeof(struct ctl_var));
++ if (k)
++ {
++ bcopy((char *)k, (char *)*kv, sizeof(struct ctl_var)*c);
++ free((char *)k);
++ }
++
++ (*kv)[c].code = c;
++ (*kv)[c].text = (char *)emalloc(size);
++ (*kv)[c].flags = def;
++ (*kv)[c+1].code = 0;
++ (*kv)[c+1].text = (char *)0;
++ (*kv)[c+1].flags = EOV;
++ return (*kv)[c].text;
++ }
++
++ void
++ set_var(kv, data, size, def)
++ struct ctl_var **kv;
++ char *data;
++ unsigned long size;
++ int def;
++ {
++ register struct ctl_var *k;
++ register char *s, *t;
++
++ if (!data || !size)
++ return;
++
++ if ((k = *kv))
++ {
++ while (!(k->flags & EOV))
++ {
++ s = data;
++ t = k->text;
++ if (t)
++ {
++ while (*t != '=' && *s - *t == 0)
++ {
++ s++;
++ t++;
++ }
++ if (*s == *t && ((*t == '=') || !*t))
++ {
++ free(k->text);
++ k->text = (char *)emalloc(size);
++ bcopy(data, k->text, size);
++ k->flags = def;
++ return;
++ }
++ }
++ else
++ {
++ k->text = (char *)emalloc(size);
++ bcopy(data, k->text, size);
++ k->flags = def;
++ return;
++ }
++ k++;
++ }
++ }
++ t = add_var(kv, size, def);
++ bcopy(data, t, size);
++ }
++
++ void
++ set_sys_var(data, size, def)
++ char *data;
++ unsigned long size;
++ int def;
++ {
++ set_var(&ext_sys_var, data, size, def);
++ }
++
++ void
++ free_varlist(kv)
++ struct ctl_var *kv;
++ {
++ struct ctl_var *k;
++ if (kv)
++ {
++ for (k = kv; !(k->flags & EOV); k++)
++ free(k->text);
++ free((char *)kv);
++ }
++ }
+diff -c xntpd/ntp_filegen.c:1.1.1.5 xntpd/ntp_filegen.c:3.12
+*** xntpd/ntp_filegen.c:1.1.1.5 Wed Jan 26 21:53:04 1994
+--- xntpd/ntp_filegen.c Wed Jan 26 21:53:04 1994
+***************
+*** 1,5 ****
+ /*
+! * ntp_filegen.c,v 3.10 1993/12/03 03:55:35 pruy Exp
+ *
+ * implements file generations support for NTP
+ * logfiles and statistic files
+--- 1,5 ----
+ /*
+! * ntp_filegen.c,v 3.12 1994/01/25 19:06:11 kardel Exp
+ *
+ * implements file generations support for NTP
+ * logfiles and statistic files
+diff -c xntpd/ntp_request.c:1.1.1.13 xntpd/ntp_request.c:3.13
+*** xntpd/ntp_request.c:1.1.1.13 Wed Jan 26 21:53:18 1994
+--- xntpd/ntp_request.c Wed Jan 26 21:53:18 1994
+***************
+*** 2111,2116 ****
+--- 2111,2119 ----
+ req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA);
+ return;
+ }
++
++ clock.kv_list = (struct ctl_var *)0;
++
+ refclock_control(&addr, (struct refclockstat *)0, &clock);
+
+ ic->clockadr = addr.sin_addr.s_addr;
+***************
+*** 2128,2133 ****
+--- 2131,2138 ----
+ ic->fudgeval1 = htonl(clock.fudgeval1);
+ ic->fudgeval2 = htonl(clock.fudgeval2);
+
++ free_varlist(clock.kv_list);
++
+ ic = (struct info_clock *)more_pkt();
+ }
+ flush_pkt();
+diff -c xntpd/refclock_parse.c:1.1.1.9 xntpd/refclock_parse.c:3.45
+*** xntpd/refclock_parse.c:1.1.1.9 Wed Jan 26 21:53:39 1994
+--- xntpd/refclock_parse.c Wed Jan 26 21:53:39 1994
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.43 1994/01/23 16:28:39 kardel Exp
+ *
+! * refclock_parse.c,v 3.43 1994/01/23 16:28:39 kardel Exp
+ *
+ * generic reference clock driver for receivers
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp
+ *
+! * refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp
+ *
+ * generic reference clock driver for receivers
+ *
+***************
+*** 129,135 ****
+ #include "parse.h"
+
+ #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
+! static char rcsid[]="refclock_parse.c,v 3.43 1994/01/23 16:28:39 kardel Exp";
+ #endif
+
+ /**===========================================================================
+--- 129,135 ----
+ #include "parse.h"
+
+ #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
+! static char rcsid[]="refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp";
+ #endif
+
+ /**===========================================================================
+***************
+*** 243,248 ****
+--- 243,249 ----
+ * clock specific configuration
+ */
+ l_fp basedelay; /* clock local phase offset */
++ l_fp ppsdelay; /* clock local pps phase offset */
+
+ /*
+ * clock state handling/reporting
+***************
+*** 295,300 ****
+--- 296,302 ----
+ #define NO_END (void (*)())0
+ #define NO_DATA (void *)0
+ #define NO_FORMAT ""
++ #define NO_PPSDELAY 0
+
+ #define DCF_ID "DCF" /* generic DCF */
+ #define DCF_A_ID "DCFa" /* AM demodulation */
+***************
+*** 497,502 ****
+--- 499,505 ----
+ void *cl_data; /* local data area for "poll" mechanism */
+ u_fp cl_rootdelay; /* rootdelay */
+ U_LONG cl_basedelay; /* current offset - unsigned l_fp fractional part */
++ U_LONG cl_ppsdelay; /* current PPS offset - unsigned l_fp fractional part */
+ char *cl_id; /* ID code (usually "DCF") */
+ char *cl_description; /* device name */
+ char *cl_format; /* fixed format */
+***************
+*** 516,521 ****
+--- 519,525 ----
+ NO_DATA,
+ DCFPZF535_ROOTDELAY,
+ DCFPZF535_BASEDELAY,
++ NO_PPSDELAY,
+ DCF_P_ID,
+ DCFPZF535_DESCRIPTION,
+ NO_FORMAT,
+***************
+*** 534,539 ****
+--- 538,544 ----
+ NO_DATA,
+ DCFPZF535OCXO_ROOTDELAY,
+ DCFPZF535OCXO_BASEDELAY,
++ NO_PPSDELAY,
+ DCF_P_ID,
+ DCFPZF535OCXO_DESCRIPTION,
+ NO_FORMAT,
+***************
+*** 552,557 ****
+--- 557,563 ----
+ NO_DATA,
+ DCFUA31_ROOTDELAY,
+ DCFUA31_BASEDELAY,
++ NO_PPSDELAY,
+ DCF_A_ID,
+ DCFUA31_DESCRIPTION,
+ NO_FORMAT,
+***************
+*** 570,575 ****
+--- 576,582 ----
+ NO_DATA,
+ DCF7000_ROOTDELAY,
+ DCF7000_BASEDELAY,
++ NO_PPSDELAY,
+ DCF_A_ID,
+ DCF7000_DESCRIPTION,
+ NO_FORMAT,
+***************
+*** 588,593 ****
+--- 595,601 ----
+ WSDCF_DATA,
+ WSDCF_ROOTDELAY,
+ WSDCF_BASEDELAY,
++ NO_PPSDELAY,
+ DCF_A_ID,
+ WSDCF_DESCRIPTION,
+ WSDCF_FORMAT,
+***************
+*** 606,611 ****
+--- 614,620 ----
+ NO_DATA,
+ RAWDCF_ROOTDELAY,
+ CONRAD_BASEDELAY,
++ NO_PPSDELAY,
+ DCF_A_ID,
+ CONRAD_DESCRIPTION,
+ RAWDCF_FORMAT,
+***************
+*** 624,629 ****
+--- 633,639 ----
+ NO_DATA,
+ RAWDCF_ROOTDELAY,
+ TIMEBRICK_BASEDELAY,
++ NO_PPSDELAY,
+ DCF_A_ID,
+ TIMEBRICK_DESCRIPTION,
+ RAWDCF_FORMAT,
+***************
+*** 642,647 ****
+--- 652,658 ----
+ GPS166_DATA,
+ GPS166_ROOTDELAY,
+ GPS166_BASEDELAY,
++ NO_PPSDELAY,
+ GPS166_ID,
+ GPS166_DESCRIPTION,
+ GPS166_FORMAT,
+***************
+*** 660,665 ****
+--- 671,677 ----
+ TRIMBLESV6_DATA,
+ TRIMBLESV6_ROOTDELAY,
+ TRIMBLESV6_BASEDELAY,
++ NO_PPSDELAY,
+ TRIMBLESV6_ID,
+ TRIMBLESV6_DESCRIPTION,
+ TRIMBLESV6_FORMAT,
+***************
+*** 2198,2203 ****
+--- 2210,2218 ----
+ parse->basedelay.l_ui = 0; /* we can only pre-configure delays less than 1 second */
+ parse->basedelay.l_uf = parse->parse_type->cl_basedelay;
+
++ parse->ppsdelay.l_ui = 0; /* we can only pre-configure delays less than 1 second */
++ parse->ppsdelay.l_uf = parse->parse_type->cl_ppsdelay;
++
+ peer->rootdelay = parse->parse_type->cl_rootdelay;
+ peer->sstclktype = parse->parse_type->cl_type;
+ peer->precision = sys_precision;
+***************
+*** 2554,2559 ****
+--- 2569,2575 ----
+ out->badformat = out->baddata = 0;
+ out->timereset = 0;
+ out->currentstatus = out->lastevent = CEVNT_NOMINAL;
++ out->kv_list = (struct ctl_var *)0;
+ }
+
+ if (unit >= MAXUNITS)
+***************
+*** 2579,2585 ****
+
+ if (in->haveflags & CLK_HAVETIME2)
+ {
+! /* not USED */
+ }
+
+ if (in->haveflags & CLK_HAVEVAL1)
+--- 2595,2601 ----
+
+ if (in->haveflags & CLK_HAVETIME2)
+ {
+! parse->ppsdelay = in->fudgetime2;
+ }
+
+ if (in->haveflags & CLK_HAVEVAL1)
+***************
+*** 2619,2637 ****
+ if (out)
+ {
+ register unsigned LONG sum = 0;
+! register char *t;
+ register struct tm *tm;
+ register short utcoff;
+ register char sign;
+ register int i;
+ time_t tim;
+
+! out->haveflags = CLK_HAVETIME1|CLK_HAVEVAL1|CLK_HAVEFLAG1|CLK_HAVEFLAG2|CLK_HAVEFLAG3;
+ out->clockdesc = parse->parse_type->cl_description;
+
+ out->fudgetime1 = parse->basedelay;
+
+! L_CLR(&out->fudgetime2);
+
+ out->fudgeval1 = (LONG)parse->peer->stratum;
+
+--- 2635,2655 ----
+ if (out)
+ {
+ register unsigned LONG sum = 0;
+! register char *t, *tt;
+ register struct tm *tm;
+ register short utcoff;
+ register char sign;
+ register int i;
+ time_t tim;
+
+! outstatus[0] = '\0';
+!
+! out->haveflags = CLK_HAVETIME1|CLK_HAVETIME2|CLK_HAVEVAL1|CLK_HAVEFLAG1|CLK_HAVEFLAG2|CLK_HAVEFLAG3;
+ out->clockdesc = parse->parse_type->cl_description;
+
+ out->fudgetime1 = parse->basedelay;
+
+! out->fudgetime2 = parse->ppsdelay;
+
+ out->fudgeval1 = (LONG)parse->peer->stratum;
+
+***************
+*** 2657,2667 ****
+ */
+ off = parse->time.parse_stime.fp;
+ L_SUB(&off, &parse->time.parse_ptime.fp); /* true offset */
+! out->fudgetime2 = off;
+! out->haveflags |= CLK_HAVETIME2;
+ }
+ }
+
+ /*
+ * all this for just finding out the +-xxxx part (there are always
+ * new and changing fields in the standards 8-().
+--- 2675,2691 ----
+ */
+ off = parse->time.parse_stime.fp;
+ L_SUB(&off, &parse->time.parse_ptime.fp); /* true offset */
+! tt = add_var(&out->kv_list, 40, RO);
+! sprintf(tt, "refclock_ppsskew=%s", lfptoms(&off, 6));
+ }
+ }
+
++ if (PARSE_PPS(parse->time.parse_state))
++ {
++ tt = add_var(&out->kv_list, 80, RO|DEF);
++ sprintf(tt, "refclock_ppstime=\"%s\"", prettydate(&parse->time.parse_ptime.fp));
++ }
++
+ /*
+ * all this for just finding out the +-xxxx part (there are always
+ * new and changing fields in the standards 8-().
+***************
+*** 2686,2702 ****
+ sign = '+';
+ }
+
+! tim = parse->time.parse_time.fp.l_ui - JAN_1970;
+! strcpy(outstatus, ctime(&tim));
+! t = strrchr(outstatus, '\n');
+! if (!t)
+ {
+! t = outstatus + strlen(outstatus);
+! }
+ else
+ {
+! sprintf(t, " %c%02d%02d", sign, utcoff / 60, utcoff % 60);
+! t += strlen(t);
+ }
+
+ if (!PARSE_GETTIMECODE(parse, &tmpctl))
+--- 2710,2729 ----
+ sign = '+';
+ }
+
+! tt = add_var(&out->kv_list, 128, RO|DEF);
+! sprintf(tt, "refclock_time=\"");
+! tt += strlen(tt);
+!
+! if (parse->time.parse_time.fp.l_ui == 0)
+ {
+! strcpy(tt, "<UNDEFINED>\"");
+! }
+ else
+ {
+! strcpy(tt, prettydate(&parse->time.parse_time.fp));
+! t = tt + strlen(tt);
+!
+! sprintf(t, " (%c%02d%02d)\"", sign, utcoff / 60, utcoff % 60);
+ }
+
+ if (!PARSE_GETTIMECODE(parse, &tmpctl))
+***************
+*** 2705,2731 ****
+ }
+ else
+ {
+ /*
+ * copy PPS flags from last read transaction (informational only)
+ */
+ tmpctl.parsegettc.parse_state |= parse->time.parse_state &
+ (PARSEB_PPS|PARSEB_S_PPS);
+
+! if (t)
+! {
+! *t = ' ';
+! (void) parsestate(tmpctl.parsegettc.parse_state, t+1);
+! }
+! else
+! {
+! strcat(outstatus, " ");
+! (void) parsestate(tmpctl.parsegettc.parse_state, outstatus + strlen(outstatus));
+! }
+! strcat(outstatus," <");
+ if (tmpctl.parsegettc.parse_count)
+! mkascii(outstatus+strlen(outstatus), sizeof(outstatus) - strlen(outstatus) - 1,
+ tmpctl.parsegettc.parse_buffer, tmpctl.parsegettc.parse_count - 1);
+! strcat(outstatus,">");
+ parse->badformat += tmpctl.parsegettc.parse_badformat;
+ }
+
+--- 2732,2755 ----
+ }
+ else
+ {
++ tt = add_var(&out->kv_list, 128, RO|DEF);
++ sprintf(tt, "refclock_status=\"");
++ tt += strlen(tt);
++
+ /*
+ * copy PPS flags from last read transaction (informational only)
+ */
+ tmpctl.parsegettc.parse_state |= parse->time.parse_state &
+ (PARSEB_PPS|PARSEB_S_PPS);
+
+! (void) parsestate(tmpctl.parsegettc.parse_state, tt);
+!
+! strcat(tt, "\"");
+!
+ if (tmpctl.parsegettc.parse_count)
+! mkascii(outstatus+strlen(outstatus), sizeof(outstatus)- strlen(outstatus) - 1,
+ tmpctl.parsegettc.parse_buffer, tmpctl.parsegettc.parse_count - 1);
+!
+ parse->badformat += tmpctl.parsegettc.parse_badformat;
+ }
+
+***************
+*** 2737,2752 ****
+ }
+ else
+ {
+! strcat(outstatus," (");
+! strncat(outstatus, tmpctl.parseformat.parse_buffer, tmpctl.parseformat.parse_count);
+! strcat(outstatus,")");
+ }
+
+ /*
+ * gather state statistics
+ */
+
+! t = outstatus + strlen(outstatus);
+
+ for (i = 0; i <= CEVNT_MAX; i++)
+ {
+--- 2761,2780 ----
+ }
+ else
+ {
+! tt = add_var(&out->kv_list, 80, RO|DEF);
+! sprintf(tt, "refclock_format=\"");
+!
+! strncat(tt, tmpctl.parseformat.parse_buffer, tmpctl.parseformat.parse_count);
+! strcat(tt,"\"");
+ }
+
+ /*
+ * gather state statistics
+ */
+
+! tt = add_var(&out->kv_list, 200, RO|DEF);
+! strcpy(tt, "refclock_states=\"");
+! tt += strlen(tt);
+
+ for (i = 0; i <= CEVNT_MAX; i++)
+ {
+***************
+*** 2769,2787 ****
+
+ if (stime)
+ {
+! sprintf(t, "%s%s%s: %s (%d.%02d%%)",
+! sum ? "; " : " [",
+ (parse->status == i) ? "*" : "",
+ clockstatus(i),
+ l_mktime(stime),
+ percent / 100, percent % 100);
+ sum += stime;
+! t += strlen(t);
+ }
+ }
+
+! sprintf(t, "; running time: %s]", l_mktime(sum));
+
+ out->lencode = strlen(outstatus);
+ out->lastcode = outstatus;
+ out->timereset = parse->timestarted;
+--- 2797,2824 ----
+
+ if (stime)
+ {
+! sprintf(tt, "%s%s%s: %s (%d.%02d%%)",
+! sum ? "; " : "",
+ (parse->status == i) ? "*" : "",
+ clockstatus(i),
+ l_mktime(stime),
+ percent / 100, percent % 100);
+ sum += stime;
+! tt += strlen(tt);
+ }
+ }
+
+! sprintf(tt, "; running time: %s\"", l_mktime(sum));
+!
+! tt = add_var(&out->kv_list, 32, RO);
+! sprintf(tt, "refclock_id=\"%s\"", parse->parse_type->cl_id);
+
++ tt = add_var(&out->kv_list, 80, RO);
++ sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
++
++ tt = add_var(&out->kv_list, 128, RO);
++ sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp\"");
++
+ out->lencode = strlen(outstatus);
+ out->lastcode = outstatus;
+ out->timereset = parse->timestarted;
+***************
+*** 3086,3091 ****
+--- 3123,3130 ----
+ */
+ offset = parsetime->parse_ptime.fp;
+
++ L_ADD(&offset, &parse->ppsdelay);
++
+ if (PARSE_TIMECODE(parsetime->parse_state))
+ {
+ if (M_ISGEQ(off.l_i, off.l_f, -1, 0x80000000) &&
+***************
+*** 3353,3358 ****
+--- 3392,3403 ----
+ * History:
+ *
+ * refclock_parse.c,v
++ * Revision 3.45 1994/01/25 19:06:27 kardel
++ * 94/01/23 reconcilation
++ *
++ * Revision 3.44 1994/01/25 17:32:23 kardel
++ * settable extended variables
++ *
+ * Revision 3.43 1994/01/23 16:28:39 kardel
+ * HAVE_TERMIOS introduced
+ *
+diff -c -r1.1.1.8 lib/numtohost.c
+*** lib/numtohost.c:1.1.1.8 1994/01/26 20:12:51
+--- lib/numtohost.c 1994/01/26 21:17:01
+***************
+*** 1,6 ****
+--- 1,7 ----
+ /* numtohost.c,v 3.1 1993/07/06 01:08:40 jbj Exp
+ * numtohost - convert network number to host name.
+ */
++ #include "ntp_types.h"
+ #include "ntp_string.h"
+ #include <netdb.h>
+
diff --git a/usr.sbin/xntpd/patches/patch.30 b/usr.sbin/xntpd/patches/patch.30
new file mode 100644
index 0000000..55897f9
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.30
@@ -0,0 +1,73 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa14619; 22 Mar 94 11:53 EST
+Received: from jagubox.gsfc.nasa.gov by louie.udel.edu id aa24926;
+ 22 Mar 94 11:48 EST
+Received: by jagubox.gsfc.nasa.gov (Smail3.1.28.1 #2)
+ id m0pj9dD-000C8UC; Tue, 22 Mar 94 11:48 EST
+Message-Id: <m0pj9dD-000C8UC@jagubox.gsfc.nasa.gov>
+From: Jim Jagielski <jim@jagubox.gsfc.nasa.gov>
+Subject: Small patch for xntpd 3.3p and A/UX (tickadj)
+To: Mills@udel.edu
+Date: Tue, 22 Mar 1994 11:48:42 -0500 (EST)
+Reply-To: Jim Jagielski <jim@jagubox.gsfc.nasa.gov>
+In-Reply-To: <9308051324.aa24396@huey.udel.edu> from "Mills@udel.edu" at Aug 5, 93 01:24:24 pm
+X-Mailer: ELM [version 2.4 PL23]
+Content-Type: text
+Content-Length: 1355
+
+This little patch streamlines things a bit for tickadj and A/UX:
+
+----------->8 cut here --------------------------------
+
+*** tickadj.c.orig Mon Mar 14 02:47:28 1994
+--- tickadj.c Tue Mar 22 11:41:19 1994
+***************
+*** 333,342 ****
+
+ #if defined(SYS_AUX3) || defined(SYS_AUX2)
+ #define X_TICKADJ 0
+! #define X_V 1
+! #define X_TICK 2
+ #define X_DEF
+! static struct nlist nl[4];
+ #endif
+
+ #ifdef NeXT
+--- 333,345 ----
+
+ #if defined(SYS_AUX3) || defined(SYS_AUX2)
+ #define X_TICKADJ 0
+! #define X_TICK 1
+ #define X_DEF
+! static struct nlist nl[] =
+! { {"tickadj"},
+! {"tick"},
+! {""},
+! };
+ #endif
+
+ #ifdef NeXT
+***************
+*** 428,440 ****
+ NULL
+ };
+ struct stat stbuf;
+-
+- #if defined(SYS_AUX3) || defined(SYS_AUX2)
+- strcpy (nl[X_TICKADJ].n_name, "tickadj");
+- strcpy (nl[X_V].n_name, "v");
+- strcpy (nl[X_TICK].n_name, "tick");
+- nl[3].n_name[0] = '\0';
+- #endif
+
+ for (kname = kernels; *kname != NULL; kname++) {
+ if (stat(*kname, &stbuf) == -1)
+--- 431,436 ----
+----------->8 cut here --------------------------------
+--
+#include <std/disclaimer.h>
+ Jim Jagielski |
+ jim@jagubox.gsfc.nasa.gov | "Dead or alive, you're coming with me."
+ NASA/GSFC, Code 734.4 | RoboCop
+ Greenbelt, MD 20771 |
+
diff --git a/usr.sbin/xntpd/patches/patch.31 b/usr.sbin/xntpd/patches/patch.31
new file mode 100644
index 0000000..33048f9
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.31
@@ -0,0 +1,83 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa12734; 27 Mar 94 8:52 EST
+Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa20329;
+ 27 Mar 94 8:48 EST
+Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
+ id AA05771 (5.65c-6/7.3v-FAU); Sun, 27 Mar 1994 15:48:38 +0200
+Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
+ id AA01229 (5.65c-6/7.3m-FAU); Sun, 27 Mar 1994 14:48:37 +0100
+From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
+Message-Id: <199403271348.AA01229@faui43.informatik.uni-erlangen.de>
+Subject: minor patches
+To: mills@udel.edu
+Date: Sun, 27 Mar 94 15:48:32 MET DST
+X-Mailer: ELM [version 2.3 PL11]
+
+Hi, Dave,
+
+I just got through manually read news (in the spool area 8-( - when
+will they ever fix our news installation).
+
+In order to avoid ptx being picked up in AT&T machine i added hope-fully
+an additional check. Why do vendor have to make machine look the
+same when they aren't ? I though uname was supposed to find out - I
+guess I was wrong - every vendor seems to have his own ideas about
+uname and they all do not mix very well.
+
+The fix to numtohost allows it to compile on ptx - I hope it still
+compiles on all others (should though).
+
+diff -c lib/numtohost.c:1.1.1.9 lib/numtohost.c:3.7
+*** lib/numtohost.c:1.1.1.9 Sun Mar 27 15:36:54 1994
+--- lib/numtohost.c Sun Mar 27 15:36:54 1994
+***************
+*** 1,12 ****
+! /* numtohost.c,v 3.1 1993/07/06 01:08:40 jbj Exp
+ * numtohost - convert network number to host name.
+ */
+- #include "ntp_types.h"
+ #include <netdb.h>
+
+ #include "ntp_fp.h"
+- #include "lib_strbuf.h"
+ #include "ntp_stdlib.h"
+
+ #define LOOPBACKNET 0x7f000000
+ #define LOOPBACKHOST 0x7f000001
+--- 1,11 ----
+! /*
+ * numtohost - convert network number to host name.
+ */
+ #include <netdb.h>
+
+ #include "ntp_fp.h"
+ #include "ntp_stdlib.h"
++ #include "lib_strbuf.h"
+
+ #define LOOPBACKNET 0x7f000000
+ #define LOOPBACKHOST 0x7f000001
+diff -c scripts/Guess.sh:1.1.1.8 scripts/Guess.sh:1.13
+*** scripts/Guess.sh:1.1.1.8 Sun Mar 27 15:38:53 1994
+--- scripts/Guess.sh Sun Mar 27 15:38:53 1994
+***************
+*** 78,84 ****
+ 3.2.*)
+ case "$4" in
+ v*)
+! (i386) >/dev/null 2>&1 && guess=ptx;;
+ esac
+ esac
+ fi
+--- 78,84 ----
+ 3.2.*)
+ case "$4" in
+ v*)
+! (i386) >/dev/null 2>&1 && [ -f /usr/lib/libseq.a ] && guess=ptx;;
+ esac
+ esac
+ fi
+--
+ Frank Kardel (kardel@informatik.uni-erlangen.de)
+ All SCSI disks will from now on be required to send an email
+ notice 24 hours prior to complete hardware failure!
+
diff --git a/usr.sbin/xntpd/patches/patch.32 b/usr.sbin/xntpd/patches/patch.32
new file mode 100644
index 0000000..2e951cb
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.32
@@ -0,0 +1,89 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa12910; 27 Mar 94 10:06 EST
+Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa22473;
+ 27 Mar 94 10:05 EST
+Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
+ id AA09307 (5.65c-6/7.3v-FAU); Sun, 27 Mar 1994 17:05:03 +0200
+Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
+ id AA05359 (5.65c-6/7.3m-FAU); Sun, 27 Mar 1994 16:05:01 +0100
+From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
+Message-Id: <199403271505.AA05359@faui43.informatik.uni-erlangen.de>
+Subject: more PTX related patches...
+To: mills@udel.edu
+Date: Sun, 27 Mar 94 17:04:56 MET DST
+X-Mailer: ELM [version 2.3 PL11]
+
+Hi, Dave !
+
+And another patche to make parse compile on PTX (Sequents
+SysVR2 version).
+
+===================================================================
+RCS file: /src/NTP/REPOSITORY/v3/parse/parse.c,v
+retrieving revision 3.23
+retrieving revision 3.24
+diff -c -r3.23 -r3.24
+*** parse/parse.c:3.23 1994/03/25 13:09:02
+--- parse/parse.c 1994/03/27 15:01:36
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.23 1994/03/25 13:09:02 kardel Exp
+ *
+! * parse.c,v 3.23 1994/03/25 13:09:02 kardel Exp
+ *
+ * Parser module for reference clock
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.24 1994/03/27 15:01:36 kardel Exp
+ *
+! * parse.c,v 3.24 1994/03/27 15:01:36 kardel Exp
+ *
+ * Parser module for reference clock
+ *
+***************
+*** 29,34 ****
+--- 29,38 ----
+ #include "sys/time.h"
+ #include "sys/errno.h"
+
++ #include "ntp_fp.h"
++ #include "ntp_unixtime.h"
++ #include "ntp_calendar.h"
++
+ #include "ntp_machine.h"
+
+ #if defined(PARSESTREAM) && (defined(SYS_SUNOS4) || defined(SYS_SOLARIS)) && defined(STREAM)
+***************
+*** 49,58 ****
+ #endif
+ #endif
+
+- #include "ntp_fp.h"
+- #include "ntp_unixtime.h"
+- #include "ntp_calendar.h"
+-
+ #include "parse.h"
+
+ #include "ntp_stdlib.h"
+--- 53,58 ----
+***************
+*** 1162,1167 ****
+--- 1162,1170 ----
+ * History:
+ *
+ * parse.c,v
++ * Revision 3.24 1994/03/27 15:01:36 kardel
++ * reorder include file to cope with PTX
++ *
+ * Revision 3.23 1994/03/25 13:09:02 kardel
+ * considering FIXEDONLY entries only in FIXEDONLY mode
+ *
+--
+ Frank Kardel (kardel@informatik.uni-erlangen.de)
+ All SCSI disks will from now on be required to send an email
+ notice 24 hours prior to complete hardware failure!
+
diff --git a/usr.sbin/xntpd/patches/patch.33 b/usr.sbin/xntpd/patches/patch.33
new file mode 100644
index 0000000..e7d1934
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.33
@@ -0,0 +1,75 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa13737; 27 Mar 94 15:27 EST
+Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa29101;
+ 27 Mar 94 15:23 EST
+Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
+ id AA24270 (5.65c-6/7.3v-FAU); Sun, 27 Mar 1994 22:23:35 +0200
+Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
+ id AA07515 (5.65c-6/7.3m-FAU); Sun, 27 Mar 1994 21:23:34 +0100
+From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
+Message-Id: <199403272023.AA07515@faui43.informatik.uni-erlangen.de>
+Subject: and for patch 33?
+To: mills@udel.edu
+Date: Sun, 27 Mar 94 22:23:30 MET DST
+X-Mailer: ELM [version 2.3 PL11]
+
+This should get you to Patch 33. or higher.
+ - gcc 2.5.8 (from Per Hedeland - gcc 2.5.8 is just
+ causing to many poeple to complain 8-()_
+ - a an note what one can do in Config.local in HACKermode.
+
+===================================================================
+RCS file: /src/NTP/REPOSITORY/v3/RELNOTES,v
+retrieving revision 1.1.1.11
+diff -c -r1.1.1.11 RELNOTES
+*** 1.1.1.11 1994/01/30 17:08:20
+--- RELNOTES 1994/03/27 19:40:27
+***************
+*** 31,36 ****
+--- 31,40 ----
+ For custom tailored configuration copying Config.local.dist to Config.local
+ and editing Config.local to suit the local needs is neccessary (at most
+ 3 lines to change), or use one of the make's above and then tweak it.
++ Config.local can also be used to override common settings from the
++ machines/* files like the AUTHDEFS= to select very specific configurations.
++ Please use this feature with care and don't be disappointed if it doesn't
++ work the way you expect.
+
+ (2) Type "make" to compile everything of general interest. Expect few or
+ no warnings using cc and a moderate level of warnings using gcc.
+===================================================================
+RCS file: /src/NTP/REPOSITORY/v3/include/l_stdlib.h,v
+retrieving revision 1.1.1.6
+diff -c -r1.1.1.6 l_stdlib.h
+*** include/l_stdlib.h:1.1.1.6 1994/01/28 13:07:49
+--- include/l_stdlib.h 1994/03/27 19:34:40
+***************
+*** 70,80 ****
+
+ extern int close P((int));
+ extern int ioctl P((int, int, char *));
+! extern int read P((int, char *, unsigned));
+ extern int rename P((char *, char *));
+! extern int write P((int, char *, int));
+! extern int unlink P((char *));
+! extern int link P((char *, char *));
+
+ #ifdef FILE
+ extern int fclose P((FILE *));
+--- 70,80 ----
+
+ extern int close P((int));
+ extern int ioctl P((int, int, char *));
+! extern int read P((int, void *, unsigned));
+ extern int rename P((char *, char *));
+! extern int write P((int, const void *, unsigned));
+! extern int unlink P((const char *));
+! extern int link P((const char *, const char *));
+
+ #ifdef FILE
+ extern int fclose P((FILE *));
+--
+ Frank Kardel (kardel@informatik.uni-erlangen.de)
+ All SCSI disks will from now on be required to send an email
+ notice 24 hours prior to complete hardware failure!
+
diff --git a/usr.sbin/xntpd/patches/patch.34 b/usr.sbin/xntpd/patches/patch.34
new file mode 100644
index 0000000..a382889
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.34
@@ -0,0 +1,303 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa02155; 25 Mar 94 8:47 EST
+Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa05544;
+ 25 Mar 94 8:45 EST
+Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
+ id AA27199 (5.65c-6/7.3v-FAU); Fri, 25 Mar 1994 14:45:13 +0100
+Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
+ id AA06935 (5.65c-6/7.3m-FAU); Fri, 25 Mar 1994 14:45:11 +0100
+From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
+Message-Id: <199403251345.AA06935@faui43.informatik.uni-erlangen.de>
+Subject: bugfixes for parse & ntpq enhancements
+To: mills@udel.edu
+Date: Fri, 25 Mar 94 14:45:05 MET
+X-Mailer: ELM [version 2.3 PL11]
+
+Hi Dave,
+
+I have a 2 bug fixes and an ntpq enhancement:
+ - parse bitmap initialisation fixed
+ - allow for large offsets in refclock_parse (>4 min 8-()
+ - decode the flash bits in cooked mode
+
+diff -c ntpq/ntpq.c:1.1.1.21 ntpq/ntpq.c:3.22
+*** ntpq/ntpq.c:1.1.1.21 Fri Mar 25 14:32:38 1994
+--- ntpq/ntpq.c Fri Mar 25 14:32:38 1994
+***************
+*** 75,80 ****
+--- 75,81 ----
+ #define OC 12 /* integer, print in octal */
+ #define MD 13 /* mode */
+ #define AR 14 /* array of times */
++ #define TST 15 /* test flags */
+ #define EOV 255 /* end of table */
+
+
+***************
+*** 145,151 ****
+ { CP_RECEIVED, UI, "received" }, /* 31 */
+ { CP_SENT, UI, "sent" }, /* 32 */
+ { CP_FILTERROR, AR, "filterror" }, /* 33 */
+! { CP_FLASH, ST, "flash"}, /* 34 */
+ { CP_DISP, AR, "disp" }, /* 35 */
+ /*
+ * These are duplicate entires so that we can
+--- 146,152 ----
+ { CP_RECEIVED, UI, "received" }, /* 31 */
+ { CP_SENT, UI, "sent" }, /* 32 */
+ { CP_FILTERROR, AR, "filterror" }, /* 33 */
+! { CP_FLASH, TST, "flash"}, /* 34 */
+ { CP_DISP, AR, "disp" }, /* 35 */
+ /*
+ * These are duplicate entires so that we can
+***************
+*** 189,194 ****
+--- 190,209 ----
+ };
+
+ /*
++ * flasher bits
++ */
++ static char *tstflagnames[] = {
++ "DUPLICATE PKT",
++ "BOGUS PKT",
++ "PROTO UNSYNC",
++ "PEER BOUNDS",
++ "BAD AUTH",
++ "PEER CLOCK UNSYNC",
++ "BAD STRATUM",
++ "ROOT BOUNDS"
++ };
++
++ /*
+ * Leap values
+ */
+ struct codestring leap_codes[] = {
+***************
+*** 2836,2842 ****
+ output(fp, name, buf);
+ }
+
+!
+
+ /*
+ * cookedprint - output variables in cooked mode
+--- 2851,2895 ----
+ output(fp, name, buf);
+ }
+
+! static char *
+! tstflags(val)
+! U_LONG val;
+! {
+! register char *cb, *s;
+! register int i;
+! register char *sep;
+!
+! sep = "";
+! i = 0;
+! s = cb = &circ_buf[nextcb][0];
+! if (++nextcb >= NUMCB)
+! nextcb = 0;
+!
+! sprintf(cb, "0x%x", val);
+! cb += strlen(cb);
+! if (val <= ((1<<8)-1)) {
+! if (!val) {
+! strcat(cb, "<OK>");
+! cb += strlen(cb);
+! } else {
+! *cb++ = '<';
+! while (val) {
+! if (val & 0x1) {
+! sprintf(cb, "%s%s", sep, tstflagnames[i]);
+! sep = ";";
+! cb += strlen(cb);
+! }
+! i++;
+! val >>= 1;
+! }
+! *cb++ = '>';
+! }
+! } else {
+! *cb++ = '?';
+! }
+! *cb = '\0';
+! return s;
+! }
+
+ /*
+ * cookedprint - output variables in cooked mode
+***************
+*** 2994,2999 ****
+--- 3047,3059 ----
+ outputarr(fp, name, narr, lfparr);
+ break;
+
++ case TST:
++ if (!decodeuint(value, &uval))
++ output_raw = '?';
++ else
++ output(fp, name, tstflags(uval));
++ break;
++
+ default:
+ (void) fprintf(stderr,
+ "Internal error in cookedprint, %s=%s, fmt %d\n",
+diff -c parse/parse.c:1.1.1.10 parse/parse.c:3.23
+*** parse/parse.c:1.1.1.10 Fri Mar 25 14:33:02 1994
+--- parse/parse.c Fri Mar 25 14:33:02 1994
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp
+ *
+! * parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp
+ *
+ * Parser module for reference clock
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.23 1994/03/25 13:09:02 kardel Exp
+ *
+! * parse.c,v 3.23 1994/03/25 13:09:02 kardel Exp
+ *
+ * Parser module for reference clock
+ *
+***************
+*** 178,183 ****
+--- 178,187 ----
+ {
+ fmt = clockformats[i];
+
++ if (!(parseio->parse_flags & PARSE_FIXED_FMT) &&
++ (fmt->flags & CVT_FIXEDONLY))
++ continue;
++
+ if (fmt->flags & F_START)
+ {
+ index = fmt->startsym / 8;
+***************
+*** 1158,1163 ****
+--- 1162,1170 ----
+ * History:
+ *
+ * parse.c,v
++ * Revision 3.23 1994/03/25 13:09:02 kardel
++ * considering FIXEDONLY entries only in FIXEDONLY mode
++ *
+ * Revision 3.22 1994/02/25 12:34:49 kardel
+ * allow for converter generated utc times
+ *
+diff -c xntpd/refclock_parse.c:1.1.1.13 xntpd/refclock_parse.c:3.53
+*** xntpd/refclock_parse.c:1.1.1.13 Fri Mar 25 14:35:07 1994
+--- xntpd/refclock_parse.c Fri Mar 25 14:35:08 1994
+***************
+*** 1,8 ****
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp
+ *
+! * refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp
+ *
+ * generic reference clock driver for receivers
+ *
+--- 1,8 ----
+ #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
+ /*
+! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp
+ *
+! * refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp
+ *
+ * generic reference clock driver for receivers
+ *
+***************
+*** 129,135 ****
+ #include "parse.h"
+
+ #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
+! static char rcsid[]="refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp";
+ #endif
+
+ /**===========================================================================
+--- 129,135 ----
+ #include "parse.h"
+
+ #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
+! static char rcsid[]="refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp";
+ #endif
+
+ /**===========================================================================
+***************
+*** 2824,2830 ****
+ sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
+
+ tt = add_var(&out->kv_list, 128, RO);
+! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp\"");
+
+ out->lencode = strlen(outstatus);
+ out->lastcode = outstatus;
+--- 2824,2830 ----
+ sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
+
+ tt = add_var(&out->kv_list, 128, RO);
+! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp\"");
+
+ out->lencode = strlen(outstatus);
+ out->lastcode = outstatus;
+***************
+*** 3103,3109 ****
+ L_ADD(&off, &offset);
+ rectime = off; /* this makes org time and xmt time somewhat artificial */
+
+! if (parse->flags & PARSE_STAT_FILTER)
+ {
+ struct timeval usecerror;
+ /*
+--- 3103,3113 ----
+ L_ADD(&off, &offset);
+ rectime = off; /* this makes org time and xmt time somewhat artificial */
+
+! L_SUB(&off, &parsetime->parse_stime.fp);
+!
+! if ((parse->flags & PARSE_STAT_FILTER) &&
+! (off.l_i > -60) &&
+! (off.l_i < 60)) /* take usec error only if within +- 60 secs */
+ {
+ struct timeval usecerror;
+ /*
+***************
+*** 3115,3124 ****
+ sTVTOTS(&usecerror, &off);
+ L_ADD(&off, &offset);
+ }
+- else
+- {
+- L_SUB(&off, &parsetime->parse_stime.fp);
+- }
+ }
+
+ if (PARSE_PPS(parsetime->parse_state) && CL_PPS(parse->unit))
+--- 3119,3124 ----
+***************
+*** 3409,3414 ****
+--- 3409,3420 ----
+ * History:
+ *
+ * refclock_parse.c,v
++ * Revision 3.53 1994/03/25 13:07:39 kardel
++ * fixed offset calculation for large (>4 Min) offsets
++ *
++ * Revision 3.52 1994/03/03 09:58:00 kardel
++ * stick -kv in cvs is no fun
++ *
+ * Revision 3.49 1994/02/20 13:26:00 kardel
+ * rcs id cleanup
+ *
+--
+ Frank Kardel (kardel@informatik.uni-erlangen.de)
+ All SCSI disks will from now on be required to send an email
+ notice 24 hours prior to complete hardware failure!
+
diff --git a/usr.sbin/xntpd/patches/patch.35 b/usr.sbin/xntpd/patches/patch.35
new file mode 100644
index 0000000..e6b1ea4
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.35
@@ -0,0 +1,914 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa25410; 3 Apr 94 18:04 EDT
+Received: from adrastea.lcs.mit.edu by louie.udel.edu id aa09227;
+ 3 Apr 94 17:56 EDT
+Received: by adrastea.lcs.mit.edu; id AA26407; Sun, 3 Apr 1994 17:56:48 -0400
+Date: Sun, 3 Apr 1994 17:56:48 -0400
+From: Garrett Wollman <wollman@adrastea.lcs.mit.edu>
+Message-Id: <9404032156.AA26407@adrastea.lcs.mit.edu>
+To: Dave Mills <Mills@udel.edu>
+Subject: xntpd 3.3p changes for FreeBSD
+
+This still doesn't solve the 18-second discrepancy. However, the
+patch file below shows the current differences between xntp3.3p and
+the FreeBSD version of same, deleted files not included. I have also
+included the Makefiles that we use to provide some idea of our build
+structure. (Thankfully, xntp---unlike some other popular pieces of
+software---has a sane directory structure to begin with, so it isn't
+nearly as difficult to handle this sort of thing than it is with, say,
+GCC.)
+
+diff -c /dev/null 386BSD/src/contrib/xntpd/Makefile.inc:1.3
+*** /dev/null Sun Apr 3 13:42:15 1994
+--- 386BSD/src/contrib/xntpd/Makefile.inc Sun Apr 3 13:42:15 1994
+***************
+*** 0 ****
+--- 1,7 ----
++ DEFS_LOCAL=-DREFCLOCK -DPARSE
++ NTPDEFS= -DSYS_FREEBSD -DSYS_386BSD -DHAVE_TERMIOS
++ AUTHDEFS= -DMD5
++ CLOCKDEFS= -DLOCAL_CLOCK -DPST -DWWVB -DAS2201 -DGOES -DGPSTM -DOMEGA \
++ -DLEITCH -DTRAK
++ CFLAGS+= ${NTPDEFS} ${DEFS_LOCAL} ${AUTHDEFS} ${CLOCKDEFS} ${COPTS}
++ BINDIR?= /usr/sbin
+diff -c /dev/null 386BSD/src/contrib/xntpd/README.FreeBSD:1.5
+*** /dev/null Sun Apr 3 13:42:15 1994
+--- 386BSD/src/contrib/xntpd/README.FreeBSD Sun Apr 3 13:42:15 1994
+***************
+*** 0 ****
+--- 1,78 ----
++ This version of NTP was converted to the BSD-style Makefile system by
++ Garrett Wollman (wollman@freefall.cdrom.com); it is based on version
++ 3.3p (late beta) from the University of Delaware.
++
++ Besides the Makefile changes, the DES code has been completely removed
++ in order to make this code exportable. If you have a legal copy of
++ `authdes.c', you can just add it to the lib/ directory and add `-DDES'
++ to the AUTHDEFS in Makefile.inc.
++
++ You can change CLOCKDEFS in the same file to add other reference clocks.
++
++ ----------------------------------------------------
++ Support for Conrad electronic's "DCF-77 Uhr, Mobil".
++ ----------------------------------------------------
++ Conrad electronic in Germany,, Phone (+49) 962230111 (?), sells a gadget
++ called "DCF77 Uhr, mobil", which is a DCF77 timecode receiver with a
++ rs-232 interface. The price is around DM130.
++ 9-pin interface is Order# 97 94 57 66
++ 25-pin interface is Order# 97 94 81 66
++
++ You must define
++ -DDCF77 -DPPS -DFREEBSD_CONRAD -DDEBUG
++ when you compile xntpd. You can later remove -DDEBUG, if you feel like it.
++
++ You must also have
++ options COM_BIDIR
++ defined in your kernel, and finally the ttyport you intend to use must
++ have special interrupt vector:
++ device sio1 at isa? port "IO_COM2" tty irq 3 vector siointrts
++ ^^^^^^^^^^^^
++ connect the radio-clock to the tty port and link it to /dev/refclock-0:
++
++ cd /dev
++ sh MAKEDEV cua1
++ ln -s /dev/cua01 /dev/refclock-0
++
++ make a directory to gather statistics in:
++ mkdir /var/tmp/ntp
++
++ Create a /etc/ntp.conf along these lines:
++
++ # DCF77 without PPS
++ server 127.127.8.20
++ # DCF77 with PPS
++ #server 127.127.8.148 prefer
++
++ driftfile /var/tmp/ntp/ntp.drift
++ statsdir /var/tmp/ntp
++ statistics loopstats
++ statistics peerstats
++ statistics clockstats
++ filegen peerstats file peerstats type day enable
++ filegen loopstats file loopstats type day enable
++ filegen clockstats file clockstats type day enable
++
++ Try to start it:
++ comcontrol ttyd1 bidir
++ tickadj -A
++ xntpd -d -d -d
++
++ You should see the red LED flash on the receiver every second now. You
++ may have to experiment a bit with the location, and possibly adjust the
++ minute variable resistor inside to get a good signal. Be aware, that just
++ because you see the light flash, is not the same as the signal being
++ received by the computer. The chip doing the work in the reciver uses
++ less than 1 micro-ampere, so even if RTS isn't pulled low, it will happily
++ receive, but be unable to buffer the signal to the rs-232 levels needed.
++
++ You can see what's going on in /var/log/messages, and query the
++ daemon using xntpdc and ntpq, in particular the "clockvar" command
++ of ntpq will tell about the clocks healt.
++
++ I live in Slagelse, Denmark, which is ~1000 Km from Mainflingen, yet
++ I have +/- 2 ms precision from this cheap gadget. If you have a very
++ stable signal, you can use the 'pps' address instead to improve your
++ timing.
++
++ Have fun... Poul-Henning Kamp <phk@login.dkuug.dk>
+diff -c /dev/null 386BSD/src/contrib/xntpd/authstuff/Makefile:1.2
+*** /dev/null Sun Apr 3 13:42:19 1994
+--- 386BSD/src/contrib/xntpd/authstuff/Makefile Sun Apr 3 13:42:20 1994
+***************
+*** 0 ****
+--- 1,27 ----
++ #
++ # $Id: Makefile,v 1.2 1993/12/22 11:32:10 rgrimes Exp $
++ #
++ # Most of the programs in this directory are completely useless for the
++ # NTP configuration that we provide by default.
++ # We provide the `md5' program as a public service.
++
++ CFLAGS+= -I${.CURDIR}/../include
++
++ .if exists(${.CURDIR}/../lib/obj)
++ LDADD+= -L${.CURDIR}/../lib/obj
++ DPADD+= ${.CURDIR}/../lib/obj/libntp.a
++ .else
++ LDADD+= -L${.CURDIR}/../lib
++ DPADD+= ${.CURDIR}/../lib/libntp.a
++ .endif
++
++ LDADD+= -lntp
++
++ PROG= md5
++
++ SRCS= md5driver.c
++ NOMAN=
++
++ install:
++
++ .include <bsd.prog.mk>
+diff -c 386BSD/src/contrib/xntpd/authstuff/md5driver.c:1.1.1.2 386BSD/src/contrib/xntpd/authstuff/md5driver.c:1.2
+*** 386BSD/src/contrib/xntpd/authstuff/md5driver.c:1.1.1.2 Sun Apr 3 13:42:20 1994
+--- 386BSD/src/contrib/xntpd/authstuff/md5driver.c Sun Apr 3 13:42:20 1994
+***************
+*** 30,36 ****
+--- 30,38 ----
+ #endif /* SYS_BSDI */
+ #include "md5.h"
+
++ #ifndef MD5
+ #define MD5
++ #endif
+ #include "ntp_string.h"
+ #include "ntp_stdlib.h"
+
+diff -c /dev/null 386BSD/src/contrib/xntpd/clockstuff/Makefile:1.1
+*** /dev/null Sun Apr 3 13:42:21 1994
+--- 386BSD/src/contrib/xntpd/clockstuff/Makefile Sun Apr 3 13:42:21 1994
+***************
+*** 0 ****
+--- 1,16 ----
++ #
++ # $Id: Makefile,v 1.1 1993/12/21 21:06:24 wollman Exp $
++ #
++
++ PROG= propdelay
++ LIBADD= -L${.CURDIR}/../lib -lntp -lm
++ DPADD= ${.CURDIR}/../lib/libntp.a
++
++ SRCS= propdelay.c
++ NOMAN=
++
++ install:
++
++ CLEANFILES+= chutest clktest chutest.o clktest.o
++
++ .include <bsd.prog.mk>
+diff -c /dev/null 386BSD/src/contrib/xntpd/lib/Makefile:1.5
+*** /dev/null Sun Apr 3 13:43:01 1994
+--- 386BSD/src/contrib/xntpd/lib/Makefile Sun Apr 3 13:43:01 1994
+***************
+*** 0 ****
+--- 1,30 ----
++ #
++ # $Id: Makefile,v 1.5 1994/04/03 20:37:05 wollman Exp $
++ #
++
++ CFLAGS+= -I${.CURDIR}/../include
++
++ SRCS= atoint.c atolfp.c atouint.c auth12crypt.c authdecrypt.c authdes.c \
++ authencrypt.c authkeys.c authparity.c authreadkeys.c authusekey.c \
++ buftvtots.c caljulian.c calleapwhen.c caltontp.c calyearstart.c \
++ clocktime.c dofptoa.c dolfptoa.c emalloc.c fptoa.c fptoms.c \
++ gettstamp.c hextoint.c hextolfp.c humandate.c inttoa.c \
++ lib_strbuf.c mfptoa.c mfptoms.c modetoa.c mstolfp.c \
++ msutotsf.c netof.c numtoa.c refnumtoa.c numtohost.c octtoint.c \
++ prettydate.c ranny.c tsftomsu.c tstotv.c tvtoa.c tvtots.c \
++ uglydate.c uinttoa.c utvtoa.c clocktypes.c \
++ md5.c a_md5encrypt.c a_md5decrypt.c \
++ a_md512crypt.c decodenetnum.c systime.c msyslog.c syssignal.c \
++ findconfig.c getopt.c
++
++ NOMAN=
++ NOPROFILE=
++ LIB= ntp
++ CLEANFILES+=authdes.c
++
++ install:
++
++ authdes.c: authdes.c.export
++ cp ${.CURDIR}/authdes.c.export authdes.c
++
++ .include <bsd.lib.mk>
+diff -c /dev/null 386BSD/src/contrib/xntpd/ntpdate/Makefile:1.3
+*** /dev/null Sun Apr 3 13:43:27 1994
+--- 386BSD/src/contrib/xntpd/ntpdate/Makefile Sun Apr 3 13:43:27 1994
+***************
+*** 0 ****
+--- 1,28 ----
++ #
++ # $Id: Makefile,v 1.3 1993/12/22 11:32:56 rgrimes Exp $
++ #
++
++ CFLAGS+= -I${.CURDIR}/../include
++
++ .if exists(${.CURDIR}/../lib/obj)
++ LDADD+= -L${.CURDIR}/../lib/obj
++ DPADD+= -L${.CURDIR}/../lib/obj/libntp.a
++ .else
++ LDADD+= -L${.CURDIR}/../lib
++ DPADD+= -L${.CURDIR}/../lib/libntp.a
++ .endif
++
++ LDADD+= -lntp
++
++ PROG= ntpdate
++ MAN8= ${.CURDIR}/../doc/ntpdate.8
++ CLEANFILES+= .version version.c
++
++ SRCS= ntpdate.c version.c
++
++ beforedepend: version.c
++
++ version.c: ${.CURDIR}/../VERSION
++ ${.CURDIR}/../scripts/mkversion ntpdate
++
++ .include <bsd.prog.mk>
+diff -c /dev/null 386BSD/src/contrib/xntpd/ntpq/Makefile:1.3
+*** /dev/null Sun Apr 3 13:43:28 1994
+--- 386BSD/src/contrib/xntpd/ntpq/Makefile Sun Apr 3 13:43:29 1994
+***************
+*** 0 ****
+--- 1,29 ----
++ #
++ # $Id: Makefile,v 1.3 1993/12/22 11:33:07 rgrimes Exp $
++ #
++
++ CFLAGS+= -I${.CURDIR}/../include
++
++ .if exists(${.CURDIR}/../lib/obj)
++ LDADD+= -L${.CURDIR}/../lib/obj
++ DPADD+= -L${.CURDIR}/../lib/obj/libntp.a
++ .else
++ LDADD+= -L${.CURDIR}/../lib
++ DPADD+= -L${.CURDIR}/../lib/libntp.a
++ .endif
++
++ LDADD+= -lntp
++
++ PROG= ntpq
++ MAN8= ${.CURDIR}/../doc/ntpq.8
++ CLEANFILES+= .version version.c
++ BINDIR= /usr/bin
++
++ SRCS= ntpq.c ntpq_ops.c version.c
++
++ beforedepend: version.c
++
++ version.c: ${.CURDIR}/../VERSION
++ ${.CURDIR}/../scripts/mkversion ntpq
++
++ .include <bsd.prog.mk>
+diff -c 386BSD/src/contrib/xntpd/ntpq/ntpq.c:1.1.1.2 386BSD/src/contrib/xntpd/ntpq/ntpq.c:1.2
+*** 386BSD/src/contrib/xntpd/ntpq/ntpq.c:1.1.1.2 Sun Apr 3 13:43:30 1994
+--- 386BSD/src/contrib/xntpd/ntpq/ntpq.c Sun Apr 3 13:43:30 1994
+***************
+*** 301,307 ****
+ static int decodearr P((char *, int *, l_fp *));
+ static char * getcode P((int, struct codestring *));
+ static void help P((struct parse *, FILE *));
+! #if defined(sgi) || defined(SYS_BSDI)
+ static int helpsort P((const void *, const void *));
+ #else
+ static int helpsort P((char **, char **));
+--- 301,307 ----
+ static int decodearr P((char *, int *, l_fp *));
+ static char * getcode P((int, struct codestring *));
+ static void help P((struct parse *, FILE *));
+! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
+ static int helpsort P((const void *, const void *));
+ #else
+ static int helpsort P((char **, char **));
+***************
+*** 335,341 ****
+ static void endoutput P((FILE *));
+ static void outputarr P((FILE *, char *, int, l_fp *));
+ static void cookedprint P((int, int, char *, int, FILE *));
+! #if defined(sgi) || defined(SYS_BSDI)
+ static int assoccmp P((const void *, const void *));
+ #else
+ static int assoccmp P((struct association *, struct association *));
+--- 335,341 ----
+ static void endoutput P((FILE *));
+ static void outputarr P((FILE *, char *, int, l_fp *));
+ static void cookedprint P((int, int, char *, int, FILE *));
+! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
+ static int assoccmp P((const void *, const void *));
+ #else
+ static int assoccmp P((struct association *, struct association *));
+***************
+*** 1888,1894 ****
+ for (xcp = opcmds; xcp->keyword != 0; xcp++)
+ cmdsort[n++] = xcp->keyword;
+
+! #if defined(sgi) || defined(SYS_BSDI)
+ qsort((void *)cmdsort, n, sizeof(char *), helpsort);
+ #else
+ qsort((char *)cmdsort, n, sizeof(char *), helpsort);
+--- 1888,1894 ----
+ for (xcp = opcmds; xcp->keyword != 0; xcp++)
+ cmdsort[n++] = xcp->keyword;
+
+! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
+ qsort((void *)cmdsort, n, sizeof(char *), helpsort);
+ #else
+ qsort((char *)cmdsort, n, sizeof(char *), helpsort);
+***************
+*** 1934,1940 ****
+ * helpsort - do hostname qsort comparisons
+ */
+ static int
+! #if defined(sgi) || defined(SYS_BSDI)
+ helpsort(t1, t2)
+ const void *t1;
+ const void *t2;
+--- 1934,1940 ----
+ * helpsort - do hostname qsort comparisons
+ */
+ static int
+! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
+ helpsort(t1, t2)
+ const void *t1;
+ const void *t2;
+***************
+*** 3028,3034 ****
+ sortassoc()
+ {
+ if (numassoc > 1)
+! #if defined(sgi) || defined(SYS_BSDI)
+ qsort((void *)assoc_cache, numassoc,
+ sizeof(struct association), assoccmp);
+ #else
+--- 3028,3034 ----
+ sortassoc()
+ {
+ if (numassoc > 1)
+! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
+ qsort((void *)assoc_cache, numassoc,
+ sizeof(struct association), assoccmp);
+ #else
+***************
+*** 3042,3048 ****
+ * assoccmp - compare two associations
+ */
+ static int
+! #if defined(sgi) || defined(SYS_BSDI)
+ assoccmp(t1, t2)
+ const void *t1;
+ const void *t2;
+--- 3042,3048 ----
+ * assoccmp - compare two associations
+ */
+ static int
+! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
+ assoccmp(t1, t2)
+ const void *t1;
+ const void *t2;
+diff -c /dev/null 386BSD/src/contrib/xntpd/ntptrace/Makefile:1.2
+*** /dev/null Sun Apr 3 13:43:31 1994
+--- 386BSD/src/contrib/xntpd/ntptrace/Makefile Sun Apr 3 13:43:31 1994
+***************
+*** 0 ****
+--- 1,28 ----
++ #
++ # $Id: Makefile,v 1.2 1993/12/22 11:33:14 rgrimes Exp $
++ #
++
++ CFLAGS+= -I${.CURDIR}/../include
++
++ .if exists(${.CURDIR}/../lib/obj)
++ LDADD+= -L${.CURDIR}/../lib/obj
++ DPADD+= -L${.CURDIR}/../lib/obj/libntp.a
++ .else
++ LDADD+= -L${.CURDIR}/../lib
++ DPADD+= -L${.CURDIR}/../lib/libntp.a
++ .endif
++
++ LDADD+= -lntp
++
++ PROG= ntptrace
++ MAN8= ${.CURDIR}/../doc/ntptrace.8
++ CLEANFILES+= .version version.c
++
++ SRCS= ntptrace.c version.c
++
++ beforedepend: version.c
++
++ version.c: ${.CURDIR}/../VERSION
++ ${.CURDIR}/../scripts/mkversion ntptrace
++
++ .include <bsd.prog.mk>
+diff -c /dev/null 386BSD/src/contrib/xntpd/parse/Makefile:1.1
+*** /dev/null Sun Apr 3 13:43:32 1994
+--- 386BSD/src/contrib/xntpd/parse/Makefile Sun Apr 3 13:43:32 1994
+***************
+*** 0 ****
+--- 1,19 ----
++ #
++ # $Id: Makefile,v 1.1 1993/12/21 20:04:14 wollman Exp $
++ #
++
++ PARSEFLAGS= -DCLOCK_SCHMID -DCLOCK_DCF7000 -DCLOCK_MEINBERG \
++ -DCLOCK_RAWDCF -DCLOCK_TRIMSV6
++
++ CFLAGS+= -I${.CURDIR}/../include ${PARSEFLAGS}
++
++ SRCS= parse.c parse_conf.c clk_meinberg.c clk_schmid.c clk_rawdcf.c \
++ clk_dcf7000.c clk_trimble.c
++
++ NOMAN=
++ NOPROFILE=
++ LIB= parse
++
++ install:
++
++ .include <bsd.lib.mk>
+diff -c 386BSD/src/contrib/xntpd/scripts/mkversion:1.1.1.1 386BSD/src/contrib/xntpd/scripts/mkversion:1.2
+*** 386BSD/src/contrib/xntpd/scripts/mkversion:1.1.1.1 Sun Apr 3 13:43:49 1994
+--- 386BSD/src/contrib/xntpd/scripts/mkversion Sun Apr 3 13:43:49 1994
+***************
+*** 9,20 ****
+ echo $RUN > .version
+
+ DATE="`date`"
+
+ if [ -r VERSION ]; then
+ VERSION=VERSION
+ else
+ VERSION=../VERSION
+! fi
+
+ if [ -f "$VERSION" ]; then
+ FLAGS="`egrep '^[0-9a-zA-Z_]+=' "$VERSION" | tr '\012' ';'` "
+--- 9,23 ----
+ echo $RUN > .version
+
+ DATE="`date`"
++ TOPDIR=`echo $0 | sed -e 's;mkversion;..;'`
+
+ if [ -r VERSION ]; then
+ VERSION=VERSION
++ else if [ -r ${TOPDIR}/VERSION ]; then
++ VERSION=${TOPDIR}/VERSION
+ else
+ VERSION=../VERSION
+! fi; fi
+
+ if [ -f "$VERSION" ]; then
+ FLAGS="`egrep '^[0-9a-zA-Z_]+=' "$VERSION" | tr '\012' ';'` "
+diff -c /dev/null 386BSD/src/contrib/xntpd/util/Makefile:1.2
+*** /dev/null Sun Apr 3 13:43:53 1994
+--- 386BSD/src/contrib/xntpd/util/Makefile Sun Apr 3 13:43:54 1994
+***************
+*** 0 ****
+--- 1,28 ----
++ #
++ # $Id: Makefile,v 1.2 1993/12/22 11:33:28 rgrimes Exp $
++ #
++
++ CFLAGS+= -I${.CURDIR}/../include
++
++ .if exists(${.CURDIR}/../lib/obj)
++ LDADD+= -L${.CURDIR}/../lib/obj
++ DPADD+= -L${.CURDIR}/../lib/obj/libntp.a
++ .else
++ LDADD+= -L${.CURDIR}/../lib
++ DPADD+= -L${.CURDIR}/../lib/libntp.a
++ .endif
++
++ LDADD+= -lntp
++
++ PROG= tickadj
++ MAN8= ${.CURDIR}/../doc/tickadj.8
++ CLEANFILES+= .version version.c
++
++ SRCS= tickadj.c version.c
++
++ beforedepend: version.c
++
++ version.c: ${.CURDIR}/../VERSION
++ ${.CURDIR}/../scripts/mkversion tickadj
++
++ .include <bsd.prog.mk>
+diff -c /dev/null 386BSD/src/contrib/xntpd/xntpd/Makefile:1.5
+*** /dev/null Sun Apr 3 13:43:56 1994
+--- 386BSD/src/contrib/xntpd/xntpd/Makefile Sun Apr 3 13:43:56 1994
+***************
+*** 0 ****
+--- 1,45 ----
++ #
++ # $Id: Makefile,v 1.5 1994/04/03 20:37:26 wollman Exp $
++ #
++
++ CFLAGS+= -I${.CURDIR}/../include
++
++ .if exists(${.CURDIR}/../lib/obj)
++ LDADD+= -L${.CURDIR}/../lib/obj
++ DPADD+= ${.CURDIR}/../lib/obj/libntp.a
++ .else
++ LDADD+= -L${.CURDIR}/../lib
++ DPADD+= ${.CURDIR}/../lib/libntp.a
++ .endif
++
++ .if exists(${.CURDIR}/../parse/obj)
++ LDADD+= -L${.CURDIR}/../parse/obj
++ DPADD+= ${.CURDIR}/../parse/obj/libparse.a
++ .else
++ LDADD+= -L${.CURDIR}/../parse
++ DPADD+= ${.CURDIR}/../parse/libparse.a
++ .endif
++
++ LDADD+= -lntp -lparse
++
++ PROG= xntpd
++ MAN8= ${.CURDIR}/../doc/xntpd.8
++ CLEANFILES+= .version version.c
++
++ SRCS= ntp_config.c ntp_control.c ntp_io.c ntp_leap.c \
++ ntp_loopfilter.c ntp_monitor.c ntp_peer.c ntp_proto.c \
++ ntp_refclock.c ntp_request.c ntp_restrict.c ntp_timer.c \
++ ntp_unixclock.c ntp_util.c ntpd.c refclock_chu.c \
++ refclock_conf.c refclock_local.c refclock_pst.c \
++ refclock_wwvb.c refclock_goes.c refclock_mx4200.c \
++ refclock_parse.c refclock_as2201.c refclock_omega.c \
++ refclock_tpro.c refclock_leitch.c refclock_irig.c \
++ refclock_msfees.c refclock_gpstm.c refclock_trak.c ntp_intres.c \
++ ntp_filegen.c version.c
++
++ beforedepend: version.c
++
++ version.c: ${.CURDIR}/../VERSION
++ ${.CURDIR}/../scripts/mkversion xntpd
++
++ .include <bsd.prog.mk>
+diff -c 386BSD/src/contrib/xntpd/xntpd/ntp_control.c:1.1.1.3 386BSD/src/contrib/xntpd/xntpd/ntp_control.c:1.3
+*** 386BSD/src/contrib/xntpd/xntpd/ntp_control.c:1.1.1.3 Sun Apr 3 13:43:59 1994
+--- 386BSD/src/contrib/xntpd/xntpd/ntp_control.c Sun Apr 3 13:44:00 1994
+***************
+*** 264,278 ****
+ /*
+ * System and processor definitions. These will change for the gizmo board.
+ */
+! #ifndef STR_SYSTEM
+! #define STR_SYSTEM "UNIX"
+! #endif
+! #ifndef STR_PROCESSOR
+! #define STR_PROCESSOR "unknown"
+! #endif
+!
+! static char str_system[] = STR_SYSTEM;
+! static char str_processor[] = STR_PROCESSOR;
+
+ /*
+ * Trap structures. We only allow a few of these, and send
+--- 264,271 ----
+ /*
+ * System and processor definitions. These will change for the gizmo board.
+ */
+! #include <sys/utsname.h>
+! static struct utsname utsname;
+
+ /*
+ * Trap structures. We only allow a few of these, and send
+***************
+*** 433,438 ****
+--- 426,433 ----
+ {
+ int i;
+
++ uname(&utsname);
++
+ ctl_clr_stats();
+
+ ctl_auth_keyid = 0;
+***************
+*** 1267,1278 ****
+ ctl_putuint(sys_var[CS_LEAPWARNING].text, (U_LONG)leap_warning);
+ break;
+ case CS_PROCESSOR:
+! ctl_putstr(sys_var[CS_PROCESSOR].text, str_processor,
+! sizeof(str_processor) - 1);
+ break;
+ case CS_SYSTEM:
+! ctl_putstr(sys_var[CS_SYSTEM].text, str_system,
+! sizeof(str_system) - 1);
+ break;
+ case CS_KEYID:
+ ctl_putuint(sys_var[CS_KEYID].text, (U_LONG)0);
+--- 1262,1273 ----
+ ctl_putuint(sys_var[CS_LEAPWARNING].text, (U_LONG)leap_warning);
+ break;
+ case CS_PROCESSOR:
+! ctl_putstr(sys_var[CS_PROCESSOR].text, utsname.machine,
+! strlen(utsname.machine));
+ break;
+ case CS_SYSTEM:
+! ctl_putstr(sys_var[CS_SYSTEM].text, utsname.sysname,
+! strlen(utsname.sysname));
+ break;
+ case CS_KEYID:
+ ctl_putuint(sys_var[CS_KEYID].text, (U_LONG)0);
+diff -c 386BSD/src/contrib/xntpd/xntpd/refclock_parse.c:1.1.1.3 386BSD/src/contrib/xntpd/xntpd/refclock_parse.c:1.3
+*** 386BSD/src/contrib/xntpd/xntpd/refclock_parse.c:1.1.1.3 Sun Apr 3 13:44:01 1994
+--- 386BSD/src/contrib/xntpd/xntpd/refclock_parse.c Sun Apr 3 13:44:01 1994
+***************
+*** 30,35 ****
+--- 30,37 ----
+ * PPS - supply loopfilter with PPS samples (if configured)
+ * PPSPPS - notify loopfilter of PPS file descriptor
+ *
++ * FREEBSD_CONRAD - Make very cheap "Conrad DCF77 RS-232" gadget work
++ * with FreeBSD.
+ * TTY defines:
+ * HAVE_BSD_TTYS - currently unsupported
+ * HAVE_SYSV_TTYS - will use termio.h
+***************
+*** 82,87 ****
+--- 84,92 ----
+ #include <time.h>
+
+ #include <sys/errno.h>
++ #ifdef FREEBSD_CONRAD
++ #include <sys/ioctl.h>
++ #endif
+ extern int errno;
+
+ #if !defined(STREAM) && !defined(HAVE_SYSV_TTYS) && !defined(HAVE_BSD_TTYS) && !defined(HAVE_TERMIOS)
+***************
+*** 440,446 ****
+--- 445,456 ----
+ #define RAWDCF_ROOTDELAY 0x00000364 /* 13 ms */
+ #define RAWDCF_FORMAT "RAW DCF77 Timecode"
+ #define RAWDCF_MAXUNSYNC (0) /* sorry - its a true receiver - no signal - no time */
++
++ #ifdef FREEBSD_CONRAD
++ #define RAWDCF_CFLAG (CS8|CREAD|CLOCAL)
++ #else
+ #define RAWDCF_CFLAG (B50|CS8|CREAD|CLOCAL)
++ #endif
+ #define RAWDCF_IFLAG 0
+ #define RAWDCF_OFLAG 0
+ #define RAWDCF_LFLAG 0
+***************
+*** 1482,1492 ****
+--- 1492,1513 ----
+ struct parseunit *parse = (struct parseunit *)rbufp->recv_srcclock;
+ register int count;
+ register char *s;
++ #ifdef FREEBSD_CONRAD
++ struct timeval foo;
++ #endif
++
+ /*
+ * eat all characters, parsing then and feeding complete samples
+ */
+ count = rbufp->recv_length;
+ s = rbufp->recv_buffer;
++ #ifdef FREEBSD_CONRAD
++ ioctl(parse->fd,TIOCTIMESTAMP,&foo);
++ TVTOTS(&foo, &rbufp->recv_time);
++ rbufp->recv_time.l_uf += TS_ROUNDBIT;
++ rbufp->recv_time.l_ui += JAN_1970;
++ rbufp->recv_time.l_uf &= TS_MASK;
++ #endif
+
+ while (count--)
+ {
+***************
+*** 2271,2277 ****
+ tm.c_iflag = clockinfo[type].cl_iflag;
+ tm.c_oflag = clockinfo[type].cl_oflag;
+ tm.c_lflag = clockinfo[type].cl_lflag;
+!
+ if (TTY_SETATTR(fd232, &tm) == -1)
+ {
+ syslog(LOG_ERR, "PARSE receiver #%d: parse_start: tcsetattr(%d, &tm): %m", unit, fd232);
+--- 2292,2301 ----
+ tm.c_iflag = clockinfo[type].cl_iflag;
+ tm.c_oflag = clockinfo[type].cl_oflag;
+ tm.c_lflag = clockinfo[type].cl_lflag;
+! #ifdef FREEBSD_CONRAD
+! tm.c_ispeed = 50;
+! tm.c_ospeed = 50;
+! #endif
+ if (TTY_SETATTR(fd232, &tm) == -1)
+ {
+ syslog(LOG_ERR, "PARSE receiver #%d: parse_start: tcsetattr(%d, &tm): %m", unit, fd232);
+***************
+*** 2314,2319 ****
+--- 2338,2358 ----
+ return 0; /* well, ok - special initialisation broke */
+ }
+
++ #ifdef FREEBSD_CONRAD
++ {
++ int i,j;
++ struct timeval tv;
++ ioctl(parse->fd,TIOCTIMESTAMP,&tv);
++ j = TIOCM_RTS;
++ i = ioctl(fd232, TIOCMBIC, &j);
++ if (i < 0) {
++ syslog(LOG_ERR,
++ "PARSE receiver #%d: lowrts_poll: failed to lower RTS: %m",
++ CL_UNIT(parse->unit));
++ }
++ }
++ #endif
++
+ strcpy(tmp_ctl.parseformat.parse_buffer, parse->parse_type->cl_format);
+ tmp_ctl.parseformat.parse_count = strlen(tmp_ctl.parseformat.parse_buffer);
+
+diff -c 386BSD/src/contrib/xntpd/xntpd/refclock_trak.c:1.1.1.1 386BSD/src/contrib/xntpd/xntpd/refclock_trak.c:1.2
+*** 386BSD/src/contrib/xntpd/xntpd/refclock_trak.c:1.1.1.1 Sun Apr 3 13:44:02 1994
+--- 386BSD/src/contrib/xntpd/xntpd/refclock_trak.c Sun Apr 3 13:44:02 1994
+***************
+*** 14,19 ****
+--- 14,21 ----
+ #include "ntp_refclock.h"
+ #include "ntp_unixtime.h"
+
++ static void gps_send();
++
+ #if defined(HAVE_BSD_TTYS)
+ #include <sgtty.h>
+ #endif /* HAVE_BSD_TTYS */
+***************
+*** 841,847 ****
+ /*
+ * usually trak_receive can get a timestamp every second
+ */
+! #ifndef TRAKPPS && TRAKCLK
+ gettstamp(&gps->lastrec);
+ #endif
+ gps->polls++;
+--- 843,849 ----
+ /*
+ * usually trak_receive can get a timestamp every second
+ */
+! #if !defined(TRAKPPS) && !defined(TRAKCLK)
+ gettstamp(&gps->lastrec);
+ #endif
+ gps->polls++;
+diff -c /dev/null 386BSD/src/contrib/xntpd/xntpdc/Makefile:1.2
+*** /dev/null Sun Apr 3 13:44:03 1994
+--- 386BSD/src/contrib/xntpd/xntpdc/Makefile Sun Apr 3 13:44:03 1994
+***************
+*** 0 ****
+--- 1,28 ----
++ #
++ # $Id: Makefile,v 1.2 1993/12/22 11:34:00 rgrimes Exp $
++ #
++
++ CFLAGS+= -I${.CURDIR}/../include
++
++ .if exists(${.CURDIR}/../lib/obj)
++ LDADD+= -L${.CURDIR}/../lib/obj
++ DPADD+= -L${.CURDIR}/../lib/obj/libntp.a
++ .else
++ LDADD+= -L${.CURDIR}/../lib
++ DPADD+= -L${.CURDIR}/../lib/libntp.a
++ .endif
++
++ LDADD+= -lntp
++
++ PROG= xntpdc
++ MAN8= ${.CURDIR}/../doc/xntpdc.8
++ CLEANFILES+= .version version.c
++
++ SRCS= ntpdc.c ntpdc_ops.c version.c
++
++ beforedepend: version.c
++
++ version.c: ${.CURDIR}/../VERSION
++ ${.CURDIR}/../scripts/mkversion xntpdc
++
++ .include <bsd.prog.mk>
+diff -c 386BSD/src/contrib/xntpd/xntpdc/ntpdc.c:1.1.1.3 386BSD/src/contrib/xntpd/xntpdc/ntpdc.c:1.2
+*** 386BSD/src/contrib/xntpd/xntpdc/ntpdc.c:1.1.1.3 Sun Apr 3 13:44:04 1994
+--- 386BSD/src/contrib/xntpd/xntpdc/ntpdc.c Sun Apr 3 13:44:04 1994
+***************
+*** 53,59 ****
+ static int getarg P((char *, int, arg_v *));
+ static int getnetnum P((char *, U_LONG *, char *));
+ static void help P((struct parse *, FILE *));
+! #if defined(sgi) || defined(SYS_BSDI)
+ static int helpsort P((const void *, const void *));
+ #else
+ static int helpsort P((char **, char **));
+--- 53,59 ----
+ static int getarg P((char *, int, arg_v *));
+ static int getnetnum P((char *, U_LONG *, char *));
+ static void help P((struct parse *, FILE *));
+! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
+ static int helpsort P((const void *, const void *));
+ #else
+ static int helpsort P((char **, char **));
+***************
+*** 1153,1159 ****
+ for (xcp = opcmds; xcp->keyword != 0; xcp++)
+ cmdsort[n++] = xcp->keyword;
+
+! #if defined(sgi) || defined(SYS_BSDI)
+ qsort((void *)cmdsort, n, sizeof(char *), helpsort);
+ #else
+ qsort((char *)cmdsort, n, sizeof(char *), helpsort);
+--- 1153,1159 ----
+ for (xcp = opcmds; xcp->keyword != 0; xcp++)
+ cmdsort[n++] = xcp->keyword;
+
+! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
+ qsort((void *)cmdsort, n, sizeof(char *), helpsort);
+ #else
+ qsort((char *)cmdsort, n, sizeof(char *), helpsort);
+***************
+*** 1199,1205 ****
+ * helpsort - do hostname qsort comparisons
+ */
+ static int
+! #if defined(sgi) || defined(SYS_BSDI)
+ helpsort(t1, t2)
+ const void *t1;
+ const void *t2;
+--- 1199,1205 ----
+ * helpsort - do hostname qsort comparisons
+ */
+ static int
+! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
+ helpsort(t1, t2)
+ const void *t1;
+ const void *t2;
+diff -c /dev/null 386BSD/src/contrib/xntpd/xntpres/Makefile:1.2
+*** /dev/null Sun Apr 3 13:44:05 1994
+--- 386BSD/src/contrib/xntpd/xntpres/Makefile Sun Apr 3 13:44:05 1994
+***************
+*** 0 ****
+--- 1,28 ----
++ #
++ # $Id: Makefile,v 1.2 1993/12/22 11:34:09 rgrimes Exp $
++ #
++
++ CFLAGS+= -I${.CURDIR}/../include
++
++ .if exists(${.CURDIR}/../lib/obj)
++ LDADD+= -L${.CURDIR}/../lib/obj
++ DPADD+= -L${.CURDIR}/../lib/obj/libntp.a
++ .else
++ LDADD+= -L${.CURDIR}/../lib
++ DPADD+= -L${.CURDIR}/../lib/libntp.a
++ .endif
++
++ LDADD+= -lntp
++
++ PROG= xntpres
++ NOMAN=
++ CLEANFILES+= .version version.c
++
++ SRCS= xntpres.c version.c
++
++ beforedepend: version.c
++
++ version.c: ${.CURDIR}/../VERSION
++ ${.CURDIR}/../scripts/mkversion xntpres
++
++ .include <bsd.prog.mk>
+
+-GAWollman
+
+--
+Garrett A. Wollman | Shashish is simple, it's discreet, it's brief. ...
+wollman@lcs.mit.edu | Shashish is the bonding of hearts in spite of distance.
+formerly known as | It is a bond more powerful than absence. We like people
+wollman@emba.uvm.edu | who like Shashish. - Claude McKenzie + Florent Vollant
+[no save]
+
diff --git a/usr.sbin/xntpd/patches/patch.36 b/usr.sbin/xntpd/patches/patch.36
new file mode 100644
index 0000000..b90df0d
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.36
@@ -0,0 +1,42 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa18708; 7 Apr 94 14:50 EDT
+Received: from mudshark.artisoft.com by louie.udel.edu id aa16541;
+ 7 Apr 94 14:46 EDT
+Received: by mudshark.artisoft.com id AA11987
+ (5.67b/IDA-1.5 for mills@udel.edu); Thu, 7 Apr 1994 11:46:32 -0700
+Date: Thu, 7 Apr 1994 11:46:32 -0700
+From: Matt Day <mday@artisoft.com>
+Message-Id: <199404071846.AA11987@mudshark.artisoft.com>
+To: mills@udel.edu
+Subject: XNTP bug on Linux
+
+adjtime() on Linux fails if you try to adjust more than 131072
+microseconds. This causes `ntpdate' to fail on Linux when the system
+clock is off by more than 131072 microseconds but less than
+NTPDATE_THRESHOLD (500 ms).
+
+Reducing NTPDATE_THRESHOLD to less than 131072 microseconds fixed the
+problem.
+
+From the comments in the code for Linux's adjtime(), it looks like this
+problem might go away someday.
+
+Thanks!
+
+*** ntpdate.h- Tue Aug 24 14:29:30 1993
+--- ntpdate.h Thu Apr 7 11:33:53 1994
+***************
+*** 54,60 ****
+--- 54,64 ----
+ * are close, or step the time if the times are farther apart. The
+ * following defines what is "close".
+ */
++ #ifdef linux
++ #define NTPDATE_THRESHOLD (FP_SECOND / 8) /* 1/8 second */
++ #else
+ #define NTPDATE_THRESHOLD (FP_SECOND >> 1) /* 1/2 second */
++ #endif
+
+ /*
+ * When doing adjustments, ntpdate actually overadjusts (currently
+
diff --git a/usr.sbin/xntpd/patches/patch.37 b/usr.sbin/xntpd/patches/patch.37
new file mode 100644
index 0000000..e17267f
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.37
@@ -0,0 +1,204 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa25219; 8 Apr 94 17:07 EDT
+Received: from ni.umd.edu by louie.udel.edu id aa03359; 8 Apr 94 16:58 EDT
+Received: by ni.umd.edu id AA18341
+ (5.65c/IDA-1.4.4 for ntp-list); Fri, 8 Apr 1994 16:55:09 -0400
+Received: from RUTGERS.EDU by ni.umd.edu with SMTP id AA18337
+ (5.65c/IDA-1.4.4 for <ntp@ni.umd.edu>); Fri, 8 Apr 1994 16:55:02 -0400
+Received: from unipress-link.rutgers.edu by rutgers.edu (5.59/SMI4.0/RU1.5/3.08)
+ id AA16356; Fri, 8 Apr 94 16:54:44 EDT
+Received: from huh.unipress.com by repo.unipress.com (4.1/SMI-4.1/UniPress022294.2)
+ id AA10459; Fri, 8 Apr 94 16:54:36 EDT via
+Message-Id: <9404082054.AA10459@repo.unipress.com>
+To: ntp@ni.umd.edu
+Subject: Re: xntp for univel/unix-ware on x86
+Date: Fri, 08 Apr 94 16:54:31 -0400
+From: Ray Schnitzler <ras@unipress.com>
+
+
+I am happy (but not particularly proud - it's more than a
+ little rough around the edges) to report a working
+ xntpd for Univel.
+
+It wound up being a hack on solaris, svr4, and (for the lack
+ of kernel tickadj) irix.
+
+util/tickadj does *not* work, even for controlling 'tick'.
+ I'm not sure what the right behavior should be.
+
+Most of the changes are signalled by SYS_UNIVEL, as
+ initiated by OS=univel.
+
+There are many additional loose ends, which are not terribly
+ important to me to clean up, since the univel is a
+ very low usage machine, here, and my because
+ employer expects me to be working on other things,
+ altogether.
+
+Nevertheless, it seems to work.
+
+Special thanks go to Denton Gentry for advice along the way.
+
+
+Enjoy.
+
+
+Here are the changes I made. First, the (new)
+ machines/univel file, and then the (rest of the)
+ context diffs:
+
+*** /dev/null Fri Apr 8 16:49:24 1994
+--- machines/univel Fri Apr 8 12:38:20 1994
+***************
+*** 0 ****
+--- 1,10 ----
++ SHELL= /bin/sh
++ RANLIB= ls # ar does the work of ranlib under System V
++ DEFS= -DSYS_UNIVEL -DSTREAMS_TLI -DHAVE_TERMIOS
++ AUTHDEFS= -DDES -DMD5
++ CLOCKDEFS=
++ DAEMONLIBS= -lnsl -lsocket -lelf
++ RESLIB= -lnsl -lsocket -lelf
++ INSTALL=$(TOP)scripts/install.sh
++ SHELL= /bin/sh
++ RANLIB= ls # ar does the work of ranlib under System V
+*** authstuff/authspeed.c.orig Thu Jan 27 09:03:12 1994
+--- authstuff/authspeed.c Fri Apr 8 14:19:35 1994
+***************
+*** 2,8 ****
+ * authspeed - figure out how LONG it takes to do an NTP encryption
+ */
+
+! #if defined(SYS_HPUX) || defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SOLARIS) || defined(SYS_SVR4) || defined(SYS_PTX)
+ #define FAKE_RUSAGE
+ #endif
+
+--- 2,8 ----
+ * authspeed - figure out how LONG it takes to do an NTP encryption
+ */
+
+! #if defined(SYS_HPUX) || defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SOLARIS) || defined(SYS_SVR4) || defined(SYS_PTX) || defined(SYS_UNIVEL)
+ #define FAKE_RUSAGE
+ #endif
+*** include/ntp_if.h.orig Mon Nov 15 16:21:29 1993
+--- include/ntp_if.h Fri Apr 8 14:51:49 1994
+***************
+*** 16,21 ****
+--- 16,25 ----
+ #include <sys/sockio.h>
+ #endif
+
++ #if defined(SYS_UNIVEL)
++ #include <sys/sockio.h>
++ #endif
++
+ #if defined(SYS_PTX) || defined(SYS_SINIXM)
+ #include <sys/stream.h>
+ #include <sys/stropts.h>
+*** include/ntp_machine.h.orig Mon Mar 14 02:47:02 1994
+--- include/ntp_machine.h Fri Apr 8 14:45:42 1994
+***************
+*** 526,531 ****
+--- 526,563 ----
+ #endif
+
+ /*
++ * Univel SVR4 on intel x86 processor
++ */
++ #if defined(SYS_UNIVEL)
++ /* #define _POSIX_SOURCE */
++ #define NTP_POSIX_SOURCE
++ #define HAVE_ATT_NICE
++ #define HAVE_READKMEM
++ #define USE_PROTOTYPES
++ #undef HAVE_ATT_SETPGRP
++ #define UDP_WILDCARD_DELIVERY
++ #define HAVE_SIGNALED_IO
++ #define USE_TTY_SIGPOLL
++ #define USE_UDP_SIGPOLL
++ #define STREAM
++ #define STREAMS
++ #ifndef STREAMS_TLI
++ /*#define STREAMS_TLI*/
++ #endif
++ /* #define USE_STREAMS_DEVICE_FOR_IF_CONFIG */
++ #undef STEP_SLEW /* TWO step */
++ #define LOCK_PROCESS
++ #undef SYSV_TIMEOFDAY
++ #define SIZE_RETURNED_IN_BUFFER
++ #define RETSIGTYPE void
++ #include <sys/types.h>
++ #include <netinet/in_systm.h>
++ #ifndef STR_SYSTEM
++ #define STR_SYSTEM "UNIX/Univel"
++ #endif
++ #endif
++
++ /*
+ * DomainOS
+ */
+ #if defined(SYS_DOMAINOS)
+*** xntpd/ntp_unixclock.c.orig Thu Feb 3 00:20:20 1994
+--- xntpd/ntp_unixclock.c Fri Apr 8 14:40:55 1994
+***************
+*** 255,260 ****
+--- 255,277 ----
+ /* Define the following to be what the tick and tickadj variables are
+ * called in your kernel.
+ */
++ #if defined(SYS_UNIVEL)
++ /*
++ * clock_parms - return the local clock tickadj and tick parameters
++ *
++ * The values set here were determined experimentally on a 486 system
++ * I'm not confident in them. - RAS
++ *
++ */
++ static void
++ clock_parms(tickadj, tick)
++ U_LONG *tickadj;
++ U_LONG *tick;
++ {
++ *tick = 10000; /* microseconds */
++ *tickadj = 80; /* microseconds */
++ }
++ #else /* SYS_UNIVEL */
+
+ #if defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SYS_SVR4) || defined(SYS_PTX)
+ #define K_TICKADJ_NAME "tickadj"
+***************
+*** 421,427 ****
+ }
+ #endif /* sgi */
+
+-
+ #ifdef NOKMEM
+
+ #ifndef HZ
+--- 438,443 ----
+***************
+*** 571,573 ****
+--- 587,590 ----
+ *tick = (U_LONG)txc.tick;
+ }
+ #endif /* SYS_LINUX */
++ #endif /* SYS_UNIVEL */
+*** xntpd/ntpd.c.orig Wed Feb 16 22:09:35 1994
+--- xntpd/ntpd.c Fri Apr 8 16:35:57 1994
+***************
+*** 14,20 ****
+ #include <sys/rtprio.h>
+ #endif
+
+! #if defined(SYS_SVR4)
+ #include <termios.h>
+ #endif
+
+--- 14,20 ----
+ #include <sys/rtprio.h>
+ #endif
+
+! #if defined(SYS_SVR4) || defined (SYS_UNIVEL)
+ #include <termios.h>
+ #endif
+
diff --git a/usr.sbin/xntpd/patches/patch.38 b/usr.sbin/xntpd/patches/patch.38
new file mode 100644
index 0000000..dddba69
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.38
@@ -0,0 +1,226 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa09565; 11 Apr 94 13:04 EDT
+Received: from ni.umd.edu by louie.udel.edu id aa10661; 11 Apr 94 12:57 EDT
+Received: by ni.umd.edu id AA00787
+ (5.65c/IDA-1.4.4 for ntp-list); Mon, 11 Apr 1994 12:50:20 -0400
+Received: from RUTGERS.EDU by ni.umd.edu with SMTP id AA00783
+ (5.65c/IDA-1.4.4 for <ntp@ni.umd.edu>); Mon, 11 Apr 1994 12:50:13 -0400
+Received: from unipress-link.rutgers.edu by rutgers.edu (5.59/SMI4.0/RU1.5/3.08)
+ id AA26905; Mon, 11 Apr 94 12:49:43 EDT
+Received: from huh.unipress.com by repo.unipress.com (4.1/SMI-4.1/UniPress022294.2)
+ id AA03031; Mon, 11 Apr 94 12:49:27 EDT via
+Message-Id: <9404111649.AA03031@repo.unipress.com>
+To: ntp@ni.umd.edu
+Subject: Re: xntp for univel/unix-ware on x86
+Date: Mon, 11 Apr 94 12:49:25 -0400
+From: Ray Schnitzler <ras@unipress.com>
+
+
+As seems usual, every patch is followed by a re-patch. This
+ is a (modified) re-posting of patches to make xntp
+ work on unixware svr4. It now uses
+ machines/unixware1 and SYS_UNIXWARE1 (instead of
+ univel, as suggested by J J Farrell), and now
+ includes some RELNOTES and COPYRIGHT text (as
+ suggested by Dave)
+
+It is still rough, but it still works. The tickadj utility
+ still does *not* work, even for controlling 'tick'.
+ I'm not sure what the right behavior should be since
+ there is no 'tickadj' kernel var.
+
+In addition to the credits I mentioned above, special thanks
+ go to Denton Gentry for advice along the way.
+
+
+Enjoy.
+
+Ray Schnitzler
+UniPress Software, Inc.
+------------------------------------------------------------
+Here are the changes I made. First, the (new)
+ machines/univel file, and then the (rest of the)
+ context diffs:
+
+*** machines/unixware1.3.3p Fri Apr 8 16:48:35 1994
+--- machines/unixware1 Mon Apr 11 11:08:10 1994
+***************
+*** 0 ****
+--- 1,10 ----
++ SHELL= /bin/sh
++ RANLIB= ls # ar does the work of ranlib under System V
++ DEFS= -DSYS_UNIXWARE1 -DSTREAMS_TLI -DHAVE_TERMIOS -DCONFIG_FILE=\\"/usr/local/etc/ntp.conf\\"
++ AUTHDEFS= -DDES -DMD5
++ CLOCKDEFS=
++ DAEMONLIBS= -lnsl -lsocket -lelf
++ RESLIB= -lnsl -lsocket -lelf
++ INSTALL=$(TOP)scripts/install.sh
++ SHELL= /bin/sh
++ RANLIB= ls # ar does the work of ranlib under System V
+*** COPYRIGHT.3.3p Thu Feb 3 00:20:07 1994
+--- COPYRIGHT Mon Apr 11 10:47:24 1994
+***************
+*** 55,58 ****
+--- 55,59 ----
+ * Torsten Duwe <duwe@immd4.informatik.uni-erlangen.de> (Linux Port)
+ * Paul A Vixie <vixie@vix.com> (TrueTime GPS driver)
+ * Jim Jagielski <jim@jagubox.gsfc.nasa.gov> (A/UX port)
++ * Ray Schnitzler <schnitz@unipress.com> (First pass at a Unixware1 port.)
+ */
+*** RELNOTES.3.3p Thu Jan 27 09:33:09 1994
+--- RELNOTES Mon Apr 11 11:14:35 1994
+***************
+*** 140,145 ****
+--- 140,146 ----
+ PC BSD/386 1.0 gcc LOCAL_CLOCK possibly see "build problems"
+ PC Linux (pl14) gcc LOCAL_CLOCK (dw 93/10/30)
+ PC Dell SVR4 v2.2 gcc ? (tl 93/12/30)
++ PC Unixware1/SVR4 cc no tickadj, ? (ras 93/04/11)
+ NCR3445 NCR SVR4 cc LOCAL_CLOCK (tm 93/11/29)
+
+ pb: Piete Brooks
+***************
+*** 149,154 ****
+--- 150,156 ----
+ tl: Tony Lill <ajlill@tlill.hookup.net>
+ tm: Tom Moore <Tom.Moore@DaytonOH.NCR.COM>
+ jmj: Jim Jagielski <jim@jagubox.gsfc.nasa.gov>
++ ras: Ray Schnitzler <schnitz@unipress.com>
+
+ Build Problems (and workaround):
+
+*** authstuff/authspeed.c.3.3p Thu Jan 27 09:03:12 1994
+--- authstuff/authspeed.c Mon Apr 11 10:29:47 1994
+***************
+*** 2,8 ****
+ * authspeed - figure out how LONG it takes to do an NTP encryption
+ */
+
+! #if defined(SYS_HPUX) || defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SOLARIS) || defined(SYS_SVR4) || defined(SYS_PTX)
+ #define FAKE_RUSAGE
+ #endif
+
+--- 2,8 ----
+ * authspeed - figure out how LONG it takes to do an NTP encryption
+ */
+
+! #if defined(SYS_HPUX) || defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SOLARIS) || defined(SYS_SVR4) || defined(SYS_PTX) || defined(SYS_UNIXWARE1)
+ #define FAKE_RUSAGE
+ #endif
+
+*** include/ntp_if.h.3.3p Mon Nov 15 16:21:29 1993
+--- include/ntp_if.h Mon Apr 11 10:30:21 1994
+***************
+*** 16,21 ****
+--- 16,25 ----
+ #include <sys/sockio.h>
+ #endif
+
++ #if defined(SYS_UNIXWARE1)
++ #include <sys/sockio.h>
++ #endif
++
+ #if defined(SYS_PTX) || defined(SYS_SINIXM)
+ #include <sys/stream.h>
+ #include <sys/stropts.h>
+*** include/ntp_machine.h.3.3p Mon Mar 14 02:47:02 1994
+--- include/ntp_machine.h Mon Apr 11 10:31:11 1994
+***************
+*** 526,531 ****
+--- 526,565 ----
+ #endif
+
+ /*
++ * (Univel/Novell) Unixware1 SVR4 on intel x86 processor
++ */
++ #if defined(SYS_UNIXWARE1)
++ /* #define _POSIX_SOURCE */
++ #undef HAVE_ATT_SETPGRP
++ #define USE_PROTOTYPES
++ #define NTP_POSIX_SOURCE
++ #define HAVE_ATT_NICE
++ #define HAVE_READKMEM
++ #define USE_TTY_SIGPOLL
++ #define USE_UDP_SIGPOLL
++ #define UDP_WILDCARD_DELIVERY
++ #undef HAVE_SIGNALED_IO
++ #define STREAM
++ #define STREAMS
++ #ifndef STREAMS_TLI
++ /*#define STREAMS_TLI*/
++ #endif
++ /* #define USE_STREAMS_DEVICE_FOR_IF_CONFIG */
++ #undef STEP_SLEW /* TWO step */
++ #define LOCK_PROCESS
++ #define NO_SIGNED_CHAR_DECL
++ #undef SYSV_TIMEOFDAY
++ #define SIZE_RETURNED_IN_BUFFER
++ #define RETSIGTYPE void
++ #include <sys/sockio.h>
++ #include <sys/types.h>
++ #include <netinet/in_systm.h>
++ #ifndef STR_SYSTEM
++ #define STR_SYSTEM "UNIX/Unixware1"
++ #endif
++ #endif
++
++ /*
+ * DomainOS
+ */
+ #if defined(SYS_DOMAINOS)
+*** xntpd/ntp_unixclock.c.3.3p Thu Feb 3 00:20:20 1994
+--- xntpd/ntp_unixclock.c Mon Apr 11 10:33:23 1994
+***************
+*** 255,260 ****
+--- 255,277 ----
+ /* Define the following to be what the tick and tickadj variables are
+ * called in your kernel.
+ */
++ #if defined(SYS_UNIXWARE1)
++ /*
++ * clock_parms - return the local clock tickadj and tick parameters
++ *
++ * The values set here were determined experimentally on a 486 system
++ * I'm not confident in them. - RAS
++ *
++ */
++ static void
++ clock_parms(tickadj, tick)
++ U_LONG *tickadj;
++ U_LONG *tick;
++ {
++ *tick = 10000; /* microseconds */
++ *tickadj = 80; /* microseconds */
++ }
++ #else /* SYS_UNIXWARE1 */
+
+ #if defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SYS_SVR4) || defined(SYS_PTX)
+ #define K_TICKADJ_NAME "tickadj"
+***************
+*** 571,573 ****
+--- 587,590 ----
+ *tick = (U_LONG)txc.tick;
+ }
+ #endif /* SYS_LINUX */
++ #endif /* SYS_UNIXWARE1 */
+*** xntpd/ntpd.c.3.3p Wed Feb 16 22:09:35 1994
+--- xntpd/ntpd.c Mon Apr 11 10:33:58 1994
+***************
+*** 14,20 ****
+ #include <sys/rtprio.h>
+ #endif
+
+! #if defined(SYS_SVR4)
+ #include <termios.h>
+ #endif
+
+--- 14,21 ----
+ #include <sys/rtprio.h>
+ #endif
+
+! /* Shouldn't this test for HAVE_TERMIOS - RAS */
+! #if defined(SYS_SVR4) || defined (SYS_UNIXWARE1)
+ #include <termios.h>
+ #endif
+
+
diff --git a/usr.sbin/xntpd/patches/patch.39 b/usr.sbin/xntpd/patches/patch.39
new file mode 100644
index 0000000..12e09fe
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.39
@@ -0,0 +1,78 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa21593; 13 Apr 94 8:23 EDT
+Received: from jagubox.gsfc.nasa.gov by louie.udel.edu id aa20245;
+ 13 Apr 94 8:15 EDT
+Received: by jagubox.gsfc.nasa.gov (Smail3.1.28.1 #2)
+ id m0pr3rH-0005s0C; Wed, 13 Apr 94 08:15 EDT
+Message-Id: <m0pr3rH-0005s0C@jagubox.gsfc.nasa.gov>
+From: Jim Jagielski <jim@jagubox.gsfc.nasa.gov>
+Subject: Minor change for ntp_loopfilter (and loop.c) in 3.3q
+To: Mills@udel.edu
+Date: Wed, 13 Apr 1994 08:15:55 -0400 (EDT)
+Reply-To: Jim Jagielski <jim@jagubox.gsfc.nasa.gov>
+In-Reply-To: <9308051324.aa24396@huey.udel.edu> from "Mills@udel.edu" at Aug 5, 93 01:24:24 pm
+X-Mailer: ELM [version 2.4 PL23]
+Content-Type: text
+Content-Length: 1738
+
+One of the changes between 3.3p and 3.3q was the format change of the syslog
+message when the clock is reset when xntpd sees a "large" offset. This change
+is nice, but it would be "better" is the notice also made mention of whether
+the reset was a step or slew (as defined by SLEWALWAYS).
+
+This patch adds that:
+*** xntpd/Oloop.c Wed Apr 13 08:05:09 1994
+--- xntpd/loop.c Wed Apr 13 08:06:32 1994
+***************
+*** 458,464 ****
+ lfptoa(fp_offset, 6));
+ return (0);
+ }
+! syslog(LOG_NOTICE, "clock reset %s\n",
+ lfptoa(fp_offset, 6));
+ step_systime(fp_offset);
+ clock_adjust = 0;
+--- 458,469 ----
+ lfptoa(fp_offset, 6));
+ return (0);
+ }
+! syslog(LOG_NOTICE, "clock reset (%s) %s\n",
+! #ifdef SLEWALWAYS
+! "slew",
+! #else
+! "step",
+! #endif
+ lfptoa(fp_offset, 6));
+ step_systime(fp_offset);
+ clock_adjust = 0;
+*** xntpd/Ontp_loopfilter.c Wed Apr 13 08:05:23 1994
+--- xntpd/ntp_loopfilter.c Wed Apr 13 08:07:03 1994
+***************
+*** 458,464 ****
+ lfptoa(fp_offset, 6));
+ return (0);
+ }
+! syslog(LOG_NOTICE, "clock reset %s\n",
+ lfptoa(fp_offset, 6));
+ step_systime(fp_offset);
+ clock_adjust = 0;
+--- 458,469 ----
+ lfptoa(fp_offset, 6));
+ return (0);
+ }
+! syslog(LOG_NOTICE, "clock reset (%s) %s\n",
+! #ifdef SLEWALWAYS
+! "slew",
+! #else
+! "step",
+! #endif
+ lfptoa(fp_offset, 6));
+ step_systime(fp_offset);
+ clock_adjust = 0;
+--
+#include <std/disclaimer.h>
+ Jim Jagielski | "Is this something you can share with
+ jim@jagubox.gsfc.nasa.gov | the rest of us Amazing Larry!!??"
+ NASA/GSFC, Code 734.4 | Pee Wee
+ Greenbelt, MD 20771 |
+
diff --git a/usr.sbin/xntpd/patches/patch.4 b/usr.sbin/xntpd/patches/patch.4
new file mode 100644
index 0000000..ef06ee9
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.4
@@ -0,0 +1,4719 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa12898; 26 Jan 94 21:06 EST
+Received: from sony.com by louie.udel.edu id aa05924; 26 Jan 94 21:01 EST
+Received: by sony.com id AA18168; Wed, 26 Jan 94 18:00:44 -0800
+X-Btw: sony.com is also sonygate.sony.com
+Received: by mail1.gw.in.sel.sony.com id AA25072; Wed, 26 Jan 94 18:00:43 -0800
+Received: by mail1.sjc.in.sel.sony.com id AA13634; Wed, 26 Jan 94 18:00:41 -0800
+Received: by morality.sjc.hw.sony.com; id AA23624; Wed, 26 Jan 94 18:00:40 -0800
+Date: Wed, 26 Jan 94 18:00:40 -0800
+From: Paul Vixie <Paul_Vixie@corpmis.sjc.hw.sony.com>
+Message-Id: <9401270200.AA23624@morality.sjc.hw.sony.com>
+To: mills@udel.edu
+Subject: diffs against 3.3c (26-jan 11:36)
+Cc: paul@vix.com
+
+These have been tested on BSD/386 1.0 and on HP-UX 8.??. I have more to do,
+but this is the last I'm going to do before 3.3d (or whatever) comes out with
+the other patches you're expecting. I need to have a day with just me and NTP
+and everybody else with their mits outa the code while I finish the portability
+stuff.
+
+*** /tmp/RCSA023397 Wed Jan 26 17:56:22 1994
+--- adjtime/adjtimed.c Wed Jan 26 16:33:27 1994
+***************
+*** 42,47 ****
+
+ double atof();
+! extern int optind;
+! extern char *optarg;
+
+ int InitClockRate();
+--- 42,47 ----
+
+ double atof();
+! extern int ntp_optind;
+! extern char *ntp_optarg;
+
+ int InitClockRate();
+***************
+*** 84,88 ****
+ openlog("adjtimed", LOG_PID, LOG_LOCAL6);
+
+! while ((ch = getopt(argc, argv, "hkrvdfp:")) != EOF) {
+ switch (ch) {
+ case 'k':
+--- 84,88 ----
+ openlog("adjtimed", LOG_PID, LOG_LOCAL6);
+
+! while ((ch = ntp_getopt(argc, argv, "hkrvdfp:")) != EOF) {
+ switch (ch) {
+ case 'k':
+***************
+*** 114,118 ****
+
+ case 'p':
+! if ((RATE = atof(optarg)) <= 0.0 || RATE >= 100.0) {
+ fputs("adjtimed: percentage must be between 0.0 and 100.0\n", stderr);
+ exit(1);
+--- 114,118 ----
+
+ case 'p':
+! if ((RATE = atof(ntp_optarg)) <= 0.0 || RATE >= 100.0) {
+ fputs("adjtimed: percentage must be between 0.0 and 100.0\n", stderr);
+ exit(1);
+*** /tmp/RCSA023401 Wed Jan 26 17:56:23 1994
+--- authstuff/authspeed.c Wed Jan 26 16:33:28 1994
+***************
+*** 66,75 ****
+ int i;
+ int errflg = 0;
+! extern int optind;
+! extern char *optarg;
+
+ progname = argv[0];
+ loops = DEFLOOPS;
+! while ((c = getopt_l(argc, argv, "cdmn:")) != EOF)
+ switch (c) {
+ case 'c':
+--- 66,75 ----
+ int i;
+ int errflg = 0;
+! extern int ntp_optind;
+! extern char *ntp_optarg;
+
+ progname = argv[0];
+ loops = DEFLOOPS;
+! while ((c = ntp_getopt(argc, argv, "cdmn:")) != EOF)
+ switch (c) {
+ case 'c':
+***************
+*** 83,91 ****
+ break;
+ case 'n':
+! loops = atoi(optarg);
+ if (loops <= 0) {
+ (void) fprintf(stderr,
+ "%s: %s is unlikely to be a useful number of loops\n",
+! progname, optarg);
+ errflg++;
+ }
+--- 83,91 ----
+ break;
+ case 'n':
+! loops = atoi(ntp_optarg);
+ if (loops <= 0) {
+ (void) fprintf(stderr,
+ "%s: %s is unlikely to be a useful number of loops\n",
+! progname, ntp_optarg);
+ errflg++;
+ }
+***************
+*** 95,99 ****
+ break;
+ }
+! if (errflg || optind == argc) {
+ (void) fprintf(stderr,
+ "usage: %s [-d] [-n loops] [ -c ] auth.samplekeys\n",
+--- 95,99 ----
+ break;
+ }
+! if (errflg || ntp_optind == argc) {
+ (void) fprintf(stderr,
+ "usage: %s [-d] [-n loops] [ -c ] auth.samplekeys\n",
+***************
+*** 109,113 ****
+
+ init_auth();
+! authreadkeys(argv[optind]);
+ for (i = 0; i < 16; i++) {
+ if (!auth_havekey(i + domd5)) {
+--- 109,113 ----
+
+ init_auth();
+! authreadkeys(argv[ntp_optind]);
+ for (i = 0; i < 16; i++) {
+ if (!auth_havekey(i + domd5)) {
+*** /tmp/RCSA023401 Wed Jan 26 17:56:23 1994
+--- authstuff/keyparity.c Wed Jan 26 16:33:28 1994
+***************
+*** 50,58 ****
+ int keytype;
+ U_LONG key[2];
+! extern int optind;
+! extern char *optarg;
+
+ progname = argv[0];
+! while ((c = getopt_l(argc, argv, "adno:s")) != EOF)
+ switch (c) {
+ case 'a':
+--- 50,58 ----
+ int keytype;
+ U_LONG key[2];
+! extern int ntp_optind;
+! extern char *ntp_optarg;
+
+ progname = argv[0];
+! while ((c = ntp_getopt(argc, argv, "adno:s")) != EOF)
+ switch (c) {
+ case 'a':
+***************
+*** 69,76 ****
+ break;
+ case 'o':
+! if (*optarg == 'n') {
+ ntpoutflag = 1;
+ gotoopt = 1;
+! } else if (*optarg == 's') {
+ ntpoutflag = 0;
+ gotoopt = 1;
+--- 69,76 ----
+ break;
+ case 'o':
+! if (*ntp_optarg == 'n') {
+ ntpoutflag = 1;
+ gotoopt = 1;
+! } else if (*ntp_optarg == 's') {
+ ntpoutflag = 0;
+ gotoopt = 1;
+***************
+*** 86,90 ****
+ break;
+ }
+! if (errflg || optind == argc) {
+ (void) fprintf(stderr,
+ "usage: %s -n|-s [-a] [-o n|s] key [...]\n",
+--- 86,90 ----
+ break;
+ }
+! if (errflg || ntp_optind == argc) {
+ (void) fprintf(stderr,
+ "usage: %s -n|-s [-a] [-o n|s] key [...]\n",
+***************
+*** 119,127 ****
+ keytype = KEY_TYPE_STD;
+
+! for (; optind < argc; optind++) {
+! if (!decodekey(keytype, argv[optind], key)) {
+ (void) fprintf(stderr,
+ "%s: format of key %s invalid\n",
+! progname, argv[optind]);
+ exit(1);
+ }
+--- 119,127 ----
+ keytype = KEY_TYPE_STD;
+
+! for (; ntp_optind < argc; ntp_optind++) {
+! if (!decodekey(keytype, argv[ntp_optind], key)) {
+ (void) fprintf(stderr,
+ "%s: format of key %s invalid\n",
+! progname, argv[ntp_optind]);
+ exit(1);
+ }
+***************
+*** 243,247 ****
+ * Make up key from ascii representation
+ */
+! bzero(keybytes, sizeof(keybytes));
+ for (i = 0; i < 8 && i < len; i++)
+ keybytes[i] = *cp++ << 1;
+--- 243,247 ----
+ * Make up key from ascii representation
+ */
+! memset(keybytes, 0, sizeof(keybytes));
+ for (i = 0; i < 8 && i < len; i++)
+ keybytes[i] = *cp++ << 1;
+*** /tmp/RCSA023401 Wed Jan 26 17:56:23 1994
+--- authstuff/makeIPFP.c Wed Jan 26 16:33:28 1994
+***************
+*** 29,37 ****
+ int c;
+ int errflg = 0;
+! extern int optind;
+! extern char *optarg;
+
+ progname = argv[0];
+! while ((c = getopt_l(argc, argv, "d")) != EOF)
+ switch (c) {
+ case 'd':
+--- 29,37 ----
+ int c;
+ int errflg = 0;
+! extern int ntp_optind;
+! extern char *ntp_optarg;
+
+ progname = argv[0];
+! while ((c = ntp_getopt(argc, argv, "d")) != EOF)
+ switch (c) {
+ case 'd':
+***************
+*** 184,188 ****
+ int octbits;
+
+! bzero((char *)bits, sizeof bits);
+
+ /*
+--- 184,188 ----
+ int octbits;
+
+! memset((char *)bits, 0, sizeof bits);
+
+ /*
+*** /tmp/RCSA023401 Wed Jan 26 17:56:23 1994
+--- authstuff/makePC1.c Wed Jan 26 16:33:28 1994
+***************
+*** 26,34 ****
+ int c;
+ int errflg = 0;
+! extern int optind;
+! extern char *optarg;
+
+ progname = argv[0];
+! while ((c = getopt_l(argc, argv, "d")) != EOF)
+ switch (c) {
+ case 'd':
+--- 26,34 ----
+ int c;
+ int errflg = 0;
+! extern int ntp_optind;
+! extern char *ntp_optarg;
+
+ progname = argv[0];
+! while ((c = ntp_getopt(argc, argv, "d")) != EOF)
+ switch (c) {
+ case 'd':
+***************
+*** 83,88 ****
+ u_char d[28];
+
+! bzero((char *)c, sizeof c);
+! bzero((char *)d, sizeof d);
+
+ for (i = 0; i < 28; i++) {
+--- 83,88 ----
+ u_char d[28];
+
+! memset((char *)c, 0, sizeof c);
+! memset((char *)d, 0, sizeof d);
+
+ for (i = 0; i < 28; i++) {
+***************
+*** 141,145 ****
+ u_char bits[64];
+
+! bzero((char *)bits, sizeof bits);
+
+ printf("static U_LONG PC1_CL[8] = {");
+--- 141,145 ----
+ u_char bits[64];
+
+! memset((char *)bits, 0, sizeof bits);
+
+ printf("static U_LONG PC1_CL[8] = {");
+*** /tmp/RCSA023401 Wed Jan 26 17:56:24 1994
+--- authstuff/makePC2.c Wed Jan 26 16:33:28 1994
+***************
+*** 27,35 ****
+ int c;
+ int errflg = 0;
+! extern int optind;
+! extern char *optarg;
+
+ progname = argv[0];
+! while ((c = getopt_l(argc, argv, "d")) != EOF)
+ switch (c) {
+ case 'd':
+--- 27,35 ----
+ int c;
+ int errflg = 0;
+! extern int ntp_optind;
+! extern char *ntp_optarg;
+
+ progname = argv[0];
+! while ((c = ntp_getopt(argc, argv, "d")) != EOF)
+ switch (c) {
+ case 'd':
+***************
+*** 88,92 ****
+ u_char res[24];
+
+! bzero((char *)res, sizeof res);
+
+ for (i = 0; i < 24; i++) {
+--- 88,92 ----
+ u_char res[24];
+
+! memset((char *)res, 0, sizeof res);
+
+ for (i = 0; i < 24; i++) {
+***************
+*** 118,122 ****
+ u_char res[24];
+
+! bzero((char *)res, sizeof res);
+
+ for (i = 0; i < 24; i++) {
+--- 118,122 ----
+ u_char res[24];
+
+! memset((char *)res, 0, sizeof res);
+
+ for (i = 0; i < 24; i++) {
+***************
+*** 169,173 ****
+ u_char bits[28];
+
+! bzero((char *)bits, sizeof bits);
+
+ printf("static U_LONG PC2_C[4][64] = {");
+--- 169,173 ----
+ u_char bits[28];
+
+! memset((char *)bits, 0, sizeof bits);
+
+ printf("static U_LONG PC2_C[4][64] = {");
+*** /tmp/RCSA023401 Wed Jan 26 17:56:24 1994
+--- authstuff/makeSP.c Wed Jan 26 16:33:28 1994
+***************
+*** 26,34 ****
+ int c;
+ int errflg = 0;
+! extern int optind;
+! extern char *optarg;
+
+ progname = argv[0];
+! while ((c = getopt_l(argc, argv, "d")) != EOF)
+ switch (c) {
+ case 'd':
+--- 26,34 ----
+ int c;
+ int errflg = 0;
+! extern int ntp_optind;
+! extern char *ntp_optarg;
+
+ progname = argv[0];
+! while ((c = ntp_getopt(argc, argv, "d")) != EOF)
+ switch (c) {
+ case 'd':
+***************
+*** 166,170 ****
+ int sixbits;
+
+! bzero((char *)bits, sizeof bits);
+ printf("static U_LONG SP[8][64] = {");
+ for (selno = 0; selno < 8; selno++) {
+--- 166,170 ----
+ int sixbits;
+
+! memset((char *)bits, 0, sizeof bits);
+ printf("static U_LONG SP[8][64] = {");
+ for (selno = 0; selno < 8; selno++) {
+*** /tmp/RCSA023401 Wed Jan 26 17:56:24 1994
+--- authstuff/mkrandkeys.c Wed Jan 26 16:33:28 1994
+***************
+*** 35,40 ****
+ U_LONG tmp;
+ char *passwd;
+! extern int optind;
+! extern char *optarg;
+ extern char *getpass();
+
+--- 35,40 ----
+ U_LONG tmp;
+ char *passwd;
+! extern int ntp_optind;
+! extern char *ntp_optarg;
+ extern char *getpass();
+
+***************
+*** 42,46 ****
+ progname = argv[0];
+ passwd = NULL;
+! while ((c = getopt_l(argc, argv, "dnp:s")) != EOF)
+ switch (c) {
+ case 'd':
+--- 42,46 ----
+ progname = argv[0];
+ passwd = NULL;
+! while ((c = ntp_getopt(argc, argv, "dnp:s")) != EOF)
+ switch (c) {
+ case 'd':
+***************
+*** 51,55 ****
+ break;
+ case 'p':
+! passwd = optarg;
+ break;
+ case 's':
+--- 51,55 ----
+ break;
+ case 'p':
+! passwd = ntp_optarg;
+ break;
+ case 's':
+***************
+*** 62,70 ****
+
+ numkeys = 0;
+! for (; !errflg && optind < argc; optind++) {
+! c = atoi(argv[optind]);
+ if (c <= 0 || c > 15) {
+ (void) fprintf(stderr, "%s: invalid key number `%s'\n",
+! progname, argv[optind]);
+ exit(2);
+ }
+--- 62,70 ----
+
+ numkeys = 0;
+! for (; !errflg && ntp_optind < argc; ntp_optind++) {
+! c = atoi(argv[ntp_optind]);
+ if (c <= 0 || c > 15) {
+ (void) fprintf(stderr, "%s: invalid key number `%s'\n",
+! progname, argv[ntp_optind]);
+ exit(2);
+ }
+*** /tmp/RCSA023401 Wed Jan 26 17:56:24 1994
+--- authstuff/omakeIPFP.c Wed Jan 26 16:33:29 1994
+***************
+*** 35,43 ****
+ int c;
+ int errflg = 0;
+! extern int optind;
+! extern char *optarg;
+
+ progname = argv[0];
+! while ((c = getopt_l(argc, argv, "d")) != EOF)
+ switch (c) {
+ case 'd':
+--- 35,43 ----
+ int c;
+ int errflg = 0;
+! extern int ntp_optind;
+! extern char *ntp_optarg;
+
+ progname = argv[0];
+! while ((c = ntp_getopt(argc, argv, "d")) != EOF)
+ switch (c) {
+ case 'd':
+***************
+*** 189,193 ****
+ int quadbits;
+
+! bzero((char *)bits, sizeof bits);
+
+ /*
+--- 189,193 ----
+ int quadbits;
+
+! memset((char *)bits, 0, sizeof bits);
+
+ /*
+*** /tmp/RCSA023419 Wed Jan 26 17:56:25 1994
+--- clockstuff/chutest.c Wed Jan 26 16:33:29 1994
+***************
+*** 69,78 ****
+ int c;
+ int errflg = 0;
+! extern int optind;
+! extern char *optarg;
+ void init_chu();
+
+ progname = argv[0];
+! while ((c = getopt_l(argc, argv, "cdfpt")) != EOF)
+ switch (c) {
+ case 'c':
+--- 69,78 ----
+ int c;
+ int errflg = 0;
+! extern int ntp_optind;
+! extern char *ntp_optarg;
+ void init_chu();
+
+ progname = argv[0];
+! while ((c = ntp_getopt(argc, argv, "cdfpt")) != EOF)
+ switch (c) {
+ case 'c':
+***************
+*** 108,112 ****
+ break;
+ }
+! if (errflg || optind+1 != argc) {
+ #ifdef STREAM
+ (void) fprintf(stderr, "usage: %s [-dft] tty_device\n",
+--- 108,112 ----
+ break;
+ }
+! if (errflg || ntp_optind+1 != argc) {
+ #ifdef STREAM
+ (void) fprintf(stderr, "usage: %s [-dft] tty_device\n",
+***************
+*** 127,131 ****
+
+ (void) gettimeofday(&lasttv, (struct timezone *)0);
+! c = openterm(argv[optind]);
+ init_chu();
+ #ifdef STREAM
+--- 127,131 ----
+
+ (void) gettimeofday(&lasttv, (struct timezone *)0);
+! c = openterm(argv[ntp_optind]);
+ init_chu();
+ #ifdef STREAM
+*** /tmp/RCSA023419 Wed Jan 26 17:56:25 1994
+--- clockstuff/clktest.c Wed Jan 26 16:33:29 1994
+***************
+*** 106,111 ****
+ struct sgttyb ttyb;
+ struct itimerval itimer;
+! extern int optind;
+! extern char *optarg;
+ int alarming();
+ int ioready();
+--- 106,111 ----
+ struct sgttyb ttyb;
+ struct itimerval itimer;
+! extern int ntp_optind;
+! extern char *ntp_optarg;
+ int alarming();
+ int ioready();
+***************
+*** 115,119 ****
+ magic[0] = 0;
+ #endif
+! while ((c = getopt_l(argc, argv, "a:b:c:dfs:t:")) != EOF)
+ switch (c) {
+ #ifdef CLKLDISC
+--- 115,119 ----
+ magic[0] = 0;
+ #endif
+! while ((c = ntp_getopt(argc, argv, "a:b:c:dfs:t:")) != EOF)
+ switch (c) {
+ #ifdef CLKLDISC
+***************
+*** 121,125 ****
+ #endif
+ case 'c':
+! if (!atouint(optarg, &tmp)) {
+ (void) fprintf(stderr,
+ "%s: argument for -%c must be integer\n",
+--- 121,125 ----
+ #endif
+ case 'c':
+! if (!atouint(ntp_optarg, &tmp)) {
+ (void) fprintf(stderr,
+ "%s: argument for -%c must be integer\n",
+***************
+*** 140,144 ****
+ break;
+ case 'b':
+! if (!atouint(optarg, &tmp)) {
+ errflg++;
+ break;
+--- 140,144 ----
+ break;
+ case 'b':
+! if (!atouint(ntp_optarg, &tmp)) {
+ errflg++;
+ break;
+***************
+*** 164,175 ****
+ break;
+ case 's':
+! cmdlen = strlen(optarg);
+ if (cmdlen == 0)
+ errflg++;
+ else
+! cmd = optarg;
+ break;
+ case 't':
+! if (!atouint(optarg, &tmp))
+ errflg++;
+ else {
+--- 164,175 ----
+ break;
+ case 's':
+! cmdlen = strlen(ntp_optarg);
+ if (cmdlen == 0)
+ errflg++;
+ else
+! cmd = ntp_optarg;
+ break;
+ case 't':
+! if (!atouint(ntp_optarg, &tmp))
+ errflg++;
+ else {
+***************
+*** 182,186 ****
+ break;
+ }
+! if (errflg || optind+1 != argc) {
+ (void) fprintf(stderr,
+ #ifdef CLKLDISC
+--- 182,186 ----
+ break;
+ }
+! if (errflg || ntp_optind+1 != argc) {
+ (void) fprintf(stderr,
+ #ifdef CLKLDISC
+***************
+*** 200,209 ****
+
+ if (docmd)
+! fd = open(argv[optind], O_RDWR, 0777);
+ else
+! fd = open(argv[optind], O_RDONLY, 0777);
+ if (fd == -1) {
+ (void) fprintf(stderr, "%s: open(%s): ", progname,
+! argv[optind]);
+ perror("");
+ exit(1);
+--- 200,209 ----
+
+ if (docmd)
+! fd = open(argv[ntp_optind], O_RDWR, 0777);
+ else
+! fd = open(argv[ntp_optind], O_RDONLY, 0777);
+ if (fd == -1) {
+ (void) fprintf(stderr, "%s: open(%s): ", progname,
+! argv[ntp_optind]);
+ perror("");
+ exit(1);
+*** /tmp/RCSA023419 Wed Jan 26 17:56:25 1994
+--- clockstuff/propdelay.c Wed Jan 26 16:33:29 1994
+***************
+*** 141,149 ****
+ double lat2, long2;
+ double lat3, long3;
+! extern int optind;
+! extern char *optarg;
+
+ progname = argv[0];
+! while ((c = getopt_l(argc, argv, "dh:CWG")) != EOF)
+ switch (c) {
+ case 'd':
+--- 141,149 ----
+ double lat2, long2;
+ double lat3, long3;
+! extern int ntp_optind;
+! extern char *ntp_optarg;
+
+ progname = argv[0];
+! while ((c = ntp_getopt(argc, argv, "dh:CWG")) != EOF)
+ switch (c) {
+ case 'd':
+***************
+*** 152,159 ****
+ case 'h':
+ hflag++;
+! height = atof(optarg);
+ if (height <= 0.0) {
+ (void) fprintf(stderr, "height %s unlikely\n",
+! optarg);
+ errflg++;
+ }
+--- 152,159 ----
+ case 'h':
+ hflag++;
+! height = atof(ntp_optarg);
+ if (height <= 0.0) {
+ (void) fprintf(stderr, "height %s unlikely\n",
+! ntp_optarg);
+ errflg++;
+ }
+***************
+*** 172,177 ****
+ break;
+ }
+! if (errflg || (!(Cflag || Wflag || Gflag) && optind+4 != argc) ||
+! ((Cflag || Wflag || Gflag) && optind+2 != argc)) {
+ (void) fprintf(stderr,
+ "usage: %s [-d] [-h height] lat1 long1 lat2 long2\n",
+--- 172,177 ----
+ break;
+ }
+! if (errflg || (!(Cflag || Wflag || Gflag) && ntp_optind+4 != argc) ||
+! ((Cflag || Wflag || Gflag) && ntp_optind+2 != argc)) {
+ (void) fprintf(stderr,
+ "usage: %s [-d] [-h height] lat1 long1 lat2 long2\n",
+***************
+*** 186,193 ****
+
+ if (!(Cflag || Wflag || Gflag)) {
+! lat1 = latlong(argv[optind], 1);
+! long1 = latlong(argv[optind + 1], 0);
+! lat2 = latlong(argv[optind + 2], 1);
+! long2 = latlong(argv[optind + 3], 0);
+ if (hflag) {
+ doit(lat1, long1, lat2, long2, height, "");
+--- 186,193 ----
+
+ if (!(Cflag || Wflag || Gflag)) {
+! lat1 = latlong(argv[ntp_optind], 1);
+! long1 = latlong(argv[ntp_optind + 1], 0);
+! lat2 = latlong(argv[ntp_optind + 2], 1);
+! long2 = latlong(argv[ntp_optind + 3], 0);
+ if (hflag) {
+ doit(lat1, long1, lat2, long2, height, "");
+***************
+*** 202,207 ****
+ * Compute delay from WWV
+ */
+! lat1 = latlong(argv[optind], 1);
+! long1 = latlong(argv[optind + 1], 0);
+ lat2 = latlong(wwvlat, 1);
+ long2 = latlong(wwvlong, 0);
+--- 202,207 ----
+ * Compute delay from WWV
+ */
+! lat1 = latlong(argv[ntp_optind], 1);
+! long1 = latlong(argv[ntp_optind + 1], 0);
+ lat2 = latlong(wwvlat, 1);
+ long2 = latlong(wwvlong, 0);
+***************
+*** 229,234 ****
+ }
+ } else if (Cflag) {
+! lat1 = latlong(argv[optind], 1);
+! long1 = latlong(argv[optind + 1], 0);
+ lat2 = latlong(chulat, 1);
+ long2 = latlong(chulong, 0);
+--- 229,234 ----
+ }
+ } else if (Cflag) {
+! lat1 = latlong(argv[ntp_optind], 1);
+! long1 = latlong(argv[ntp_optind + 1], 0);
+ lat2 = latlong(chulat, 1);
+ long2 = latlong(chulong, 0);
+***************
+*** 244,249 ****
+ lat1 = latlong(goes_up_lat, 1);
+ long1 = latlong(goes_up_long, 0);
+! lat3 = latlong(argv[optind], 1);
+! long3 = latlong(argv[optind + 1], 0);
+
+ lat2 = latlong(goes_sat_lat, 1);
+--- 244,249 ----
+ lat1 = latlong(goes_up_lat, 1);
+ long1 = latlong(goes_up_long, 0);
+! lat3 = latlong(argv[ntp_optind], 1);
+! long3 = latlong(argv[ntp_optind + 1], 0);
+
+ lat2 = latlong(goes_sat_lat, 1);
+*** /tmp/RCSA023428 Wed Jan 26 17:56:27 1994
+--- conf/Config.CHATHAM Wed Jan 26 16:33:29 1994
+***************
+*** 90,96 ****
+ # CLOCKDEFS= line below. This flag affects xntpd only.
+ #
+- # There is an occurance of a call to rindex() in the daemon. You may
+- # have to include a -Drindex=strrchr to get this to load right.
+- #
+ # To change the location of the configuration file, use a
+ # -DCONFIG_FILE=\\"/local/etc/ntp.conf\\" or something similar.
+--- 90,93 ----
+***************
+*** 110,114 ****
+ # generated by the pps signal. Only one of these flags should be defined.
+ #
+! DEFS= -DUSELIBKVM -DDEBUG -DSTREAM -DREFCLOCK -DNO_SIGNED_CHAR_DECL -DPPS -DPPSDEV -DXNTP_RETROFIT_STDLIB -DHAVE_UNISTD_H
+
+ #
+--- 107,111 ----
+ # generated by the pps signal. Only one of these flags should be defined.
+ #
+! DEFS= -DUSELIBKVM -DDEBUG -DSTREAM -DREFCLOCK -DNO_SIGNED_CHAR_DECL -DPPS -DPPSDEV -DXNTP_RETROFIT_STDLIB -DNTP_POSIX_SOURCE
+
+ #
+*** /tmp/RCSA023428 Wed Jan 26 17:56:27 1994
+--- conf/Config.MONOMOY Wed Jan 26 16:33:29 1994
+***************
+*** 85,91 ****
+ # CLOCKDEFS= line below. This flag affects xntpd only.
+ #
+- # There is an occurance of a call to rindex() in the daemon. You may
+- # have to include a -Drindex=strrchr to get this to load right.
+- #
+ # To change the location of the configuration file, use a
+ # -DCONFIG_FILE=\\"/local/etc/ntp.conf\\" or something similar.
+--- 85,88 ----
+***************
+*** 105,109 ****
+ # be used)
+ #
+! DEFS= -DBSDI -DUSELIBKVM -DDEBUG -DREFCLOCK -DPPS -DCONFIG_FILE=\\"/usr/local/etc/xntp.conf\\" -DHAVE_UNISTD_H
+
+ #
+--- 102,106 ----
+ # be used)
+ #
+! DEFS= -DBSDI -DUSELIBKVM -DDEBUG -DREFCLOCK -DPPS -DCONFIG_FILE=\\"/usr/local/etc/xntp.conf\\" -DNTP_POSIX_SOURCE
+
+ #
+*** /tmp/RCSA023428 Wed Jan 26 17:56:27 1994
+--- conf/Config.TIGER Wed Jan 26 16:33:30 1994
+***************
+*** 81,87 ****
+ # CLOCKDEFS= line below. This flag affects xntpd only.
+ #
+- # There is an occurance of a call to rindex() in the daemon. You may
+- # have to include a -Drindex=strrchr to get this to load right.
+- #
+ # To change the location of the configuration file, use a
+ # -DCONFIG_FILE=\\"/local/etc/ntp.conf\\" or something similar.
+--- 81,84 ----
+***************
+*** 101,105 ****
+ # be used)
+ #
+! DEFS= -DREFCLOCK -DS_CHAR_DEFINED -DREADKMEM -DDEBUG -DPLL -DXNTP_RETROFIT_STDLIB -DHAVE_UNISTD_H
+
+ #
+--- 98,102 ----
+ # be used)
+ #
+! DEFS= -DREFCLOCK -DS_CHAR_DEFINED -DREADKMEM -DDEBUG -DPLL -DXNTP_RETROFIT_STDLIB -DNTP_POSIX_SOURCE
+
+ #
+*** /tmp/RCSA023428 Wed Jan 26 17:56:27 1994
+--- conf/Config.TRURO Wed Jan 26 16:33:30 1994
+***************
+*** 87,93 ****
+ # CLOCKDEFS= line below. This flag affects xntpd only.
+ #
+- # There is an occurance of a call to rindex() in the daemon. You may
+- # have to include a -Drindex=strrchr to get this to load right.
+- #
+ # To change the location of the configuration file, use a
+ # -DCONFIG_FILE=\\"/local/etc/ntp.conf\\" or something similar.
+--- 87,90 ----
+***************
+*** 110,114 ****
+ # generated by the pps signal. Only one of these flags should be defined.
+ #
+! DEFS= -DDEBUG -DSTREAM -DREFCLOCK -DNO_SIGNED_CHAR_DECL -DSLEWALWAYS -DSOLARIS -DPPS -DSTUPID_SIGNAL -DXNTP_RETROFIT_STDLIB -DHAVE_UNISTD_H
+
+ #
+--- 107,111 ----
+ # generated by the pps signal. Only one of these flags should be defined.
+ #
+! DEFS= -DDEBUG -DSTREAM -DREFCLOCK -DNO_SIGNED_CHAR_DECL -DSLEWALWAYS -DSOLARIS -DPPS -DSTUPID_SIGNAL -DXNTP_RETROFIT_STDLIB -DNTP_POSIX_SOURCE
+
+ #
+*** /tmp/RCSA023441 Wed Jan 26 17:56:29 1994
+--- include/l_stdlib.h Wed Jan 26 16:33:30 1994
+***************
+*** 39,43 ****
+ #if !defined(NTP_POSIX_SOURCE)
+ extern int atoi P((char *));
+- extern void bcopy P((char *, char *, int));
+ extern int dup2 P((int, int));
+ extern int execve P((char *, char **,char **));
+--- 39,42 ----
+***************
+*** 51,58 ****
+ #endif
+
+- #ifndef bzero /* XXX macro prototyping clash */
+- extern void bzero P((char *, int));
+- extern int bcmp P((char *, char *, int));
+- #endif
+ extern char *mktemp P((char *));
+
+--- 50,53 ----
+***************
+*** 193,200 ****
+ #ifndef NTP_POSIX_SOURCE
+ extern int atoi P((char *));
+- extern void bcopy P((char *, char *, int));
+- extern void bzero P((char *, int));
+- extern int bcmp P((char *, char *, int));
+- extern void bcopy P((char *, char *, int));
+ extern int execve P((char *, char **,char **));
+ extern int fork P((void));
+--- 188,191 ----
+*** /tmp/RCSA023441 Wed Jan 26 17:56:29 1994
+--- include/ntp.h Wed Jan 26 16:33:30 1994
+***************
+*** 329,333 ****
+
+ /*
+! * Definitions for the clear() routine. We use bzero() to clear
+ * the parts of the peer structure which go to zero. These are
+ * used to calculate the start address and length of the area.
+--- 329,333 ----
+
+ /*
+! * Definitions for the clear() routine. We use memset() to clear
+ * the parts of the peer structure which go to zero. These are
+ * used to calculate the start address and length of the area.
+*** /tmp/RCSA023441 Wed Jan 26 17:56:29 1994
+--- include/ntp_machine.h Wed Jan 26 16:33:31 1994
+***************
+*** 1,3 ****
+! /* ntp_compat.h,v 3.1 1993/07/06 01:06:49 jbj Exp
+ * Collect all machine dependent idiosyncrasies in one place.
+ */
+--- 1,3 ----
+! /* ntp_machine.h,v 3.1 1993/07/06 01:06:49 jbj Exp
+ * Collect all machine dependent idiosyncrasies in one place.
+ */
+***************
+*** 53,61 ****
+
+ THIS MAKES PORTS TO NEW SYSTEMS EASY - You only have to wory about
+! kernal mucking.
+
+ NTP_POSIX_SOURCE - Use POSIX functions over bsd functions and att functions.
+ This is NOT the same as _POSIX_SOURCE.
+! It is much weeker!
+
+
+--- 53,61 ----
+
+ THIS MAKES PORTS TO NEW SYSTEMS EASY - You only have to wory about
+! kernel mucking.
+
+ NTP_POSIX_SOURCE - Use POSIX functions over bsd functions and att functions.
+ This is NOT the same as _POSIX_SOURCE.
+! It is much weaker!
+
+
+***************
+*** 95,99 ****
+ UNIX V.4 machines implement a sockets library on top of streams.
+ When requesting the IP interface configuration with an ioctl(2) calll,
+! an arrat of ifreq structures are placed in the provided buffer. Some
+ implementations also place the length of the buffer information in
+ the first integer position of the buffer.
+--- 95,99 ----
+ UNIX V.4 machines implement a sockets library on top of streams.
+ When requesting the IP interface configuration with an ioctl(2) calll,
+! an array of ifreq structures are placed in the provided buffer. Some
+ implementations also place the length of the buffer information in
+ the first integer position of the buffer.
+***************
+*** 115,121 ****
+ RETSIGTYPE - Define signal function type.
+ NO_SIGNED_CHAR_DECL - No "signed char" see include/ntp.h
+! LOCK_PROCESS - Have plock.
+ UDP_WILDCARD_DELIVERY
+! - these systems deliver broadcast pakets to the wildcard
+ port instead to a port bound to the interface bound
+ to the correct broadcast address - are these
+--- 115,121 ----
+ RETSIGTYPE - Define signal function type.
+ NO_SIGNED_CHAR_DECL - No "signed char" see include/ntp.h
+! LOCK_PROCESS - Have plock.
+ UDP_WILDCARD_DELIVERY
+! - these systems deliver broadcast packets to the wildcard
+ port instead to a port bound to the interface bound
+ to the correct broadcast address - are these
+***************
+*** 122,133 ****
+ implementations broken or did the spec change ?
+
+- HAVE_UNISTD_H - Maybe should be part of NTP_POSIX_SOURCE ?
+-
+ You could just put the defines on the DEFS line in machines/<os> file.
+! I don't since there are lost of different types compiler that a systemm might
+! have, some that can do proto typing and others that cannot on the saem system.
+! I get a chanse to twiddle some of the configuration paramasters at compile
+! time based on compler/machine combinatsions by using this include file.
+! See convex, aix and sun configurations see how complex it get.
+
+ */
+--- 122,135 ----
+ implementations broken or did the spec change ?
+
+ You could just put the defines on the DEFS line in machines/<os> file.
+! I don't since there are lots of different types of compiler that a system might
+! have, some that can do prototyping and others that cannot on the saem system.
+! I get a chance to twiddle some of the configuration paramasters at compile
+! time based on compler/machine combinations by using this include file.
+! See convex, aix and sun configurations see how complex it gets.
+!
+! Note that it _is_ considered reasonable to add some system-specific defines
+! to the machine/<os> file if it would be too inconvenient to puzzle them out
+! in this file.
+
+ */
+***************
+*** 145,152 ****
+ * Keep USE_PROTOTYPES and _NO_PROTO in step.
+ */
+! #if defined(_NO_PROTO)&&defined(USE_PROTOTYPES)
+ #undef USE_PROTOTYPES
+ #endif
+! #if !defined(_NO_PROTO)&&!defined(USE_PROTOTYPES)
+ #define USE_PROTOTYPES
+ #endif
+--- 147,154 ----
+ * Keep USE_PROTOTYPES and _NO_PROTO in step.
+ */
+! #if defined(_NO_PROTO) && defined(USE_PROTOTYPES)
+ #undef USE_PROTOTYPES
+ #endif
+! #if !defined(_NO_PROTO) && !defined(USE_PROTOTYPES)
+ #define USE_PROTOTYPES
+ #endif
+***************
+*** 204,208 ****
+ * Convex
+ */
+! #if defined(SYS_CONVEXOS10)||defined(SYS_CONVEXOS9)
+ #define HAVE_SIGNALED_IO
+ #define HAVE_N_UN
+--- 206,210 ----
+ * Convex
+ */
+! #if defined(SYS_CONVEXOS10) || defined(SYS_CONVEXOS9)
+ #define HAVE_SIGNALED_IO
+ #define HAVE_N_UN
+***************
+*** 213,221 ****
+ #define NO_SIGNED_CHAR_DECL
+ #else
+! #if defined(__stdc__)&&!defined(USE_PROTOTYPES)
+ #define USE_PROTOTYPES
+ #endif
+! #if !defined(__stdc__)&&defined(USE_PROTOTYPES)
+! #undef USE_PROTOTYPES
+ #endif
+ #define NTP_POSIX_SOURCE
+--- 215,223 ----
+ #define NO_SIGNED_CHAR_DECL
+ #else
+! #if defined(__stdc__) && !defined(USE_PROTOTYPES)
+ #define USE_PROTOTYPES
+ #endif
+! #if !defined(__stdc__) && defined(USE_PROTOTYPES)
+! #undef USE_PROTOTYPES
+ #endif
+ #define NTP_POSIX_SOURCE
+***************
+*** 253,257 ****
+ * AUX
+ */
+! #if defined(SYS_AUX2)||defined(SYS_AUX3)
+ #define NO_SIGNED_CHAR_DECL
+ #define HAVE_READKMEM
+--- 255,259 ----
+ * AUX
+ */
+! #if defined(SYS_AUX2) || defined(SYS_AUX3)
+ #define NO_SIGNED_CHAR_DECL
+ #define HAVE_READKMEM
+***************
+*** 292,296 ****
+ #define NTP_POSIX_SOURCE
+ #define HAVE_SIGNALED_IO
+- #define HAVE_UNISTD_H
+ #define NO_SIGNED_CHAR_DECL
+ #define LOCK_PROCESS
+--- 294,297 ----
+***************
+*** 302,305 ****
+--- 303,308 ----
+ #define HAVE_READKMEM
+ #endif
++ #define getdtablesize() sysconf(_SC_OPEN_MAX)
++ #define setlinebuf(f) setvbuf(f, NULL, _IOLBF, 0)
+ #endif
+
+***************
+*** 313,316 ****
+--- 316,320 ----
+ #define HAVE_BSD_NICE
+ #define HAVE_BSD_TTYS
++ #define HAVE_TERMIOS
+ #endif
+
+***************
+*** 342,346 ****
+
+ /*
+! * DECOSF1
+ */
+ #if defined(SYS_DECOSF1)
+--- 346,350 ----
+
+ /*
+! * DEC AXP OSF/1
+ */
+ #if defined(SYS_DECOSF1)
+***************
+*** 354,357 ****
+--- 358,362 ----
+ /*
+ * I386
++ * XXX - what OS?
+ */
+ #if defined(SYS_I386)
+***************
+*** 412,416 ****
+
+ /*
+! * Sony
+ */
+ #if defined(SYS_SONY)
+--- 417,421 ----
+
+ /*
+! * Sony NEWS
+ */
+ #if defined(SYS_SONY)
+***************
+*** 422,425 ****
+--- 427,431 ----
+ /*
+ * VAX
++ * XXX - VMS?
+ */
+ #if defined(SYS_VAX)
+***************
+*** 435,439 ****
+ #define HAVE_ATT_SETPGRP
+ #define USE_PROTOTYPES
+- #define HAVE_UNISTD_H
+ #define NTP_POSIX_SOURCE
+ #define HAVE_ATT_NICE
+--- 441,444 ----
+***************
+*** 484,490 ****
+ #endif /* NTP_SYSCALLS_STD */
+
+! #if !defined(HAVE_ATT_NICE) && !defined(HAVE_BSD_NICE) && !defined(HAVE_NO_NICE)
+ ERROR You_must_define_one_of_the_HAVE_xx_NICE_defines
+ #endif
+
+ #endif /* __ntp_machine */
+--- 489,545 ----
+ #endif /* NTP_SYSCALLS_STD */
+
+! #if !defined(HAVE_ATT_NICE) \
+! && !defined(HAVE_BSD_NICE) \
+! && !defined(HAVE_NO_NICE)
+ ERROR You_must_define_one_of_the_HAVE_xx_NICE_defines
+ #endif
++
++
++ #if !defined(XNTP_BIG_ENDIAN) && !defined(XNTP_LITTLE_ENDIAN)
++
++ # if defined(XNTP_AUTO_ENDIAN)
++ # include <netinet/in.h>
++
++ # if BYTE_ORDER == BIG_ENDIAN
++ # define XNTP_BIG_ENDIAN
++ # endif
++ # if BYTE_ORDER == LITTLE_ENDIAN
++ # define XNTP_LITTLE_ENDIAN
++ # endif
++
++ # else /* AUTO */
++
++ # ifdef WORDS_BIGENDIAN
++ # define XNTP_BIG_ENDIAN 1
++ # else
++ # define XNTP_LITTLE_ENDIAN 1
++ # endif
++
++ # endif /* AUTO */
++
++ #endif /* !BIG && !LITTLE */
++
++ /*
++ * Byte order woes. The DES code is sensitive to byte order. This
++ * used to be resolved by calling ntohl() and htonl() to swap things
++ * around, but this turned out to be quite costly on Vaxes where those
++ * things are actual functions. The code now straightens out byte
++ * order troubles on its own, with no performance penalty for little
++ * end first machines, but at great expense to cleanliness.
++ */
++ #if !defined(XNTP_BIG_ENDIAN) && !defined(XNTP_LITTLE_ENDIAN)
++ /*
++ * Pick one or the other.
++ */
++ BYTE_ORDER_NOT_DEFINED_FOR_AUTHENTICATION
++ #endif
++
++ #if defined(XNTP_BIG_ENDIAN) && defined(XNTP_LITTLE_ENDIAN)
++ /*
++ * Pick one or the other.
++ */
++ BYTE_ORDER_NOT_DEFINED_FOR_AUTHENTICATION
++ #endif
++
+
+ #endif /* __ntp_machine */
+*** /tmp/RCSA023441 Wed Jan 26 17:56:30 1994
+--- include/ntp_select.h Wed Jan 26 16:33:31 1994
+***************
+*** 15,19 ****
+ #define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))
+ #define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS)))
+! #define FD_ZERO(p) bzero((char *)(p), sizeof(*(p)))
+ #endif
+
+--- 15,19 ----
+ #define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))
+ #define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS)))
+! #define FD_ZERO(p) memset((char *)(p), 0, sizeof(*(p)))
+ #endif
+
+*** /tmp/RCSA023441 Wed Jan 26 17:56:30 1994
+--- include/ntp_stdlib.h Wed Jan 26 16:33:31 1994
+***************
+*** 48,52 ****
+ extern int clocktime P((int, int, int, int, int, U_LONG, U_LONG *, U_LONG *));
+ extern char * emalloc P((u_int));
+! extern int getopt_l P((int, char **, char *));
+ extern void init_auth P((void));
+ extern void init_lib P((void));
+--- 48,52 ----
+ extern int clocktime P((int, int, int, int, int, U_LONG, U_LONG *, U_LONG *));
+ extern char * emalloc P((u_int));
+! extern int ntp_getopt P((int, char **, char *));
+ extern void init_auth P((void));
+ extern void init_lib P((void));
+*** /tmp/RCSA023441 Wed Jan 26 17:56:30 1994
+--- include/ntp_string.h Wed Jan 26 16:33:31 1994
+***************
+*** 1,4 ****
+ /*
+! * Define bcopy, bzero, and bcmp and string op's
+ */
+
+--- 1,4 ----
+ /*
+! * Define string ops: strchr strrchr memcmp memmove memset
+ */
+
+***************
+*** 8,27 ****
+ #ifdef NTP_POSIX_SOURCE
+
+! #if defined(HAVE_MEMORY_H)
+! #include <memory.h>
+! #endif
+!
+! #include <string.h>
+!
+! #define bcopy(s1,s2,n) memcpy(s2, s1, n)
+! #define bzero(s,n) memset(s, 0, n)
+! #define bcmp(s1,s2,n) memcmp(s1, s2, n)
+
+ #else /* NTP_POSIX_SOURCE */
+
+! #include <strings.h>
+
+! #define strrchr rindex
+! #define strchr index
+
+ #endif /* NTP_POSIX_SOURCE */
+--- 8,27 ----
+ #ifdef NTP_POSIX_SOURCE
+
+! # if defined(HAVE_MEMORY_H)
+! # include <memory.h>
+! # endif
+
++ # include <string.h>
++
+ #else /* NTP_POSIX_SOURCE */
+
+! # include <strings.h>
+
+! # define strchr(s,c) index(s,c)
+! # define strrchr(s,c) rindex(s,c)
+! # define memcmp(a,b,c) bcmp(a,b,c)
+! # define memmove(t,f,c) bcopy(f,t,c)
+! # define memset(a,x,c) if (x == 0x00) bzero(a,c) else ntp_memset((char*)a,x,c)
+! void ntp_memset P((char *, int, int));
+
+ #endif /* NTP_POSIX_SOURCE */
+*** /tmp/RCSA023456 Wed Jan 26 17:56:31 1994
+--- kernel/tty_clk_STREAMS.c Wed Jan 26 16:33:31 1994
+***************
+*** 63,67 ****
+
+ /*
+! * God only knows why, but linking with strchr() and index() fail
+ * on my system, so here's a renamed copy.
+ */
+--- 63,67 ----
+
+ /*
+! * God only knows why, but linking with strchr() fails
+ * on my system, so here's a renamed copy.
+ */
+*** /tmp/RCSA023460 Wed Jan 26 17:56:32 1994
+--- lib/a_md512crypt.c Wed Jan 26 16:33:31 1994
+***************
+*** 81,86 ****
+ MD5Final(&ctx);
+
+! bcopy((char *)ctx.digest, (char *) &pkt[NOCRYPT_LONGS + length/sizeof(U_LONG)],
+! BLOCK_OCTETS);
+! return 4 + BLOCK_OCTETS;
+ }
+--- 81,87 ----
+ MD5Final(&ctx);
+
+! memmove((char *) &pkt[NOCRYPT_LONGS + length/sizeof(U_LONG)],
+! (char *) ctx.digest,
+! BLOCK_OCTETS);
+! return (4 + BLOCK_OCTETS);
+ }
+*** /tmp/RCSA023460 Wed Jan 26 17:56:33 1994
+--- lib/a_md5decrypt.c Wed Jan 26 16:33:32 1994
+***************
+*** 55,58 ****
+ MD5Final(&ctx);
+
+! return (0 == bcmp((char *)ctx.digest, (char *)pkt + length + 4, BLOCK_OCTETS));
+ }
+--- 55,60 ----
+ MD5Final(&ctx);
+
+! return (!memcmp((char *)ctx.digest,
+! (char *)pkt + length + 4,
+! BLOCK_OCTETS));
+ }
+*** /tmp/RCSA023460 Wed Jan 26 17:56:33 1994
+--- lib/a_md5encrypt.c Wed Jan 26 16:33:32 1994
+***************
+*** 64,68 ****
+ MD5Final(&ctx);
+
+! bcopy((char *)ctx.digest, (char *) &pkt[NOCRYPT_LONGS + len], BLOCK_OCTETS);
+! return 4 + BLOCK_OCTETS; /* return size of key and MAC */
+ }
+--- 64,70 ----
+ MD5Final(&ctx);
+
+! memmove((char *)&pkt[NOCRYPT_LONGS + len],
+! (char *)ctx.digest,
+! BLOCK_OCTETS);
+! return (4 + BLOCK_OCTETS); /* return size of key and MAC */
+ }
+*** /tmp/RCSA023460 Wed Jan 26 17:56:33 1994
+--- lib/authdes.c Wed Jan 26 16:33:32 1994
+***************
+*** 4,31 ****
+ #include "ntp_stdlib.h"
+
+- #if !defined(XNTP_BIG_ENDIAN) && !defined(XNTP_LITTLE_ENDIAN)
+-
+- #if defined(XNTP_AUTO_ENDIAN)
+- #include <netinet/in.h>
+-
+- #if BYTE_ORDER == BIG_ENDIAN
+- #define XNTP_BIG_ENDIAN
+- #endif
+- #if BYTE_ORDER == LITTLE_ENDIAN
+- #define XNTP_LITTLE_ENDIAN
+- #endif
+-
+- #else /* AUTO */
+-
+- #ifdef WORDS_BIGENDIAN
+- #define XNTP_BIG_ENDIAN 1
+- #else
+- #define XNTP_LITTLE_ENDIAN 1
+- #endif
+-
+- #endif /* AUTO */
+-
+- #endif /* !BIG && !LITTLE */
+-
+ /*
+ * There are two entries in here. auth_subkeys() called to
+--- 4,7 ----
+***************
+*** 33,58 ****
+ * auth_des() is called to do the actual encryption/decryption
+ */
+-
+- /*
+- * Byte order woes. The DES code is sensitive to byte order. This
+- * used to be resolved by calling ntohl() and htonl() to swap things
+- * around, but this turned out to be quite costly on Vaxes where those
+- * things are actual functions. The code now straightens out byte
+- * order troubles on its own, with no performance penalty for little
+- * end first machines, but at great expense to cleanliness.
+- */
+- #if !defined(XNTP_BIG_ENDIAN) && !defined(XNTP_LITTLE_ENDIAN)
+- /*
+- * Pick one or the other.
+- */
+- BYTE_ORDER_NOT_DEFINED_FOR_AUTHENTICATION
+- #endif
+-
+- #if defined(XNTP_BIG_ENDIAN) && defined(XNTP_LITTLE_ENDIAN)
+- /*
+- * Pick one or the other.
+- */
+- BYTE_ORDER_NOT_DEFINED_FOR_AUTHENTICATION
+- #endif
+
+ /*
+--- 9,12 ----
+*** /tmp/RCSA023460 Wed Jan 26 17:56:33 1994
+--- lib/authkeys.c Wed Jan 26 16:33:32 1994
+***************
+*** 110,114 ****
+ * Initialize hash table and free list
+ */
+! bzero((char *)key_hash, sizeof key_hash);
+ cache_flags = cache_keyid = 0;
+
+--- 110,114 ----
+ * Initialize hash table and free list
+ */
+! memset((char *)key_hash, 0, sizeof key_hash);
+ cache_flags = cache_keyid = 0;
+
+*** /tmp/RCSA023460 Wed Jan 26 17:56:34 1994
+--- lib/authusekey.c Wed Jan 26 16:33:32 1994
+***************
+*** 97,101 ****
+ * Make up key from ascii representation
+ */
+! bzero((char *) keybytes, sizeof(keybytes));
+ for (i = 0; i < 8 && i < len; i++)
+ keybytes[i] = *cp++ << 1;
+--- 97,101 ----
+ * Make up key from ascii representation
+ */
+! memset((char *) keybytes, 0, sizeof(keybytes));
+ for (i = 0; i < 8 && i < len; i++)
+ keybytes[i] = *cp++ << 1;
+*** /tmp/RCSA023460 Wed Jan 26 17:56:34 1994
+--- lib/dofptoa.c Wed Jan 26 16:33:33 1994
+***************
+*** 32,36 ****
+ * Zero out the buffer
+ */
+! bzero((char *)cbuf, sizeof cbuf);
+
+ /*
+--- 32,36 ----
+ * Zero out the buffer
+ */
+! memset((char *)cbuf, 0, sizeof cbuf);
+
+ /*
+*** /tmp/RCSA023460 Wed Jan 26 17:56:34 1994
+--- lib/dolfptoa.c Wed Jan 26 16:33:33 1994
+***************
+*** 33,37 ****
+ * Zero the character buffer
+ */
+! bzero((char *) cbuf, sizeof(cbuf));
+
+ /*
+--- 33,37 ----
+ * Zero the character buffer
+ */
+! memset((char *) cbuf, 0, sizeof(cbuf));
+
+ /*
+*** /tmp/RCSA023460 Wed Jan 26 17:56:34 1994
+--- lib/getopt.c Wed Jan 26 16:33:33 1994
+***************
+*** 5,9 ****
+ * Henry Spencer, changed for 4.3BSD compatibility (in addition to System V).
+ * It allows rescanning of an option list by setting optind to 0 before
+! * calling. Thanks to Dennis Ferguson for the appropriate modifications.
+ *
+ * This file is in the Public Domain.
+--- 5,11 ----
+ * Henry Spencer, changed for 4.3BSD compatibility (in addition to System V).
+ * It allows rescanning of an option list by setting optind to 0 before
+! * calling, which is why we use it even if the system has its own (in fact,
+! * this one has a unique name so as not to conflict with the system's).
+! * Thanks to Dennis Ferguson for the appropriate modifications.
+ *
+ * This file is in the Public Domain.
+***************
+*** 21,57 ****
+ #endif /* lint */
+
+! char *optarg; /* Global argument pointer. */
+! #ifndef __convex__
+! int optind = 0; /* Global argv index. */
+! #else /* __convex__ */
+! extern int optind; /* Global argv index. */
+! #endif /* __convex__ */
+
+- /*
+- * N.B. use following at own risk
+- */
+- #ifndef __convex__
+- int opterr = 1; /* for compatibility, should error be printed? */
+- #else /* __convex__ */
+- extern int opterr; /* for compatibility, should error be printed? */
+- #endif /* __convex__ */
+- int optopt; /* for compatibility, option character checked */
+-
+ static char *scan = NULL; /* Private scan pointer. */
+
+ /*
+! * Print message about a bad option. Watch this definition, it's
+! * not a single statement.
+ */
+! #define BADOPT(mess, ch) if (opterr) { \
+! fputs(argv[0], stderr); \
+! fputs(mess, stderr); \
+! (void) putc(ch, stderr); \
+! (void) putc('\n', stderr); \
+! } \
+! return('?')
+
+ int
+! getopt_l(argc, argv, optstring)
+ int argc;
+ char *argv[];
+--- 23,53 ----
+ #endif /* lint */
+
+! char *ntp_optarg; /* Global argument pointer. */
+! int ntp_optind = 0; /* Global argv index. */
+! int ntp_opterr = 1; /* for compatibility, should error be printed? */
+! int ntp_optopt; /* for compatibility, option character checked */
+
+ static char *scan = NULL; /* Private scan pointer. */
++ static char *prog = "amnesia";
+
+ /*
+! * Print message about a bad option.
+ */
+! static int
+! badopt(mess, ch)
+! char *mess;
+! int ch;
+! {
+! if (ntp_opterr) {
+! fputs(prog, stderr);
+! fputs(mess, stderr);
+! (void) putc(ch, stderr);
+! (void) putc('\n', stderr);
+! }
+! return ('?');
+! }
+
+ int
+! ntp_getopt(argc, argv, optstring)
+ int argc;
+ char *argv[];
+***************
+*** 61,85 ****
+ register char *place;
+
+! optarg = NULL;
+
+! if (optind == 0) {
+ scan = NULL;
+! optind++;
+ }
+
+ if (scan == NULL || *scan == '\0') {
+! if (optind >= argc || argv[optind][0] != '-' || argv[optind][1] == '\0')
+! return EOF;
+! if (argv[optind][1] == '-' && argv[optind][2] == '\0') {
+! optind++;
+! return EOF;
+ }
+
+! scan = argv[optind]+1;
+! optind++;
+ }
+
+ c = *scan++;
+! optopt = c & 0377;
+ for (place = optstring; place != NULL && *place != '\0'; ++place)
+ if (*place == c)
+--- 57,85 ----
+ register char *place;
+
+! prog = argv[0];
+! ntp_optarg = NULL;
+
+! if (ntp_optind == 0) {
+ scan = NULL;
+! ntp_optind++;
+ }
+
+ if (scan == NULL || *scan == '\0') {
+! if (ntp_optind >= argc
+! || argv[ntp_optind][0] != '-'
+! || argv[ntp_optind][1] == '\0') {
+! return (EOF);
+! }
+! if (argv[ntp_optind][1] == '-'
+! && argv[ntp_optind][2] == '\0') {
+! ntp_optind++;
+! return (EOF);
+ }
+
+! scan = argv[ntp_optind++]+1;
+ }
+
+ c = *scan++;
+! ntp_optopt = c & 0377;
+ for (place = optstring; place != NULL && *place != '\0'; ++place)
+ if (*place == c)
+***************
+*** 87,91 ****
+
+ if (place == NULL || *place == '\0' || c == ':' || c == '?') {
+! BADOPT(": unknown option -", c);
+ }
+
+--- 87,91 ----
+
+ if (place == NULL || *place == '\0' || c == ':' || c == '?') {
+! return (badopt(": unknown option -", c));
+ }
+
+***************
+*** 93,106 ****
+ if (*place == ':') {
+ if (*scan != '\0') {
+! optarg = scan;
+ scan = NULL;
+! } else if (optind >= argc) {
+! BADOPT(": option requires argument -", c);
+ } else {
+! optarg = argv[optind];
+! optind++;
+ }
+ }
+
+! return c&0377;
+ }
+--- 93,105 ----
+ if (*place == ':') {
+ if (*scan != '\0') {
+! ntp_optarg = scan;
+ scan = NULL;
+! } else if (ntp_optind >= argc) {
+! return (badopt(": option requires argument -", c));
+ } else {
+! ntp_optarg = argv[ntp_optind++];
+ }
+ }
+
+! return (c & 0377);
+ }
+*** /tmp/RCSA023460 Wed Jan 26 17:56:34 1994
+--- lib/machines.c Wed Jan 26 16:33:33 1994
+***************
+*** 1,18 ****
+! /*
+! * provide special support for peculiar architectures
+ *
+ * Real bummers unite !
+ */
+
+ #ifdef SYS_PTX
+ #include <sys/types.h>
+ #include <sys/procstats.h>
+! int settimeofday(tvp)
+ struct timeval *tvp;
+ {
+! return stime(&tvp->tv_sec); /* lie as bad as SysVR4 */
+ }
+
+! int gettimeofday(tvp)
+ struct timeval *tvp;
+ {
+--- 1,24 ----
+! /* machines.c - provide special support for peculiar architectures
+ *
+ * Real bummers unite !
++ *
++ * $Id:$
+ */
+
++ #include "ntp_stdlib.h"
++
+ #ifdef SYS_PTX
+ #include <sys/types.h>
+ #include <sys/procstats.h>
+!
+! int
+! settimeofday(tvp)
+ struct timeval *tvp;
+ {
+! return (stime(&tvp->tv_sec)); /* lie as bad as SysVR4 */
+ }
+
+! int
+! gettimeofday(tvp)
+ struct timeval *tvp;
+ {
+***************
+*** 21,118 ****
+ * this is also the most logical syscall for such a function
+ */
+! return get_process_stats(tvp, PS_SELF, (struct procstats *) 0,
+! (struct procstats *) 0);
+! }
+! #endif
+!
+! #ifdef SYS_HPUX
+! /* hpux.c,v 3.1 1993/07/06 01:08:23 jbj Exp
+! * hpux.c -- compatibility routines for HP-UX.
+! * XXX many of these are not needed anymore.
+! */
+! #include "ntp_machine.h"
+!
+! #ifdef HAVE_UNISTD_H
+! #include <unistd.h>
+! #endif
+! #include <stdio.h>
+!
+! #include "ntp_stdlib.h"
+!
+! #if (SYS_HPUX < 8)
+! char
+! *index(s, c)
+! register char *s;
+! register int c;
+! {
+! return strchr (s, c);
+! }
+!
+!
+! char
+! *rindex(s, c)
+! register char *s;
+! register int c;
+! {
+! return strrchr (s, c);
+! }
+!
+!
+! int
+! bcmp(a, b, count)
+! register char *a, *b;
+! register int count;
+! {
+! return memcmp (a, b, count);
+! }
+!
+!
+! void
+! bcopy(from, to, count)
+! register char *from;
+! register char *to;
+! register int count;
+! {
+! if ((to == from) || (count <= 0))
+! return;
+!
+! if ((to > from) && (to <= (from + count))) {
+! to += count;
+! from += count;
+!
+! do {
+! *--to = *--from;
+! } while (--count);
+! }
+! else {
+! do {
+! *to++ = *from++;
+! } while (--count);
+! }
+! }
+!
+!
+! void
+! bzero(area, count)
+! register char *area;
+! register int count;
+! {
+! memset(area, 0, count);
+ }
+ #endif
+
+!
+! getdtablesize()
+! {
+! return(sysconf(_SC_OPEN_MAX));
+! }
+!
+!
+! int
+! setlinebuf(a_stream)
+! FILE *a_stream;
+ {
+! return setvbuf(a_stream, (char *) NULL, _IOLBF, 0);
+ }
+!
+! #endif
+--- 27,43 ----
+ * this is also the most logical syscall for such a function
+ */
+! return (get_process_stats(tvp, PS_SELF, (struct procstats *) 0,
+! (struct procstats *) 0));
+ }
+ #endif
+
+! #if !defined(NTP_POSIX_SOURCE)
+! void
+! ntp_memset(a, x, c)
+! char *a;
+! int x, c;
+ {
+! while (c-- > 0)
+! *a++ = x;
+ }
+! #endif /*POSIX*/
+*** /tmp/RCSA023460 Wed Jan 26 17:56:34 1994
+--- lib/numtohost.c Wed Jan 26 16:37:59 1994
+***************
+*** 2,6 ****
+ * numtohost - convert network number to host name.
+ */
+- #include "ntp_string.h"
+ #include <netdb.h>
+
+--- 2,5 ----
+*** /tmp/RCSA023460 Wed Jan 26 17:56:34 1994
+--- lib/systime.c Wed Jan 26 16:33:33 1994
+***************
+*** 346,350 ****
+ */
+ if (oldtime != timetv.tv_sec) {
+! bzero((char *)&ut, sizeof(ut));
+ ut.ut_type = OLD_TIME;
+ ut.ut_time = oldtime;
+--- 346,350 ----
+ */
+ if (oldtime != timetv.tv_sec) {
+! memset((char *)&ut, 0, sizeof(ut));
+ ut.ut_type = OLD_TIME;
+ ut.ut_time = oldtime;
+*** /tmp/RCSA023486 Wed Jan 26 17:56:35 1994
+--- machines/bsdi Wed Jan 26 16:33:33 1994
+***************
+*** 1,5 ****
+ RANLIB= ranlib
+ DEFS_LOCAL=-DREFCLOCK
+! DEFS= -DSYS_BSDI -DHAVE_TERMIOS
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+--- 1,5 ----
+ RANLIB= ranlib
+ DEFS_LOCAL=-DREFCLOCK
+! DEFS= -DSYS_BSDI
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK
+*** /tmp/RCSA023490 Wed Jan 26 17:56:36 1994
+--- ntpdate/ntpdate.c Wed Jan 26 16:33:34 1994
+***************
+*** 168,173 ****
+ int errflg;
+ int c;
+! extern char *optarg;
+! extern int optind;
+ extern char *Version;
+
+--- 168,173 ----
+ int errflg;
+ int c;
+! extern char *ntp_optarg;
+! extern int ntp_optind;
+ extern char *Version;
+
+***************
+*** 179,186 ****
+ * Decode argument list
+ */
+! while ((c = getopt_l(argc, argv, "a:bde:k:o:p:qst:v")) != EOF)
+ switch (c) {
+ case 'a':
+! c = atoi(optarg);
+ sys_authenticate = 1;
+ sys_authkey = (U_LONG)c;
+--- 179,186 ----
+ * Decode argument list
+ */
+! while ((c = ntp_getopt(argc, argv, "a:bde:k:o:p:qst:v")) != EOF)
+ switch (c) {
+ case 'a':
+! c = atoi(ntp_optarg);
+ sys_authenticate = 1;
+ sys_authkey = (U_LONG)c;
+***************
+*** 193,201 ****
+ break;
+ case 'e':
+! if (!atolfp(optarg, &tmp)
+ || tmp.l_ui != 0) {
+ (void) fprintf(stderr,
+ "%s: encryption delay %s is unlikely\n",
+! progname, optarg);
+ errflg++;
+ } else {
+--- 193,201 ----
+ break;
+ case 'e':
+! if (!atolfp(ntp_optarg, &tmp)
+ || tmp.l_ui != 0) {
+ (void) fprintf(stderr,
+ "%s: encryption delay %s is unlikely\n",
+! progname, ntp_optarg);
+ errflg++;
+ } else {
+***************
+*** 204,214 ****
+ break;
+ case 'k':
+! key_file = optarg;
+ break;
+ case 'o':
+! sys_version = atoi(optarg);
+ break;
+ case 'p':
+! c = atoi(optarg);
+ if (c <= 0 || c > NTP_SHIFT) {
+ (void) fprintf(stderr,
+--- 204,214 ----
+ break;
+ case 'k':
+! key_file = ntp_optarg;
+ break;
+ case 'o':
+! sys_version = atoi(ntp_optarg);
+ break;
+ case 'p':
+! c = atoi(ntp_optarg);
+ if (c <= 0 || c > NTP_SHIFT) {
+ (void) fprintf(stderr,
+***************
+*** 227,234 ****
+ break;
+ case 't':
+! if (!atolfp(optarg, &tmp)) {
+ (void) fprintf(stderr,
+ "%s: timeout %s is undecodeable\n",
+! progname, optarg);
+ errflg++;
+ } else {
+--- 227,234 ----
+ break;
+ case 't':
+! if (!atolfp(ntp_optarg, &tmp)) {
+ (void) fprintf(stderr,
+ "%s: timeout %s is undecodeable\n",
+! progname, ntp_optarg);
+ errflg++;
+ } else {
+***************
+*** 249,253 ****
+ }
+
+! sys_maxservers = argc - optind;
+ if (errflg || sys_maxservers == 0) {
+ (void) fprintf(stderr,
+--- 249,253 ----
+ }
+
+! sys_maxservers = argc - ntp_optind;
+ if (errflg || sys_maxservers == 0) {
+ (void) fprintf(stderr,
+***************
+*** 294,299 ****
+ * Add servers we are going to be polling
+ */
+! for ( ; optind < argc; optind++)
+! addserver(argv[optind]);
+
+ if (sys_numservers == 0) {
+--- 294,299 ----
+ * Add servers we are going to be polling
+ */
+! for ( ; ntp_optind < argc; ntp_optind++)
+! addserver(argv[ntp_optind]);
+
+ if (sys_numservers == 0) {
+***************
+*** 1031,1035 ****
+
+ server = (struct server *)emalloc(sizeof(struct server));
+! bzero((char *)server, sizeof(struct server));
+
+ server->srcadr.sin_family = AF_INET;
+--- 1031,1035 ----
+
+ server = (struct server *)emalloc(sizeof(struct server));
+! memset((char *)server, 0, sizeof(struct server));
+
+ server->srcadr.sin_family = AF_INET;
+***************
+*** 1189,1193 ****
+ struct sockaddr_in addr;
+
+! bzero((char *)&addr, sizeof addr);
+ addr.sin_family = AF_INET;
+ addr.sin_port = htons(NTP_PORT);
+--- 1189,1193 ----
+ struct sockaddr_in addr;
+
+! memset((char *)&addr, 0, sizeof addr);
+ addr.sin_family = AF_INET;
+ addr.sin_port = htons(NTP_PORT);
+***************
+*** 1483,1490 ****
+ return 1;
+ } else if ((hp = gethostbyname(host)) != 0) {
+! bcopy(hp->h_addr, (char *)num, sizeof(U_LONG));
+! return 1;
+ }
+! return 0;
+ }
+
+--- 1483,1490 ----
+ return 1;
+ } else if ((hp = gethostbyname(host)) != 0) {
+! memmove((char *)num, hp->h_addr, sizeof(U_LONG));
+! return (1);
+ }
+! return (0);
+ }
+
+***************
+*** 1520,1524 ****
+ if (pp->stratum == 1) {
+ junk[4] = 0;
+! bcopy((char *)&pp->refid, junk, 4);
+ str = junk;
+ } else {
+--- 1520,1524 ----
+ if (pp->stratum == 1) {
+ junk[4] = 0;
+! memmove(junk, (char *)&pp->refid, 4);
+ str = junk;
+ } else {
+*** /tmp/RCSA023494 Wed Jan 26 17:56:37 1994
+--- ntpq/ntpq.c Wed Jan 26 16:33:34 1994
+***************
+*** 510,515 ****
+ int c;
+ int errflg = 0;
+! extern int optind;
+! extern char *optarg;
+
+ delay_time.l_ui = 0;
+--- 510,515 ----
+ int c;
+ int errflg = 0;
+! extern int ntp_optind;
+! extern char *ntp_optarg;
+
+ delay_time.l_ui = 0;
+***************
+*** 517,524 ****
+
+ progname = argv[0];
+! while ((c = getopt_l(argc, argv, "c:dinp")) != EOF)
+ switch (c) {
+ case 'c':
+! ADDCMD(optarg);
+ break;
+ case 'd':
+--- 517,524 ----
+
+ progname = argv[0];
+! while ((c = ntp_getopt(argc, argv, "c:dinp")) != EOF)
+ switch (c) {
+ case 'c':
+! ADDCMD(ntp_optarg);
+ break;
+ case 'd':
+***************
+*** 544,552 ****
+ exit(2);
+ }
+! if (optind == argc) {
+ ADDHOST(DEFHOST);
+ } else {
+! for (; optind < argc; optind++)
+! ADDHOST(argv[optind]);
+ }
+
+--- 544,552 ----
+ exit(2);
+ }
+! if (ntp_optind == argc) {
+ ADDHOST(DEFHOST);
+ } else {
+! for (; ntp_optind < argc; ntp_optind++)
+! ADDHOST(argv[ntp_optind]);
+ }
+
+***************
+*** 983,987 ****
+ * Copy the data into the data buffer.
+ */
+! bcopy((char *)rpkt.data, (char *)pktdata + offset, count);
+
+ /*
+--- 983,987 ----
+ * Copy the data into the data buffer.
+ */
+! memmove((char *)pktdata + offset, (char *)rpkt.data, count);
+
+ /*
+***************
+*** 1051,1055 ****
+ */
+ if (qsize > 0) {
+! bcopy(qdata, (char *)qpkt.data, qsize);
+ pktsize = qsize + CTL_HEADER_LEN;
+ while (pktsize & (sizeof(U_LONG)-1)) {
+--- 1051,1055 ----
+ */
+ if (qsize > 0) {
+! memmove((char *)qpkt.data, qdata, qsize);
+ pktsize = qsize + CTL_HEADER_LEN;
+ while (pktsize & (sizeof(U_LONG)-1)) {
+***************
+*** 1542,1546 ****
+ return 1;
+ } else if ((hp = gethostbyname(host)) != 0) {
+! bcopy(hp->h_addr, (char *)num, sizeof(U_LONG));
+ if (fullhost != 0)
+ (void) strcpy(fullhost, hp->h_name);
+--- 1542,1546 ----
+ return 1;
+ } else if ((hp = gethostbyname(host)) != 0) {
+! memmove((char *)num, hp->h_addr, sizeof(U_LONG));
+ if (fullhost != 0)
+ (void) strcpy(fullhost, hp->h_name);
+*** /tmp/RCSA023494 Wed Jan 26 17:56:37 1994
+--- ntpq/ntpq_ops.c Wed Jan 26 16:33:34 1994
+***************
+*** 218,221 ****
+--- 218,222 ----
+ /*
+ * strsave - save a string
++ * XXX - should be in libntp.a
+ */
+ static char *
+***************
+*** 232,237 ****
+ }
+
+! bcopy(str, cp, len);
+! return cp;
+ }
+
+--- 233,238 ----
+ }
+
+! memmove(cp, str, len);
+! return (cp);
+ }
+
+***************
+*** 373,381 ****
+ if (cp != data)
+ *cp++ = ',';
+! bcopy(vl->name, cp, namelen);
+ cp += namelen;
+ if (valuelen != 0) {
+ *cp++ = '=';
+! bcopy(vl->value, cp, valuelen);
+ cp += valuelen;
+ }
+--- 374,382 ----
+ if (cp != data)
+ *cp++ = ',';
+! memmove(cp, vl->name, namelen);
+ cp += namelen;
+ if (valuelen != 0) {
+ *cp++ = '=';
+! memmove(cp, vl->value, valuelen);
+ cp += valuelen;
+ }
+***************
+*** 601,605 ****
+ return;
+
+! bzero((char *)tmplist, sizeof(tmplist));
+ if (pcmd->nargs >= 2)
+ doaddvlist(tmplist, pcmd->argval[1].string);
+--- 602,606 ----
+ return;
+
+! memset((char *)tmplist, 0, sizeof(tmplist));
+ if (pcmd->nargs >= 2)
+ doaddvlist(tmplist, pcmd->argval[1].string);
+***************
+*** 632,636 ****
+ return;
+
+! bzero((char *)tmplist, sizeof(tmplist));
+ doaddvlist(tmplist, pcmd->argval[1].string);
+
+--- 633,637 ----
+ return;
+
+! memset((char *)tmplist, 0, sizeof(tmplist));
+ doaddvlist(tmplist, pcmd->argval[1].string);
+
+***************
+*** 691,695 ****
+ return;
+
+! bzero((char *)tmplist, sizeof(tmplist));
+ if (pcmd->nargs >= 2)
+ doaddvlist(tmplist, pcmd->argval[1].string);
+--- 692,696 ----
+ return;
+
+! memset((char *)tmplist, 0, sizeof(tmplist));
+ if (pcmd->nargs >= 2)
+ doaddvlist(tmplist, pcmd->argval[1].string);
+***************
+*** 803,807 ****
+ return;
+
+! bzero((char *)tmplist, sizeof(tmplist));
+ if (pcmd->nargs >= 3)
+ doaddvlist(tmplist, pcmd->argval[2].string);
+--- 804,808 ----
+ return;
+
+! memset((char *)tmplist, 0, sizeof(tmplist));
+ if (pcmd->nargs >= 3)
+ doaddvlist(tmplist, pcmd->argval[2].string);
+***************
+*** 1283,1287 ****
+ extern struct ctl_var peer_var[];
+
+! bzero((char *)havevar, sizeof(havevar));
+ gettstamp(&ts);
+
+--- 1284,1288 ----
+ extern struct ctl_var peer_var[];
+
+! memset((char *)havevar, 0, sizeof(havevar));
+ gettstamp(&ts);
+
+*** /tmp/RCSA023500 Wed Jan 26 17:56:38 1994
+--- ntptrace/ntptrace.c Wed Jan 26 16:33:35 1994
+***************
+*** 112,117 ****
+ int errflg;
+ int c;
+! extern char *optarg;
+! extern int optind;
+ extern char *Version;
+
+--- 112,117 ----
+ int errflg;
+ int c;
+! extern char *ntp_optarg;
+! extern int ntp_optind;
+ extern char *Version;
+
+***************
+*** 122,126 ****
+ * Decode argument list
+ */
+! while ((c = getopt_l(argc, argv, "do:nr:t:v")) != EOF)
+ switch (c) {
+ case 'd':
+--- 122,126 ----
+ * Decode argument list
+ */
+! while ((c = ntp_getopt(argc, argv, "do:nr:t:v")) != EOF)
+ switch (c) {
+ case 'd':
+***************
+*** 131,138 ****
+ break;
+ case 'o':
+! sys_version = atoi(optarg);
+ break;
+ case 'r':
+! sys_retries = atoi(optarg);
+ if (sys_retries < 1) {
+ (void)fprintf(stderr,
+--- 131,138 ----
+ break;
+ case 'o':
+! sys_version = atoi(ntp_optarg);
+ break;
+ case 'r':
+! sys_retries = atoi(ntp_optarg);
+ if (sys_retries < 1) {
+ (void)fprintf(stderr,
+***************
+*** 143,147 ****
+ break;
+ case 't':
+! sys_timeout = atoi(optarg);
+ if (sys_timeout < 1) {
+ (void)fprintf(stderr,
+--- 143,147 ----
+ break;
+ case 't':
+! sys_timeout = atoi(ntp_optarg);
+ if (sys_timeout < 1) {
+ (void)fprintf(stderr,
+***************
+*** 161,165 ****
+ }
+
+! if (errflg || (argc - optind) > 1) {
+ (void) fprintf(stderr,
+ "usage: %s [-vnd] [-r retries] [-t timeout] [server]\n",
+--- 161,165 ----
+ }
+
+! if (errflg || (argc - ntp_optind) > 1) {
+ (void) fprintf(stderr,
+ "usage: %s [-vnd] [-r retries] [-t timeout] [server]\n",
+***************
+*** 183,188 ****
+ syslog(LOG_NOTICE, "%s", Version);
+
+! if ((argc - optind) == 1)
+! firstserver = addservbyname(argv[optind]);
+ else
+ firstserver = addservbyname("localhost");
+--- 183,188 ----
+ syslog(LOG_NOTICE, "%s", Version);
+
+! if ((argc - ntp_optind) == 1)
+! firstserver = addservbyname(argv[ntp_optind]);
+ else
+ firstserver = addservbyname("localhost");
+***************
+*** 503,507 ****
+
+ server = (struct server *)emalloc(sizeof(struct server));
+! bzero((char *)server, sizeof(struct server));
+
+ server->srcadr.sin_family = AF_INET;
+--- 503,507 ----
+
+ server = (struct server *)emalloc(sizeof(struct server));
+! memset((char *)server, 0, sizeof(struct server));
+
+ server->srcadr.sin_family = AF_INET;
+***************
+*** 617,621 ****
+ return 1;
+ } else if ((hp = gethostbyname(host)) != 0) {
+! bcopy(hp->h_addr, (char *)num, sizeof(U_LONG));
+ return 1;
+ }
+--- 617,621 ----
+ return 1;
+ } else if ((hp = gethostbyname(host)) != 0) {
+! memmove((char *)num, hp->h_addr, sizeof(U_LONG));
+ return 1;
+ }
+***************
+*** 736,740 ****
+ if (pp->stratum == 1) {
+ junk[4] = 0;
+! bcopy((char *)&pp->refid, junk, 4);
+ str = junk;
+ (void) fprintf(fp, "'%s'", str);
+--- 736,740 ----
+ if (pp->stratum == 1) {
+ junk[4] = 0;
+! memmove(junk, (char *)&pp->refid, 4);
+ str = junk;
+ (void) fprintf(fp, "'%s'", str);
+*** /tmp/RCSA023505 Wed Jan 26 17:56:39 1994
+--- parse/util/testdcf.c Wed Jan 26 16:33:35 1994
+***************
+*** 353,357 ****
+ }
+
+! bzero(term.c_cc, sizeof(term.c_cc));
+ term.c_cc[VMIN] = 1;
+ term.c_cflag = B50|CS8|CREAD|CLOCAL;
+--- 353,357 ----
+ }
+
+! memset(term.c_cc, 0, sizeof(term.c_cc));
+ term.c_cc[VMIN] = 1;
+ term.c_cflag = B50|CS8|CREAD|CLOCAL;
+*** /tmp/RCSA023510 Wed Jan 26 17:56:40 1994
+--- ppsclock/ppstest/ppstest.c Wed Jan 26 16:33:35 1994
+***************
+*** 103,107 ****
+ speed_t speed = B4800;
+
+! bzero((char *)&termios, sizeof(termios));
+ termios.c_cflag = CS8 | CREAD | CLOCAL;
+ termios.c_iflag = IGNCR;
+--- 103,107 ----
+ speed_t speed = B4800;
+
+! memset((char *)&termios, 0, sizeof(termios));
+ termios.c_cflag = CS8 | CREAD | CLOCAL;
+ termios.c_iflag = IGNCR;
+*** /tmp/RCSA023525 Wed Jan 26 17:56:43 1994
+--- scripts/autoconf Wed Jan 26 16:33:35 1994
+***************
+*** 324,329 ****
+ {
+ test -n "$verbose" && \
+! echo ' defining' HAVE_UNISTD_H
+! DEFS="$DEFS -DHAVE_UNISTD_H=1"
+ }
+
+--- 324,329 ----
+ {
+ test -n "$verbose" && \
+! echo ' defining' NTP_POSIX_SOURCE
+! DEFS="$DEFS -DNTP_POSIX_SOURCE=1"
+ }
+
+*** /tmp/RCSA023535 Wed Jan 26 17:56:46 1994
+--- util/Makefile.tmpl Wed Jan 26 16:33:35 1994
+***************
+*** 33,37 ****
+
+ tickadj: $(TKOBJS)
+! $(CC) $(COPTS) -o $@ $(TKOBJS) $(DAEMONLIBS) $(RESLIB) $(COMPAT)
+
+ ntptime: $(NTOBJS)
+--- 33,37 ----
+
+ tickadj: $(TKOBJS)
+! $(CC) $(COPTS) -o $@ $(TKOBJS) $(LIB) $(DAEMONLIBS) $(RESLIB) $(COMPAT)
+
+ ntptime: $(NTOBJS)
+*** /tmp/RCSA023535 Wed Jan 26 17:56:47 1994
+--- util/ntptime.c Wed Jan 26 16:33:36 1994
+***************
+*** 38,42 ****
+ extern int sigvec P((int, struct sigvec *, struct sigvec *));
+ void pll_trap P((void));
+- extern int getopt_l P((int, char **, char *));
+
+ static struct sigvec newsigsys; /* new sigvec status */
+--- 38,41 ----
+***************
+*** 52,57 ****
+ char *argv[];
+ {
+! extern int optind;
+! extern char *optarg;
+ int status;
+ struct ntptimeval ntv;
+--- 51,56 ----
+ char *argv[];
+ {
+! extern int ntp_optind;
+! extern char *ntp_optarg;
+ int status;
+ struct ntptimeval ntv;
+***************
+*** 67,71 ****
+ ntx.mode = 0;
+ progname = argv[0];
+! while ((c = getopt_l(argc, argv, optargs)) != EOF) switch (c) {
+ case 'c':
+ cost++;
+--- 66,70 ----
+ ntx.mode = 0;
+ progname = argv[0];
+! while ((c = ntp_getopt(argc, argv, optargs)) != EOF) switch (c) {
+ case 'c':
+ cost++;
+***************
+*** 73,81 ****
+ case 'e':
+ ntx.mode |= ADJ_ESTERROR;
+! ntx.esterror = atoi(optarg);
+ break;
+ case 'f':
+ ntx.mode |= ADJ_FREQUENCY;
+! ntx.frequency = (int) (atof(optarg) * (1 << SHIFT_USEC));
+ if (ntx.frequency < (-100 << SHIFT_USEC)
+ || ntx.frequency > ( 100 << SHIFT_USEC)) errflg++;
+--- 72,81 ----
+ case 'e':
+ ntx.mode |= ADJ_ESTERROR;
+! ntx.esterror = atoi(ntp_optarg);
+ break;
+ case 'f':
+ ntx.mode |= ADJ_FREQUENCY;
+! ntx.frequency = (int) (atof(ntp_optarg)
+! * (1 << SHIFT_USEC));
+ if (ntx.frequency < (-100 << SHIFT_USEC)
+ || ntx.frequency > ( 100 << SHIFT_USEC)) errflg++;
+***************
+*** 83,91 ****
+ case 'm':
+ ntx.mode |= ADJ_MAXERROR;
+! ntx.maxerror = atoi(optarg);
+ break;
+ case 'o':
+ ntx.mode |= ADJ_OFFSET;
+! ntx.offset = atoi(optarg);
+ break;
+ case 'r':
+--- 83,91 ----
+ case 'm':
+ ntx.mode |= ADJ_MAXERROR;
+! ntx.maxerror = atoi(ntp_optarg);
+ break;
+ case 'o':
+ ntx.mode |= ADJ_OFFSET;
+! ntx.offset = atoi(ntp_optarg);
+ break;
+ case 'r':
+***************
+*** 94,98 ****
+ case 's':
+ ntx.mode |= ADJ_STATUS;
+! ntx.status = atoi(optarg);
+ if (ntx.status < 0 || ntx.status > 4) errflg++;
+ break;
+--- 94,98 ----
+ case 's':
+ ntx.mode |= ADJ_STATUS;
+! ntx.status = atoi(ntp_optarg);
+ if (ntx.status < 0 || ntx.status > 4) errflg++;
+ break;
+***************
+*** 99,103 ****
+ case 't':
+ ntx.mode |= ADJ_TIMECONST;
+! ntx.time_constant = atoi(optarg);
+ if (ntx.time_constant < 0 || ntx.time_constant > MAXTC)
+ errflg++;
+--- 99,103 ----
+ case 't':
+ ntx.mode |= ADJ_TIMECONST;
+! ntx.time_constant = atoi(ntp_optarg);
+ if (ntx.time_constant < 0 || ntx.time_constant > MAXTC)
+ errflg++;
+***************
+*** 106,110 ****
+ errflg++;
+ }
+! if (errflg || (optind != argc)) {
+ (void) fprintf(stderr,
+ "usage: %s [-%s]\n\n\
+--- 106,110 ----
+ errflg++;
+ }
+! if (errflg || (ntp_optind != argc)) {
+ (void) fprintf(stderr,
+ "usage: %s [-%s]\n\n\
+*** /tmp/RCSA023535 Wed Jan 26 17:56:47 1994
+--- util/tickadj.c Wed Jan 26 16:33:36 1994
+***************
+*** 62,68 ****
+ static void writevar P((int, unsigned long, int));
+ static void readvar P((int, unsigned long, int *));
+- #ifndef NTP_POSIX_SOURCE
+- extern int getopt P((int, char **, char *));
+- #endif
+
+ /*
+--- 62,65 ----
+***************
+*** 76,81 ****
+ int c;
+ int errflg = 0;
+! extern int optind;
+! extern char *optarg;
+ unsigned long tickadj_offset;
+ unsigned long tick_offset;
+--- 73,78 ----
+ int c;
+ int errflg = 0;
+! extern int ntp_optind;
+! extern char *ntp_optarg;
+ unsigned long tickadj_offset;
+ unsigned long tick_offset;
+***************
+*** 95,99 ****
+
+ progname = argv[0];
+! while ((c = getopt(argc, argv, "a:Adkqpst:")) != EOF)
+ switch (c) {
+ case 'd':
+--- 92,96 ----
+
+ progname = argv[0];
+! while ((c = ntp_getopt(argc, argv, "a:Adkqpst:")) != EOF)
+ switch (c) {
+ case 'd':
+***************
+*** 110,118 ****
+ break;
+ case 'a':
+! writetickadj = atoi(optarg);
+ if (writetickadj <= 0) {
+ (void) fprintf(stderr,
+ "%s: unlikely value for tickadj: %s\n",
+! progname, optarg);
+ errflg++;
+ }
+--- 107,115 ----
+ break;
+ case 'a':
+! writetickadj = atoi(ntp_optarg);
+ if (writetickadj <= 0) {
+ (void) fprintf(stderr,
+ "%s: unlikely value for tickadj: %s\n",
+! progname, ntp_optarg);
+ errflg++;
+ }
+***************
+*** 125,133 ****
+ break;
+ case 't':
+! writetick = atoi(optarg);
+ if (writetick <= 0) {
+ (void) fprintf(stderr,
+ "%s: unlikely value for tick: %s\n",
+! progname, optarg);
+ errflg++;
+ }
+--- 122,130 ----
+ break;
+ case 't':
+! writetick = atoi(ntp_optarg);
+ if (writetick <= 0) {
+ (void) fprintf(stderr,
+ "%s: unlikely value for tick: %s\n",
+! progname, ntp_optarg);
+ errflg++;
+ }
+***************
+*** 137,141 ****
+ break;
+ }
+! if (errflg || optind != argc) {
+ (void) fprintf(stderr,
+ "usage: %s [-Aqsp] [-a newadj] [-t newtick]\n", progname);
+--- 134,138 ----
+ break;
+ }
+! if (errflg || ntp_optind != argc) {
+ (void) fprintf(stderr,
+ "usage: %s [-Aqsp] [-a newadj] [-t newtick]\n", progname);
+*** /tmp/RCSA023543 Wed Jan 26 17:56:49 1994
+--- xntpd/ntp_config.c Wed Jan 26 16:33:36 1994
+***************
+*** 341,345 ****
+ int errflg;
+ int c;
+! extern int optind;
+
+ debug = 0; /* no debugging by default */
+--- 341,345 ----
+ int errflg;
+ int c;
+! extern int ntp_optind;
+
+ debug = 0; /* no debugging by default */
+***************
+*** 353,357 ****
+ * the terminal, but we won't know to do that until we've
+ * parsed the command line. Do that now, crudely, and do it
+! * again later. Our getopt_l() is explicitly reusable, by the
+ * way. Your own mileage may vary.
+ */
+--- 353,357 ----
+ * the terminal, but we won't know to do that until we've
+ * parsed the command line. Do that now, crudely, and do it
+! * again later. Our ntp_getopt() is explicitly reusable, by the
+ * way. Your own mileage may vary.
+ */
+***************
+*** 362,366 ****
+ * Decode argument list
+ */
+! while ((c = getopt_l(argc, argv, xntp_options)) != EOF)
+ switch (c) {
+ case 'd':
+--- 362,366 ----
+ * Decode argument list
+ */
+! while ((c = ntp_getopt(argc, argv, xntp_options)) != EOF)
+ switch (c) {
+ case 'd':
+***************
+*** 374,378 ****
+ }
+
+! if (errflg || optind != argc) {
+ (void) fprintf(stderr,
+ "usage: %s [ -bd ] [ -c config_file ]\n", progname);
+--- 374,378 ----
+ }
+
+! if (errflg || ntp_optind != argc) {
+ (void) fprintf(stderr,
+ "usage: %s [ -bd ] [ -c config_file ]\n", progname);
+***************
+*** 379,383 ****
+ exit(2);
+ }
+! optind = 0; /* reset optind to restart getopt_l */
+
+ if (debug) {
+--- 379,383 ----
+ exit(2);
+ }
+! ntp_optind = 0; /* reset optind to restart ntp_getopt() */
+
+ if (debug) {
+***************
+*** 427,432 ****
+ int have_keyfile;
+ char keyfile[MAXFILENAME];
+! extern int optind;
+! extern char *optarg;
+ extern U_LONG info_auth_keyid;
+ FILEGEN *filegen;
+--- 427,432 ----
+ int have_keyfile;
+ char keyfile[MAXFILENAME];
+! extern int ntp_optind;
+! extern char *ntp_optarg;
+ extern U_LONG info_auth_keyid;
+ FILEGEN *filegen;
+***************
+*** 451,455 ****
+ * Decode argument list
+ */
+! while ((c = getopt_l(argc, argv, xntp_options)) != EOF) {
+ switch (c) {
+ case 'a':
+--- 451,455 ----
+ * Decode argument list
+ */
+! while ((c = ntp_getopt(argc, argv, xntp_options)) != EOF) {
+ switch (c) {
+ case 'a':
+***************
+*** 460,464 ****
+ break;
+ case 'c':
+! config_file = optarg;
+ break;
+ case 'd':
+--- 460,464 ----
+ break;
+ case 'c':
+! config_file = ntp_optarg;
+ break;
+ case 'd':
+***************
+*** 474,481 ****
+ l_fp tmp;
+
+! if (!atolfp(optarg, &tmp)) {
+ syslog(LOG_ERR,
+ "command line encryption delay value %s undecodable",
+! optarg);
+ errflg++;
+ } else if (tmp.l_ui != 0) {
+--- 474,481 ----
+ l_fp tmp;
+
+! if (!atolfp(ntp_optarg, &tmp)) {
+ syslog(LOG_ERR,
+ "command line encryption delay value %s undecodable",
+! ntp_optarg);
+ errflg++;
+ } else if (tmp.l_ui != 0) {
+***************
+*** 482,486 ****
+ syslog(LOG_ERR,
+ "command line encryption delay value %s is unlikely",
+! optarg);
+ errflg++;
+ } else {
+--- 482,486 ----
+ syslog(LOG_ERR,
+ "command line encryption delay value %s is unlikely",
+! ntp_optarg);
+ errflg++;
+ } else {
+***************
+*** 491,500 ****
+
+ case 'f':
+! stats_config(STATS_FREQ_FILE, optarg);
+ break;
+
+ case 'k':
+! getauthkeys(optarg);
+! if ((int)strlen(optarg) >= MAXFILENAME) {
+ syslog(LOG_ERR,
+ "key file name too LONG (>%d, sigh), no name resolution possible",
+--- 491,500 ----
+
+ case 'f':
+! stats_config(STATS_FREQ_FILE, ntp_optarg);
+ break;
+
+ case 'k':
+! getauthkeys(ntp_optarg);
+! if ((int)strlen(ntp_optarg) >= MAXFILENAME) {
+ syslog(LOG_ERR,
+ "key file name too LONG (>%d, sigh), no name resolution possible",
+***************
+*** 502,506 ****
+ } else {
+ have_keyfile = 1;
+! (void)strcpy(keyfile, optarg);
+ }
+ break;
+--- 502,506 ----
+ } else {
+ have_keyfile = 1;
+! (void)strcpy(keyfile, ntp_optarg);
+ }
+ break;
+***************
+*** 507,511 ****
+
+ case 'p':
+! stats_config(STATS_PID_FILE, optarg);
+ break;
+
+--- 507,511 ----
+
+ case 'p':
+! stats_config(STATS_PID_FILE, ntp_optarg);
+ break;
+
+***************
+*** 514,525 ****
+ l_fp tmp;
+
+! if (!atolfp(optarg, &tmp)) {
+ syslog(LOG_ERR,
+ "command line broadcast delay value %s undecodable",
+! optarg);
+ } else if (tmp.l_ui != 0) {
+ syslog(LOG_ERR,
+ "command line broadcast delay value %s is unlikely",
+! optarg);
+ } else {
+ proto_config(PROTO_BROADDELAY, tmp.l_f);
+--- 514,525 ----
+ l_fp tmp;
+
+! if (!atolfp(ntp_optarg, &tmp)) {
+ syslog(LOG_ERR,
+ "command line broadcast delay value %s undecodable",
+! ntp_optarg);
+ } else if (tmp.l_ui != 0) {
+ syslog(LOG_ERR,
+ "command line broadcast delay value %s is unlikely",
+! ntp_optarg);
+ } else {
+ proto_config(PROTO_BROADDELAY, tmp.l_f);
+***************
+*** 529,533 ****
+
+ case 's':
+! stats_config(STATS_STATSDIR, optarg);
+ break;
+
+--- 529,533 ----
+
+ case 's':
+! stats_config(STATS_STATSDIR, ntp_optarg);
+ break;
+
+***************
+*** 536,544 ****
+ int tkey;
+
+! tkey = atoi(optarg);
+ if (tkey <= 0 || tkey > NTP_MAXKEY) {
+ syslog(LOG_ERR,
+ "command line trusted key %s is unlikely",
+! optarg);
+ } else {
+ authtrust(tkey, (LONG)1);
+--- 536,544 ----
+ int tkey;
+
+! tkey = atoi(ntp_optarg);
+ if (tkey <= 0 || tkey > NTP_MAXKEY) {
+ syslog(LOG_ERR,
+ "command line trusted key %s is unlikely",
+! ntp_optarg);
+ } else {
+ authtrust(tkey, (LONG)1);
+***************
+*** 554,558 ****
+ }
+
+! if (errflg || optind != argc) {
+ (void) fprintf(stderr,
+ "usage: %s [ -bd ] [ -c config_file ]\n", progname);
+--- 554,558 ----
+ }
+
+! if (errflg || ntp_optind != argc) {
+ (void) fprintf(stderr,
+ "usage: %s [ -bd ] [ -c config_file ]\n", progname);
+***************
+*** 1130,1134 ****
+ }
+
+! bzero((char *)&clock, sizeof clock);
+ errflg = 0;
+ for (i = 2; i < ntokens-1; i++) {
+--- 1130,1134 ----
+ }
+
+! memset((char *)&clock, 0, sizeof clock);
+ errflg = 0;
+ for (i = 2; i < ntokens-1; i++) {
+***************
+*** 1582,1586 ****
+ * make up socket address. Clear it out for neatness.
+ */
+! bzero((char *)addr, sizeof(struct sockaddr_in));
+ addr->sin_family = AF_INET;
+ addr->sin_port = htons(NTP_PORT);
+--- 1582,1586 ----
+ * make up socket address. Clear it out for neatness.
+ */
+! memset((char *)addr, 0, sizeof(struct sockaddr_in));
+ addr->sin_family = AF_INET;
+ addr->sin_port = htons(NTP_PORT);
+*** /tmp/RCSA023543 Wed Jan 26 17:56:49 1994
+--- xntpd/ntp_control.c Wed Jan 26 16:33:36 1994
+***************
+*** 873,877 ****
+ }
+
+! bcopy(dp, (char *)datapt, dlen);
+ datapt += dlen;
+ datalinelen += dlen;
+--- 873,877 ----
+ }
+
+! memmove((char *)datapt, dp, dlen);
+ datapt += dlen;
+ datalinelen += dlen;
+***************
+*** 901,905 ****
+ if (len > (sizeof(buffer) - (cp - buffer) - 1))
+ len = sizeof(buffer) - (cp - buffer) - 1;
+! bcopy(data, cp, len);
+ cp += len;
+ *cp++ = '"';
+--- 901,905 ----
+ if (len > (sizeof(buffer) - (cp - buffer) - 1))
+ len = sizeof(buffer) - (cp - buffer) - 1;
+! memmove(cp, data, len);
+ cp += len;
+ *cp++ = '"';
+***************
+*** 1697,1701 ****
+ if (res_authokay)
+ ctl_sys_num_events = 0;
+! bzero((char *)wants, CS_MAXCODE+1);
+ gotvar = 0;
+ while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
+--- 1697,1701 ----
+ if (res_authokay)
+ ctl_sys_num_events = 0;
+! memset((char *)wants, 0, CS_MAXCODE+1);
+ gotvar = 0;
+ while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
+***************
+*** 1733,1737 ****
+ if (res_authokay)
+ peer->num_events = 0;
+! bzero((char*)wants, CP_MAXCODE+1);
+ gotvar = 0;
+ while ((v = ctl_getitem(peer_var, &valuep)) != 0) {
+--- 1733,1737 ----
+ if (res_authokay)
+ peer->num_events = 0;
+! memset((char*)wants, 0, CP_MAXCODE+1);
+ gotvar = 0;
+ while ((v = ctl_getitem(peer_var, &valuep)) != 0) {
+***************
+*** 1906,1910 ****
+ rpkt.status = htons(ctlclkstatus(&clock));
+ gotvar = 0;
+! bzero((char*)wants, CC_MAXCODE+1);
+ while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
+ if (v->flags & EOV) {
+--- 1906,1910 ----
+ rpkt.status = htons(ctlclkstatus(&clock));
+ gotvar = 0;
+! memset((char*)wants, 0, CC_MAXCODE+1);
+ while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
+ if (v->flags & EOV) {
+*** /tmp/RCSA023543 Wed Jan 26 17:56:50 1994
+--- xntpd/ntp_intres.c Wed Jan 26 16:33:37 1994
+***************
+*** 295,299 ****
+ len = strlen(name) + 1;
+ cp = emalloc((unsigned)len);
+! bcopy(name, cp, len);
+
+ ce = (struct conf_entry *)emalloc(sizeof(struct conf_entry));
+--- 295,299 ----
+ len = strlen(name) + 1;
+ cp = emalloc((unsigned)len);
+! memmove(cp, name, len);
+
+ ce = (struct conf_entry *)emalloc(sizeof(struct conf_entry));
+***************
+*** 348,354 ****
+
+ if (h_errno == TRY_AGAIN)
+! return 1;
+ #endif
+! return 0;
+ }
+
+--- 348,354 ----
+
+ if (h_errno == TRY_AGAIN)
+! return (1);
+ #endif
+! return (0);
+ }
+
+***************
+*** 358,364 ****
+ * only return one.
+ */
+! (void) bcopy(hp->h_addr, (char *)&(entry->ce_peeraddr),
+! sizeof(struct in_addr));
+! return 1;
+ }
+
+--- 358,365 ----
+ * only return one.
+ */
+! memmove((char *)&(entry->ce_peeraddr),
+! (char *)hp->h_addr,
+! sizeof(struct in_addr));
+! return (1);
+ }
+
+***************
+*** 381,385 ****
+ }
+
+! bzero((char *)&saddr, sizeof(saddr));
+ saddr.sin_family = AF_INET;
+ saddr.sin_port = htons(NTP_PORT); /* trash */
+--- 382,386 ----
+ }
+
+! memset((char *)&saddr, 0, sizeof(saddr));
+ saddr.sin_family = AF_INET;
+ saddr.sin_port = htons(NTP_PORT); /* trash */
+***************
+*** 449,453 ****
+ * Make up a request packet with the configuration info
+ */
+! bzero((char *)&reqpkt, sizeof(reqpkt));
+
+ reqpkt.rm_vn_mode = RM_VN_MODE(0, 0);
+--- 450,454 ----
+ * Make up a request packet with the configuration info
+ */
+! memset((char *)&reqpkt, 0, sizeof(reqpkt));
+
+ reqpkt.rm_vn_mode = RM_VN_MODE(0, 0);
+***************
+*** 457,461 ****
+ reqpkt.err_nitems = ERR_NITEMS(0, 1); /* one item */
+ reqpkt.mbz_itemsize = MBZ_ITEMSIZE(sizeof(struct conf_peer));
+! bcopy((char *)conf, reqpkt.data, sizeof(struct conf_peer));
+ reqpkt.keyid = htonl(req_keyid);
+
+--- 458,462 ----
+ reqpkt.err_nitems = ERR_NITEMS(0, 1); /* one item */
+ reqpkt.mbz_itemsize = MBZ_ITEMSIZE(sizeof(struct conf_peer));
+! memmove(reqpkt.data, (char *)conf, sizeof(struct conf_peer));
+ reqpkt.keyid = htonl(req_keyid);
+
+*** /tmp/RCSA023543 Wed Jan 26 17:56:50 1994
+--- xntpd/ntp_monitor.c Wed Jan 26 16:33:37 1994
+***************
+*** 103,107 ****
+ mon_hash = 0;
+ mon_hash_count = 0;
+! bzero((char *)&mon_mru_list, sizeof mon_mru_list);
+ }
+
+--- 103,107 ----
+ mon_hash = 0;
+ mon_hash_count = 0;
+! memset((char *)&mon_mru_list, 0, sizeof mon_mru_list);
+ }
+
+***************
+*** 122,126 ****
+ mon_hash = (struct mon_data *)
+ emalloc(MON_HASH_SIZE * sizeof(struct mon_data));
+! bzero((char *)mon_hash, MON_HASH_SIZE*sizeof(struct mon_data));
+ mon_hash_count = (int *)emalloc(MON_HASH_SIZE * sizeof(int));
+ mon_free_mem = 0;
+--- 122,127 ----
+ mon_hash = (struct mon_data *)
+ emalloc(MON_HASH_SIZE * sizeof(struct mon_data));
+! memset((char *)mon_hash, 0,
+! MON_HASH_SIZE*sizeof(struct mon_data));
+ mon_hash_count = (int *)emalloc(MON_HASH_SIZE * sizeof(int));
+ mon_free_mem = 0;
+*** /tmp/RCSA023543 Wed Jan 26 17:56:50 1994
+--- xntpd/ntp_peer.c Wed Jan 26 16:33:37 1994
+***************
+*** 440,444 ****
+ * Zero the whole thing for now. We might be pickier later.
+ */
+! bzero((char *)peer, sizeof(struct peer));
+
+ peer->srcadr = *srcadr;
+--- 440,444 ----
+ * Zero the whole thing for now. We might be pickier later.
+ */
+! memset((char *)peer, 0, sizeof(struct peer));
+
+ peer->srcadr = *srcadr;
+*** /tmp/RCSA023543 Wed Jan 26 17:56:51 1994
+--- xntpd/ntp_proto.c Wed Jan 26 16:33:37 1994
+***************
+*** 1079,1083 ****
+ else {
+ if (pps_control)
+! bcopy(PPSREFID, (char *)&sys_refid, 4);
+ else
+ sys_refid = peer->srcadr.sin_addr.s_addr;
+--- 1079,1083 ----
+ else {
+ if (pps_control)
+! memmove((char *)&sys_refid, PPSREFID, 4);
+ else
+ sys_refid = peer->srcadr.sin_addr.s_addr;
+***************
+*** 1128,1132 ****
+ sys_refid = peer->refid;
+ else
+! bcopy(PPSREFID, (char *)&sys_refid, 4);
+ }
+ }
+--- 1128,1132 ----
+ sys_refid = peer->refid;
+ else
+! memmove((char *)&sys_refid, PPSREFID, 4);
+ }
+ }
+***************
+*** 1251,1255 ****
+ printf("clear(%s)\n", ntoa(&peer->srcadr));
+ #endif
+! bzero(CLEAR_TO_ZERO(peer), LEN_CLEAR_TO_ZERO);
+ peer->hpoll = peer->minpoll;
+ peer->dispersion = NTP_MAXDISPERSE;
+--- 1251,1255 ----
+ printf("clear(%s)\n", ntoa(&peer->srcadr));
+ #endif
+! memset(CLEAR_TO_ZERO(peer), 0, LEN_CLEAR_TO_ZERO);
+ peer->hpoll = peer->minpoll;
+ peer->dispersion = NTP_MAXDISPERSE;
+*** /tmp/RCSA023543 Wed Jan 26 17:56:51 1994
+--- xntpd/ntp_request.c Wed Jan 26 16:33:38 1994
+***************
+*** 313,317 ****
+ * Copy data out of exbuf into the packet.
+ */
+! bcopy(exbuf, &rpkt.data[0], itemsize);
+ seqno++;
+ databytes = 0;
+--- 313,317 ----
+ * Copy data out of exbuf into the packet.
+ */
+! memmove(&rpkt.data[0], exbuf, itemsize);
+ seqno++;
+ databytes = 0;
+***************
+*** 683,687 ****
+ extern struct peer *sys_peer;
+
+! bzero((char *)&addr, sizeof addr);
+ addr.sin_family = AF_INET;
+ items = INFO_NITEMS(inpkt->err_nitems);
+--- 683,687 ----
+ extern struct peer *sys_peer;
+
+! memset((char *)&addr, 0, sizeof addr);
+ addr.sin_family = AF_INET;
+ items = INFO_NITEMS(inpkt->err_nitems);
+***************
+*** 774,778 ****
+ extern struct peer *sys_peer;
+
+! bzero((char *)&addr, sizeof addr);
+ addr.sin_family = AF_INET;
+ items = INFO_NITEMS(inpkt->err_nitems);
+--- 774,778 ----
+ extern struct peer *sys_peer;
+
+! memset((char *)&addr, 0, sizeof addr);
+ addr.sin_family = AF_INET;
+ items = INFO_NITEMS(inpkt->err_nitems);
+***************
+*** 1142,1146 ****
+ items = INFO_NITEMS(inpkt->err_nitems);
+ cp = (struct conf_peer *)inpkt->data;
+! bzero((char *)&peeraddr, sizeof(struct sockaddr_in));
+ peeraddr.sin_family = AF_INET;
+ peeraddr.sin_port = htons(NTP_PORT);
+--- 1142,1146 ----
+ items = INFO_NITEMS(inpkt->err_nitems);
+ cp = (struct conf_peer *)inpkt->data;
+! memset((char *)&peeraddr, 0, sizeof(struct sockaddr_in));
+ peeraddr.sin_family = AF_INET;
+ peeraddr.sin_port = htons(NTP_PORT);
+***************
+*** 1452,1457 ****
+ items = INFO_NITEMS(inpkt->err_nitems);
+ cr = (struct conf_restrict *)inpkt->data;
+! bzero((char *)&matchaddr, sizeof(struct sockaddr_in));
+! bzero((char *)&matchmask, sizeof(struct sockaddr_in));
+ matchaddr.sin_family = AF_INET;
+ matchmask.sin_family = AF_INET;
+--- 1452,1457 ----
+ items = INFO_NITEMS(inpkt->err_nitems);
+ cr = (struct conf_restrict *)inpkt->data;
+! memset((char *)&matchaddr, 0, sizeof(struct sockaddr_in));
+! memset((char *)&matchmask, 0, sizeof(struct sockaddr_in));
+ matchaddr.sin_family = AF_INET;
+ matchmask.sin_family = AF_INET;
+***************
+*** 1870,1874 ****
+ * Prepare sockaddr_in structure
+ */
+! bzero((char *)&laddr, sizeof laddr);
+ laddr.sin_family = AF_INET;
+ laddr.sin_port = ntohs(NTP_PORT);
+--- 1870,1874 ----
+ * Prepare sockaddr_in structure
+ */
+! memset((char *)&laddr, 0, sizeof laddr);
+ laddr.sin_family = AF_INET;
+ laddr.sin_port = ntohs(NTP_PORT);
+***************
+*** 2096,2100 ****
+ struct sockaddr_in addr;
+
+! bzero((char *)&addr, sizeof addr);
+ addr.sin_family = AF_INET;
+ addr.sin_port = htons(NTP_PORT);
+--- 2096,2100 ----
+ struct sockaddr_in addr;
+
+! memset((char *)&addr, 0, sizeof addr);
+ addr.sin_family = AF_INET;
+ addr.sin_port = htons(NTP_PORT);
+***************
+*** 2150,2155 ****
+ struct sockaddr_in addr;
+
+! bzero((char *)&addr, sizeof addr);
+! bzero((char *)&clock, sizeof clock);
+ addr.sin_family = AF_INET;
+ addr.sin_port = htons(NTP_PORT);
+--- 2150,2155 ----
+ struct sockaddr_in addr;
+
+! memset((char *)&addr, 0, sizeof addr);
+! memset((char *)&clock, 0, sizeof clock);
+ addr.sin_family = AF_INET;
+ addr.sin_port = htons(NTP_PORT);
+***************
+*** 2287,2291 ****
+ struct sockaddr_in addr;
+
+! bzero((char *)&addr, sizeof addr);
+ addr.sin_family = AF_INET;
+ addr.sin_port = htons(NTP_PORT);
+--- 2287,2291 ----
+ struct sockaddr_in addr;
+
+! memset((char *)&addr, 0, sizeof addr);
+ addr.sin_family = AF_INET;
+ addr.sin_port = htons(NTP_PORT);
+***************
+*** 2304,2308 ****
+ }
+
+! bzero((char *)&bug, sizeof bug);
+ refclock_buginfo(&addr, &bug);
+ if (bug.nvalues == 0 && bug.ntimes == 0) {
+--- 2304,2308 ----
+ }
+
+! memset((char *)&bug, 0, sizeof bug);
+ refclock_buginfo(&addr, &bug);
+ if (bug.nvalues == 0 && bug.ntimes == 0) {
+*** /tmp/RCSA023543 Wed Jan 26 17:56:52 1994
+--- xntpd/ntp_restrict.c Wed Jan 26 16:33:38 1994
+***************
+*** 82,86 ****
+ */
+ resfree = 0;
+! bzero((char *)resinit, sizeof resinit);
+
+ for (i = 1; i < INITRESLIST; i++) {
+--- 82,86 ----
+ */
+ resfree = 0;
+! memset((char *)resinit, 0, sizeof resinit);
+
+ for (i = 1; i < INITRESLIST; i++) {
+***************
+*** 235,239 ****
+ rl = (struct restrictlist *) emalloc(
+ INCRESLIST*sizeof(struct restrictlist));
+! bzero((char *)rl,
+ INCRESLIST*sizeof(struct restrictlist));
+
+--- 235,239 ----
+ rl = (struct restrictlist *) emalloc(
+ INCRESLIST*sizeof(struct restrictlist));
+! memset((char *)rl, 0,
+ INCRESLIST*sizeof(struct restrictlist));
+
+***************
+*** 281,285 ****
+ rlprev->next = rl->next;
+ restrictcount--;
+! bzero((char *)rl, sizeof(struct restrictlist));
+
+ rl->next = resfree;
+--- 281,285 ----
+ rlprev->next = rl->next;
+ restrictcount--;
+! memset((char *)rl, 0, sizeof(struct restrictlist));
+
+ rl->next = resfree;
+*** /tmp/RCSA023543 Wed Jan 26 17:56:52 1994
+--- xntpd/ntp_util.c Wed Jan 26 16:33:39 1994
+***************
+*** 224,230 ****
+ stats_drift_file = emalloc((u_int)(len + 1));
+ stats_temp_file = emalloc((u_int)(len + sizeof(".TEMP")));
+! bcopy(value, stats_drift_file, len+1);
+! bcopy(value, stats_temp_file, len);
+! bcopy(".TEMP", stats_temp_file + len, sizeof(".TEMP"));
+ L_CLR(&old_drift);
+
+--- 224,230 ----
+ stats_drift_file = emalloc((u_int)(len + 1));
+ stats_temp_file = emalloc((u_int)(len + sizeof(".TEMP")));
+! memmove(stats_drift_file, value, len+1);
+! memmove(stats_temp_file, value, len);
+! memmove(stats_temp_file + len, ".TEMP", sizeof(".TEMP"));
+ L_CLR(&old_drift);
+
+***************
+*** 450,454 ****
+ key_file_name = emalloc((u_int)(len + 1));
+
+! bcopy(keyfile, key_file_name, len+1);
+
+ authreadkeys(key_file_name);
+--- 450,454 ----
+ key_file_name = emalloc((u_int)(len + 1));
+
+! memmove(key_file_name, keyfile, len+1);
+
+ authreadkeys(key_file_name);
+*** /tmp/RCSA023543 Wed Jan 26 17:56:52 1994
+--- xntpd/refclock_as2201.c Wed Jan 26 16:33:39 1994
+***************
+*** 251,256 ****
+ * Just zero the data arrays
+ */
+! bzero((char *)gpsunits, sizeof gpsunits);
+! bzero((char *)unitinuse, sizeof unitinuse);
+
+ /*
+--- 251,256 ----
+ * Just zero the data arrays
+ */
+! memset((char *)gpsunits, 0, sizeof gpsunits);
+! memset((char *)unitinuse, 0, sizeof unitinuse);
+
+ /*
+***************
+*** 442,446 ****
+ }
+ }
+! bzero((char *)gps, sizeof(struct gpsunit));
+ gpsunits[unit] = gps;
+
+--- 442,446 ----
+ }
+ }
+! memset((char *)gps, 0, sizeof(struct gpsunit));
+ gpsunits[unit] = gps;
+
+***************
+*** 480,484 ****
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! bcopy(GPSREFID, (char *)&peer->refid, 4);
+ else
+ peer->refid = htonl(GPSHSREFID);
+--- 480,484 ----
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! memmove((char *)&peer->refid, GPSREFID, 4);
+ else
+ peer->refid = htonl(GPSHSREFID);
+***************
+*** 908,913 ****
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! bcopy(GPSREFID, (char *)&peer->refid,
+! 4);
+ else
+ peer->refid = htonl(GPSHSREFID);
+--- 908,913 ----
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! memmove((char *)&peer->refid,
+! GPSREFID, 4);
+ else
+ peer->refid = htonl(GPSHSREFID);
+*** /tmp/RCSA023543 Wed Jan 26 17:56:52 1994
+--- xntpd/refclock_chu.c Wed Jan 26 16:33:39 1994
+***************
+*** 294,299 ****
+ * Just zero the data arrays
+ */
+! bzero((char *)chuunits, sizeof chuunits);
+! bzero((char *)unitinuse, sizeof unitinuse);
+
+ /*
+--- 294,299 ----
+ * Just zero the data arrays
+ */
+! memset((char *)chuunits, 0, sizeof chuunits);
+! memset((char *)unitinuse, 0, sizeof unitinuse);
+
+ /*
+***************
+*** 462,466 ****
+ }
+ }
+! bzero((char *)chu, sizeof(struct chuunit));
+ chuunits[unit] = chu;
+
+--- 462,466 ----
+ }
+ }
+! memset((char *)chu, 0, sizeof(struct chuunit));
+ chuunits[unit] = chu;
+
+***************
+*** 499,507 ****
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! bcopy(CHUREFID, (char *)&peer->refid, 4);
+ else
+ peer->refid = htonl(CHUHSREFID);
+ unitinuse[unit] = 1;
+! return 1;
+
+ /*
+--- 499,507 ----
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! memmove((char *)&peer->refid, CHUREFID, 4);
+ else
+ peer->refid = htonl(CHUHSREFID);
+ unitinuse[unit] = 1;
+! return (1);
+
+ /*
+***************
+*** 1091,1095 ****
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! bcopy(CHUREFID, (char *)&peer->refid,4);
+ else
+ peer->refid = htonl(CHUHSREFID);
+--- 1091,1096 ----
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! memmove((char *)&peer->refid,
+! CHUREFID, 4);
+ else
+ peer->refid = htonl(CHUHSREFID);
+*** /tmp/RCSA023543 Wed Jan 26 17:56:53 1994
+--- xntpd/refclock_goes.c Wed Jan 26 16:33:39 1994
+***************
+*** 211,216 ****
+ * Just zero the data arrays
+ */
+! bzero((char *)goesunits, sizeof goesunits);
+! bzero((char *)unitinuse, sizeof unitinuse);
+
+ /*
+--- 211,216 ----
+ * Just zero the data arrays
+ */
+! memset((char *)goesunits, 0, sizeof goesunits);
+! memset((char *)unitinuse, 0, sizeof unitinuse);
+
+ /*
+***************
+*** 401,405 ****
+ }
+ }
+! bzero((char *)goes, sizeof(struct goesunit));
+ goesunits[unit] = goes;
+
+--- 401,405 ----
+ }
+ }
+! memset((char *)goes, 0, sizeof(struct goesunit));
+ goesunits[unit] = goes;
+
+***************
+*** 429,433 ****
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! bcopy(GOESREFID, (char *)&peer->refid, 4);
+ else
+ peer->refid = htonl(GOESHSREFID);
+--- 429,433 ----
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! memmove((char *)&peer->refid, GOESREFID, 4);
+ else
+ peer->refid = htonl(GOESHSREFID);
+***************
+*** 924,929 ****
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! bcopy(GOESREFID, (char *)&peer->refid,
+! 4);
+ else
+ peer->refid = htonl(GOESHSREFID);
+--- 924,929 ----
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! memmove((char *)&peer->refid,
+! GOESREFID, 4);
+ else
+ peer->refid = htonl(GOESHSREFID);
+*** /tmp/RCSA023543 Wed Jan 26 17:56:53 1994
+--- xntpd/refclock_gpstm.c Wed Jan 26 16:52:22 1994
+***************
+*** 18,22 ****
+ #ifdef SYS_BSDI
+ #undef HAVE_BSD_TTYS
+- #define HAVE_POSIX_TTYS
+ #include <sys/ioctl.h>
+ #endif
+--- 18,21 ----
+***************
+*** 30,34 ****
+ #endif /* HAVE_SYSV_TTYS */
+
+! #if defined(HAVE_POSIX_TTYS)
+ #include <termios.h>
+ #endif
+--- 29,33 ----
+ #endif /* HAVE_SYSV_TTYS */
+
+! #if defined(HAVE_TERMIOS)
+ #include <termios.h>
+ #endif
+***************
+*** 203,208 ****
+ * Just zero the data arrays
+ */
+! bzero((char *)gpstm_units, sizeof gpstm_units);
+! bzero((char *)unitinuse, sizeof unitinuse);
+
+ /*
+--- 202,207 ----
+ * Just zero the data arrays
+ */
+! memset((char *)gpstm_units, 0, sizeof gpstm_units);
+! memset((char *)unitinuse, 0, sizeof unitinuse);
+
+ /*
+***************
+*** 278,282 ****
+ }
+ #endif /* HAVE_SYSV_TTYS */
+! #if defined(HAVE_POSIX_TTYS)
+ /*
+ * POSIX serial line parameters (termios interface)
+--- 277,281 ----
+ }
+ #endif /* HAVE_SYSV_TTYS */
+! #if defined(HAVE_TERMIOS)
+ /*
+ * POSIX serial line parameters (termios interface)
+***************
+*** 331,335 ****
+ #endif /* STREAM */
+ }
+! #endif /* HAVE_POSIX_TTYS */
+ #if defined(HAVE_BSD_TTYS)
+ /*
+--- 330,334 ----
+ #endif /* STREAM */
+ }
+! #endif /* HAVE_TERMIOS */
+ #if defined(HAVE_BSD_TTYS)
+ /*
+***************
+*** 393,397 ****
+ }
+ }
+! bzero((char *)gpstm, sizeof(struct gpstm_unit));
+ gpstm_units[unit] = gpstm;
+
+--- 392,396 ----
+ }
+ }
+! memset((char *)gpstm, 0, sizeof(struct gpstm_unit));
+ gpstm_units[unit] = gpstm;
+
+***************
+*** 420,424 ****
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! bcopy(REFID, (char *)&peer->refid, 4);
+ else
+ peer->refid = htonl(HSREFID);
+--- 419,423 ----
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! memmove((char *)&peer->refid, REFID, 4);
+ else
+ peer->refid = htonl(HSREFID);
+***************
+*** 928,932 ****
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! bcopy(REFID, (char *)&peer->refid, 4);
+ else
+ peer->refid = htonl(HSREFID);
+--- 927,932 ----
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! memmove((char *)&peer->refid,
+! REFID, 4);
+ else
+ peer->refid = htonl(HSREFID);
+*** /tmp/RCSA023543 Wed Jan 26 17:56:53 1994
+--- xntpd/refclock_irig.c Wed Jan 26 16:33:40 1994
+***************
+*** 170,175 ****
+ * Just zero the data arrays
+ */
+! bzero((char *) irigunits, sizeof irigunits);
+! bzero((char *) unitinuse, sizeof unitinuse);
+
+ /*
+--- 170,175 ----
+ * Just zero the data arrays
+ */
+! memset((char *) irigunits, 0, sizeof irigunits);
+! memset((char *) unitinuse, 0, sizeof unitinuse);
+
+ /*
+***************
+*** 251,255 ****
+ }
+ }
+! bzero((char *) irig, sizeof(struct irigunit));
+
+ irigunits[unit] = irig;
+--- 251,255 ----
+ }
+ }
+! memset((char *) irig, 0, sizeof(struct irigunit));
+
+ irigunits[unit] = irig;
+***************
+*** 277,281 ****
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! bcopy(IRIGREFID, (char *) &peer->refid, 4);
+ else
+ peer->refid = htonl(IRIGHSREFID);
+--- 277,281 ----
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! memmove((char *) &peer->refid, IRIGREFID, 4);
+ else
+ peer->refid = htonl(IRIGHSREFID);
+***************
+*** 486,491 ****
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! bcopy(IRIGREFID, (char *) &peer->refid,
+! 4);
+ else
+ peer->refid = htonl(IRIGHSREFID);
+--- 486,491 ----
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! memmove((char *) &peer->refid,
+! IRIGREFID, 4);
+ else
+ peer->refid = htonl(IRIGHSREFID);
+*** /tmp/RCSA023543 Wed Jan 26 17:56:53 1994
+--- xntpd/refclock_leitch.c Wed Jan 26 16:33:40 1994
+***************
+*** 145,150 ****
+ leitch_init()
+ {
+! bzero((char*)leitchunits,sizeof(leitchunits));
+! bzero((char*)unitinuse,sizeof(unitinuse));
+ }
+
+--- 145,150 ----
+ leitch_init()
+ {
+! memset((char*)leitchunits, 0, sizeof(leitchunits));
+! memset((char*)unitinuse, 0, sizeof(unitinuse));
+ }
+
+***************
+*** 271,275 ****
+
+ leitch = &leitchunits[unit];
+! bzero((char*)leitch,sizeof(*leitch));
+
+ #if defined(HAVE_SYSV_TTYS)
+--- 271,275 ----
+
+ leitch = &leitchunits[unit];
+! memset((char*)leitch, 0, sizeof(*leitch));
+
+ #if defined(HAVE_SYSV_TTYS)
+*** /tmp/RCSA023543 Wed Jan 26 17:56:54 1994
+--- xntpd/refclock_local.c Wed Jan 26 16:33:40 1994
+***************
+*** 101,106 ****
+ * Just zero the data arrays
+ */
+! bzero((char *)lclunits, sizeof lclunits);
+! bzero((char *)unitinuse, sizeof unitinuse);
+ }
+
+--- 101,106 ----
+ * Just zero the data arrays
+ */
+! memset((char *)lclunits, 0, sizeof lclunits);
+! memset((char *)unitinuse, 0, sizeof unitinuse);
+ }
+
+***************
+*** 149,153 ****
+ }
+ }
+! bzero((char *)lcl, sizeof(struct lclunit));
+ lclunits[unit] = lcl;
+
+--- 149,153 ----
+ }
+ }
+! memset((char *)lcl, 0, sizeof(struct lclunit));
+ lclunits[unit] = lcl;
+
+***************
+*** 167,171 ****
+ peer->stratum = (u_char)unit;
+ if (unit <= 1)
+! bcopy(LCLREFID, (char *)&peer->refid, 4);
+ else
+ peer->refid = htonl(LCLHSREFID);
+--- 167,171 ----
+ peer->stratum = (u_char)unit;
+ if (unit <= 1)
+! memmove((char *)&peer->refid, LCLREFID, 4);
+ else
+ peer->refid = htonl(LCLHSREFID);
+*** /tmp/RCSA023576 Wed Jan 26 17:56:54 1994
+--- xntpd/refclock_msfees.c Wed Jan 26 16:33:41 1994
+***************
+*** 380,385 ****
+ register int i;
+ /* Just zero the data arrays */
+! bzero((char *)eesunits, sizeof eesunits);
+! bzero((char *)unitinuse, sizeof unitinuse);
+
+ acceptable_slop.l_ui = 0;
+--- 380,385 ----
+ register int i;
+ /* Just zero the data arrays */
+! memset((char *)eesunits, 0, sizeof eesunits);
+! memset((char *)unitinuse, 0, sizeof unitinuse);
+
+ acceptable_slop.l_ui = 0;
+***************
+*** 507,511 ****
+ else ees = (struct eesunit *) emalloc(sizeof(struct eesunit));
+ }
+! bzero((char *)ees, sizeof(struct eesunit));
+ eesunits[unit] = ees;
+
+--- 507,511 ----
+ else ees = (struct eesunit *) emalloc(sizeof(struct eesunit));
+ }
+! memset((char *)ees, 0, sizeof(struct eesunit));
+ eesunits[unit] = ees;
+
+***************
+*** 548,553 ****
+ if (!io_addclock(&ees->io)) {
+ /* Oh shit. Just close and return. */
+! syslog(LOG_ERR, "ees clock: io_addclock(%s): %m",
+! eesdev);
+ goto screwed;
+ }
+--- 548,552 ----
+ if (!io_addclock(&ees->io)) {
+ /* Oh shit. Just close and return. */
+! syslog(LOG_ERR, "ees clock: io_addclock(%s): %m", eesdev);
+ goto screwed;
+ }
+***************
+*** 560,575 ****
+ peer->rootdelay = 0; /* ++++ */
+ peer->rootdispersion = 0; /* ++++ */
+! if (stratumtouse[unit] <= 1)
+! { bcopy(EESREFID, (char *)&peer->refid, 4);
+! if (unit>0 && unit<10) ((char *)&peer->refid)[3] = '0' + unit;
+ }
+- else peer->refid = htonl(EESHSREFID);
+ unitinuse[unit] = 1;
+ syslog(LOG_ERR, "ees clock: %s OK on %d", eesdev, unit);
+! return 1;
+
+ screwed:
+! if (fd232 != -1) (void) close(fd232);
+! return 0;
+ }
+
+--- 559,577 ----
+ peer->rootdelay = 0; /* ++++ */
+ peer->rootdispersion = 0; /* ++++ */
+! if (stratumtouse[unit] <= 1) {
+! memmove((char *)&peer->refid, EESREFID, 4);
+! if (unit > 0 && unit < 10)
+! ((char *)&peer->refid)[3] = '0' + unit;
+! } else {
+! peer->refid = htonl(EESHSREFID);
+ }
+ unitinuse[unit] = 1;
+ syslog(LOG_ERR, "ees clock: %s OK on %d", eesdev, unit);
+! return (1);
+
+ screwed:
+! if (fd232 != -1)
+! (void) close(fd232);
+! return (0);
+ }
+
+***************
+*** 860,864 ****
+ sincelast = this_uisec - ees->last_step;
+
+! bzero(&ppsclockev, sizeof ppsclockev);
+
+ rc = ioctl(ees->io.fd, CIOGETEV, (char *) &ppsclockev);
+--- 862,866 ----
+ sincelast = this_uisec - ees->last_step;
+
+! memset(&ppsclockev, 0, sizeof ppsclockev);
+
+ rc = ioctl(ees->io.fd, CIOGETEV, (char *) &ppsclockev);
+***************
+*** 1444,1449 ****
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1) {
+! bcopy(EESREFID, (char *)&peer->refid,
+! 4);
+ if (unit>0 && unit<10)
+ ((char *)&peer->refid)[3] =
+--- 1446,1451 ----
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1) {
+! memmove((char *)&peer->refid,
+! EESREFID, 4);
+ if (unit>0 && unit<10)
+ ((char *)&peer->refid)[3] =
+*** /tmp/RCSA023576 Wed Jan 26 17:56:55 1994
+--- xntpd/refclock_mx4200.c Wed Jan 26 16:33:41 1994
+***************
+*** 263,268 ****
+ * Just zero the data arrays
+ */
+! bzero((char *)mx4200units, sizeof mx4200units);
+! bzero((char *)unitinuse, sizeof unitinuse);
+
+ /*
+--- 263,268 ----
+ * Just zero the data arrays
+ */
+! memset((char *)mx4200units, 0, sizeof mx4200units);
+! memset((char *)unitinuse, 0, sizeof unitinuse);
+
+ /*
+***************
+*** 487,491 ****
+ }
+
+! bzero((char *)mx4200, sizeof(struct mx4200unit));
+ mx4200units[unit] = mx4200;
+
+--- 487,491 ----
+ }
+
+! memset((char *)mx4200, 0, sizeof(struct mx4200unit));
+ mx4200units[unit] = mx4200;
+
+***************
+*** 513,517 ****
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! bcopy(MX4200REFID, (char *)&peer->refid, 4);
+ else
+ peer->refid = htonl(MX4200HSREFID);
+--- 513,517 ----
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! memmove((char *)&peer->refid, MX4200REFID, 4);
+ else
+ peer->refid = htonl(MX4200HSREFID);
+***************
+*** 702,706 ****
+ return;
+ mx4200->lencode = n;
+! bcopy(dpt, mx4200->lastcode, n);
+
+ /*
+--- 702,706 ----
+ return;
+ mx4200->lencode = n;
+! memmove(mx4200->lastcode, dpt, n);
+
+ /*
+***************
+*** 1052,1057 ****
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! bcopy(MX4200REFID, (char *)&peer->refid,
+! 4);
+ else
+ peer->refid = htonl(MX4200HSREFID);
+--- 1052,1057 ----
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! memmove((char *)&peer->refid,
+! MX4200REFID, 4);
+ else
+ peer->refid = htonl(MX4200HSREFID);
+***************
+*** 1116,1120 ****
+ mx4200 = mx4200units[unit];
+
+! bzero((char *)bug, sizeof(*bug));
+ bug->nvalues = 10;
+ bug->ntimes = 2;
+--- 1116,1120 ----
+ mx4200 = mx4200units[unit];
+
+! memset((char *)bug, 0, sizeof(*bug));
+ bug->nvalues = 10;
+ bug->ntimes = 2;
+***************
+*** 1212,1216 ****
+
+ cp = buf;
+! bzero((char *)jt, sizeof(*jt));
+
+ if ((cp = strchr(cp, ',')) == NULL)
+--- 1212,1216 ----
+
+ cp = buf;
+! memset((char *)jt, 0, sizeof(*jt));
+
+ if ((cp = strchr(cp, ',')) == NULL)
+*** /tmp/RCSA023576 Wed Jan 26 17:56:55 1994
+--- xntpd/refclock_omega.c Wed Jan 26 16:33:42 1994
+***************
+*** 227,232 ****
+ * Just zero the data arrays
+ */
+! bzero((char *)omegaunits, sizeof omegaunits);
+! bzero((char *)unitinuse, sizeof unitinuse);
+
+ /*
+--- 227,232 ----
+ * Just zero the data arrays
+ */
+! memset((char *)omegaunits, 0, sizeof omegaunits);
+! memset((char *)unitinuse, 0, sizeof unitinuse);
+
+ /*
+***************
+*** 417,421 ****
+ }
+ }
+! bzero((char *)omega, sizeof(struct omegaunit));
+ omegaunits[unit] = omega;
+
+--- 417,421 ----
+ }
+ }
+! memset((char *)omega, 0, sizeof(struct omegaunit));
+ omegaunits[unit] = omega;
+
+***************
+*** 445,449 ****
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! bcopy(OMEGAREFID, (char *)&peer->refid, 4);
+ else
+ peer->refid = htonl(OMEGAHSREFID);
+--- 445,449 ----
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! memmove((char *)&peer->refid, OMEGAREFID, 4);
+ else
+ peer->refid = htonl(OMEGAHSREFID);
+***************
+*** 928,933 ****
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! bcopy(OMEGAREFID, (char *)&peer->refid,
+! 4);
+ else
+ peer->refid = htonl(OMEGAHSREFID);
+--- 928,933 ----
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! memmove((char *)&peer->refid,
+! OMEGAREFID, 4);
+ else
+ peer->refid = htonl(OMEGAHSREFID);
+*** /tmp/RCSA023576 Wed Jan 26 17:56:56 1994
+--- xntpd/refclock_parse.c Wed Jan 26 16:33:42 1994
+***************
+*** 1068,1072 ****
+ return;
+ }
+! bcopy((caddr_t)&rbufp->recv_space, (caddr_t)&parsetime, sizeof(parsetime_t));
+
+ /*
+--- 1068,1074 ----
+ return;
+ }
+! memmove((caddr_t)&parsetime,
+! (caddr_t)&rbufp->recv_space,
+! sizeof(parsetime_t));
+
+ /*
+***************
+*** 2009,2013 ****
+ parse_init()
+ {
+! bzero((caddr_t)parseunits, sizeof parseunits);
+ }
+
+--- 2011,2015 ----
+ parse_init()
+ {
+! memset((caddr_t)parseunits, 0, sizeof parseunits);
+ }
+
+***************
+*** 2169,2173 ****
+ }
+
+! bzero((char *)parse, sizeof(struct parseunit));
+ parseunits[unit] = parse;
+
+--- 2171,2175 ----
+ }
+
+! memset((char *)parse, 0, sizeof(struct parseunit));
+ parseunits[unit] = parse;
+
+***************
+*** 2204,2208 ****
+ peer->stratum = STRATUM_REFCLOCK;
+ if (peer->stratum <= 1)
+! bcopy(parse->parse_type->cl_id, (char *)&peer->refid, 4);
+ else
+ peer->refid = htonl(PARSEHSREFID);
+--- 2206,2210 ----
+ peer->stratum = STRATUM_REFCLOCK;
+ if (peer->stratum <= 1)
+! memmove((char *)&peer->refid, parse->parse_type->cl_id, 4);
+ else
+ peer->refid = htonl(PARSEHSREFID);
+***************
+*** 2233,2237 ****
+ {
+ #ifndef _PC_VDISABLE
+! bzero((char *)tm.c_cc, sizeof(tm.c_cc));
+ #else
+ int disablec;
+--- 2235,2239 ----
+ {
+ #ifndef _PC_VDISABLE
+! memset((char *)tm.c_cc, 0, sizeof(tm.c_cc));
+ #else
+ int disablec;
+***************
+*** 2587,2591 ****
+ parse->peer->stratum = (u_char)(in->fudgeval1 & 0xf);
+ if (parse->peer->stratum <= 1)
+! bcopy(parse->parse_type->cl_id, (char *)&parse->peer->refid, 4);
+ else
+ parse->peer->refid = htonl(PARSEHSREFID);
+--- 2589,2595 ----
+ parse->peer->stratum = (u_char)(in->fudgeval1 & 0xf);
+ if (parse->peer->stratum <= 1)
+! memmove((char *)&parse->peer->refid,
+! parse->parse_type->cl_id,
+! 4);
+ else
+ parse->peer->refid = htonl(PARSEHSREFID);
+***************
+*** 3280,3284 ****
+ {
+ parse->localdata = (void *)malloc(sizeof(poll_timer_t));
+! bzero((char *)parse->localdata, sizeof(poll_timer_t));
+
+ pt = (poll_timer_t *)parse->localdata;
+--- 3284,3288 ----
+ {
+ parse->localdata = (void *)malloc(sizeof(poll_timer_t));
+! memset((char *)parse->localdata, 0, sizeof(poll_timer_t));
+
+ pt = (poll_timer_t *)parse->localdata;
+*** /tmp/RCSA023576 Wed Jan 26 17:56:56 1994
+--- xntpd/refclock_pst.c Wed Jan 26 16:33:42 1994
+***************
+*** 438,443 ****
+ * Just zero the data arrays
+ */
+! bzero((char *)pstunits, sizeof pstunits);
+! bzero((char *)unitinuse, sizeof unitinuse);
+
+ /*
+--- 438,443 ----
+ * Just zero the data arrays
+ */
+! memset((char *)pstunits, 0, sizeof pstunits);
+! memset((char *)unitinuse, 0, sizeof unitinuse);
+
+ /*
+***************
+*** 630,634 ****
+ }
+ }
+! bzero((char *)pst, sizeof(struct pstunit));
+ pstunits[unit] = pst;
+
+--- 630,634 ----
+ }
+ }
+! memset((char *)pst, 0, sizeof(struct pstunit));
+ pstunits[unit] = pst;
+
+***************
+*** 663,667 ****
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! bcopy(WWVREFID, (char *)&peer->refid, 4);
+ else
+ peer->refid = htonl(PSTHSREFID);
+--- 663,667 ----
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! memmove((char *)&peer->refid, WWVREFID, 4);
+ else
+ peer->refid = htonl(PSTHSREFID);
+***************
+*** 1461,1467 ****
+ if (stratumtouse[pst->unit] <= 1) {
+ if (pst->station >= 0)
+! bcopy(WWVREFID, (char *)&pst->peer->refid, 4);
+ else
+! bcopy(WWVHREFID, (char *)&pst->peer->refid, 4);
+ }
+
+--- 1461,1467 ----
+ if (stratumtouse[pst->unit] <= 1) {
+ if (pst->station >= 0)
+! memmove((char *)&pst->peer->refid, WWVREFID, 4);
+ else
+! memmove((char *)&pst->peer->refid, WWVHREFID, 4);
+ }
+
+*** /tmp/RCSA023576 Wed Jan 26 17:56:57 1994
+--- xntpd/refclock_tpro.c Wed Jan 26 16:33:43 1994
+***************
+*** 131,136 ****
+ * Just zero the data arrays
+ */
+! bzero((char *)tprounits, sizeof tprounits);
+! bzero((char *)unitinuse, sizeof unitinuse);
+
+ /*
+--- 131,136 ----
+ * Just zero the data arrays
+ */
+! memset((char *)tprounits, 0, sizeof tprounits);
+! memset((char *)unitinuse, 0, sizeof unitinuse);
+
+ /*
+***************
+*** 201,205 ****
+ }
+ }
+! bzero((char *)tpro, sizeof(struct tprounit));
+ tprounits[unit] = tpro;
+
+--- 201,205 ----
+ }
+ }
+! memset((char *)tpro, 0, sizeof(struct tprounit));
+ tprounits[unit] = tpro;
+
+***************
+*** 226,230 ****
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! bcopy(TPROREFID, (char *)&peer->refid, 4);
+ else
+ peer->refid = htonl(TPROHSREFID);
+--- 226,230 ----
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! memmove((char *)&peer->refid, TPROREFID, 4);
+ else
+ peer->refid = htonl(TPROHSREFID);
+***************
+*** 416,421 ****
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! bcopy(TPROREFID, (char *)&peer->refid,
+! 4);
+ else
+ peer->refid = htonl(TPROHSREFID);
+--- 416,421 ----
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! memmove((char *)&peer->refid,
+! TPROREFID, 4);
+ else
+ peer->refid = htonl(TPROHSREFID);
+*** /tmp/RCSA023576 Wed Jan 26 17:56:57 1994
+--- xntpd/refclock_wwvb.c Wed Jan 26 16:33:43 1994
+***************
+*** 220,225 ****
+ * Just zero the data arrays
+ */
+! bzero((char *)wwvbunits, sizeof wwvbunits);
+! bzero((char *)unitinuse, sizeof unitinuse);
+
+ /*
+--- 220,225 ----
+ * Just zero the data arrays
+ */
+! memset((char *)wwvbunits, 0, sizeof wwvbunits);
+! memset((char *)unitinuse, 0, sizeof unitinuse);
+
+ /*
+***************
+*** 408,412 ****
+ }
+ }
+! bzero((char *)wwvb, sizeof(struct wwvbunit));
+ wwvbunits[unit] = wwvb;
+
+--- 408,412 ----
+ }
+ }
+! memset((char *)wwvb, 0, sizeof(struct wwvbunit));
+ wwvbunits[unit] = wwvb;
+
+***************
+*** 436,440 ****
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! bcopy(WWVBREFID, (char *)&peer->refid, 4);
+ else
+ peer->refid = htonl(WWVBHSREFID);
+--- 436,440 ----
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! memmove((char *)&peer->refid, WWVBREFID, 4);
+ else
+ peer->refid = htonl(WWVBHSREFID);
+***************
+*** 957,962 ****
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! bcopy(WWVBREFID, (char *)&peer->refid,
+! 4);
+ else
+ peer->refid = htonl(WWVBHSREFID);
+--- 957,962 ----
+ peer->stratum = stratumtouse[unit];
+ if (stratumtouse[unit] <= 1)
+! memmove((char *)&peer->refid,
+! WWVBREFID, 4);
+ else
+ peer->refid = htonl(WWVBHSREFID);
+*** /tmp/RCSA023592 Wed Jan 26 17:56:58 1994
+--- xntpdc/ntpdc.c Wed Jan 26 16:33:43 1994
+***************
+*** 222,227 ****
+ int c;
+ int errflg = 0;
+! extern int optind;
+! extern char *optarg;
+
+ delay_time.l_ui = 0;
+--- 222,227 ----
+ int c;
+ int errflg = 0;
+! extern int ntp_optind;
+! extern char *ntp_optarg;
+
+ delay_time.l_ui = 0;
+***************
+*** 229,236 ****
+
+ progname = argv[0];
+! while ((c = getopt_l(argc, argv, "c:dilnps")) != EOF)
+ switch (c) {
+ case 'c':
+! ADDCMD(optarg);
+ break;
+ case 'd':
+--- 229,236 ----
+
+ progname = argv[0];
+! while ((c = ntp_getopt(argc, argv, "c:dilnps")) != EOF)
+ switch (c) {
+ case 'c':
+! ADDCMD(ntp_optarg);
+ break;
+ case 'd':
+***************
+*** 262,270 ****
+ exit(2);
+ }
+! if (optind == argc) {
+ ADDHOST(DEFHOST);
+ } else {
+! for (; optind < argc; optind++)
+! ADDHOST(argv[optind]);
+ }
+
+--- 262,270 ----
+ exit(2);
+ }
+! if (ntp_optind == argc) {
+ ADDHOST(DEFHOST);
+ } else {
+! for (; ntp_optind < argc; ntp_optind++)
+! ADDHOST(argv[ntp_optind]);
+ }
+
+***************
+*** 440,444 ****
+ *rdata = datap = pktdata;
+ lastseq = 999; /* too big to be a sequence number */
+! bzero(haveseq, sizeof(haveseq));
+ FD_ZERO(&fds);
+
+--- 440,444 ----
+ *rdata = datap = pktdata;
+ lastseq = 999; /* too big to be a sequence number */
+! memset(haveseq, 0, sizeof(haveseq));
+ FD_ZERO(&fds);
+
+***************
+*** 601,605 ****
+ if ((datap + datasize) > (pktdata + pktdatasize))
+ growpktdata();
+! bcopy((char *)rpkt.data, datap, datasize);
+ datap += datasize;
+ if (firstpkt) {
+--- 601,605 ----
+ if ((datap + datasize) > (pktdata + pktdatasize))
+ growpktdata();
+! memmove(datap, (char *)rpkt.data, datasize);
+ datap += datasize;
+ if (firstpkt) {
+***************
+*** 635,639 ****
+ int datasize;
+
+! bzero((char *)&qpkt, sizeof qpkt);
+
+ qpkt.rm_vn_mode = RM_VN_MODE(0, 0);
+--- 635,639 ----
+ int datasize;
+
+! memset((char *)&qpkt, 0, sizeof qpkt);
+
+ qpkt.rm_vn_mode = RM_VN_MODE(0, 0);
+***************
+*** 643,647 ****
+ datasize = qitems * qsize;
+ if (datasize != 0 && qdata != NULL) {
+! bcopy(qdata, (char *)qpkt.data, datasize);
+ qpkt.err_nitems = ERR_NITEMS(0, qitems);
+ qpkt.mbz_itemsize = MBZ_ITEMSIZE(qsize);
+--- 643,647 ----
+ datasize = qitems * qsize;
+ if (datasize != 0 && qdata != NULL) {
+! memmove((char *)qpkt.data, qdata, datasize);
+ qpkt.err_nitems = ERR_NITEMS(0, qitems);
+ qpkt.mbz_itemsize = MBZ_ITEMSIZE(qsize);
+***************
+*** 1092,1096 ****
+ return 1;
+ } else if ((hp = gethostbyname(host)) != 0) {
+! bcopy(hp->h_addr, (char *)num, sizeof(U_LONG));
+ if (fullhost != 0)
+ (void) strcpy(fullhost, hp->h_name);
+--- 1092,1096 ----
+ return 1;
+ } else if ((hp = gethostbyname(host)) != 0) {
+! memmove((char *)num, hp->h_addr, sizeof(U_LONG));
+ if (fullhost != 0)
+ (void) strcpy(fullhost, hp->h_name);
+*** /tmp/RCSA023592 Wed Jan 26 17:56:58 1994
+--- xntpdc/ntpdc_ops.c Wed Jan 26 16:33:44 1994
+***************
+*** 443,447 ****
+ if (pp->stratum <= 1) {
+ junk[4] = 0;
+! bcopy((char *)&pp->refid, junk, 4);
+ str = junk;
+ } else {
+--- 443,447 ----
+ if (pp->stratum <= 1) {
+ junk[4] = 0;
+! memmove(junk, (char *)&pp->refid, 4);
+ str = junk;
+ } else {
+***************
+*** 789,793 ****
+ if (is->stratum <= 1) {
+ junk[4] = 0;
+! bcopy((char *)&is->refid, junk, 4);
+ str = junk;
+ } else {
+--- 789,793 ----
+ if (is->stratum <= 1) {
+ junk[4] = 0;
+! memmove(junk, (char *)&is->refid, 4);
+ str = junk;
+ } else {
+***************
+*** 2193,2197 ****
+
+ err = 0;
+! bzero((char *)&fudgedata, sizeof fudgedata);
+ fudgedata.clockadr = pcmd->argval[0].netnum;
+
+--- 2193,2197 ----
+
+ err = 0;
+! memset((char *)&fudgedata, 0, sizeof fudgedata);
+ fudgedata.clockadr = pcmd->argval[0].netnum;
+
+*** /tmp/RCSA023598 Wed Jan 26 17:56:59 1994
+--- xntpres/xntpres.c Wed Jan 26 16:33:44 1994
+***************
+*** 149,153 ****
+ char *cp;
+ FILE *in;
+! extern int optind;
+
+ progname = argv[0];
+--- 149,153 ----
+ char *cp;
+ FILE *in;
+! extern int ntp_optind;
+
+ progname = argv[0];
+***************
+*** 181,185 ****
+ syslog(LOG_NOTICE, Version);
+
+! while ((c = getopt_l(argc, argv, "dr")) != EOF)
+ switch (c) {
+ case 'd':
+--- 181,185 ----
+ syslog(LOG_NOTICE, Version);
+
+! while ((c = ntp_getopt(argc, argv, "dr")) != EOF)
+ switch (c) {
+ case 'd':
+***************
+*** 193,197 ****
+ break;
+ }
+! if (errflg || (optind + 3) != argc) {
+ (void) fprintf(stderr,
+ "usage: %s [-d] [-r] keyid keyfile conffile\n", progname);
+--- 193,197 ----
+ break;
+ }
+! if (errflg || (ntp_optind + 3) != argc) {
+ (void) fprintf(stderr,
+ "usage: %s [-d] [-r] keyid keyfile conffile\n", progname);
+***************
+*** 200,210 ****
+ }
+
+! if (!atouint(argv[optind], &req_keyid)) {
+! syslog(LOG_ERR, "undecodeable keyid %s", argv[optind]);
+ exit(1);
+ }
+
+! keyfile = argv[optind+1];
+! conffile = argv[optind+2];
+
+ /*
+--- 200,210 ----
+ }
+
+! if (!atouint(argv[ntp_optind], &req_keyid)) {
+! syslog(LOG_ERR, "undecodeable keyid %s", argv[ntp_optind]);
+ exit(1);
+ }
+
+! keyfile = argv[ntp_optind+1];
+! conffile = argv[ntp_optind+2];
+
+ /*
+***************
+*** 354,358 ****
+ len = strlen(name) + 1;
+ cp = emalloc((unsigned)len);
+! bcopy(name, cp, len);
+
+ ce = (struct conf_entry *)emalloc(sizeof(struct conf_entry));
+--- 354,358 ----
+ len = strlen(name) + 1;
+ cp = emalloc((unsigned)len);
+! memmove(cp, name, len);
+
+ ce = (struct conf_entry *)emalloc(sizeof(struct conf_entry));
+***************
+*** 409,413 ****
+ return 1;
+ #endif
+! return 0;
+ }
+
+--- 409,413 ----
+ return 1;
+ #endif
+! return (0);
+ }
+
+***************
+*** 417,423 ****
+ * only return one.
+ */
+! (void) bcopy(hp->h_addr, (char *)&(entry->ce_peeraddr),
+! sizeof(struct in_addr));
+! return 1;
+ }
+
+--- 417,424 ----
+ * only return one.
+ */
+! memmove((char *)&(entry->ce_peeraddr),
+! hp->h_addr,
+! sizeof(struct in_addr));
+! return (1);
+ }
+
+***************
+*** 440,444 ****
+ }
+
+! bzero((char *)&saddr, sizeof(saddr));
+ saddr.sin_family = AF_INET;
+ saddr.sin_port = htons(NTP_PORT); /* trash */
+--- 441,445 ----
+ }
+
+! memset((char *)&saddr, 0, sizeof(saddr));
+ saddr.sin_family = AF_INET;
+ saddr.sin_port = htons(NTP_PORT); /* trash */
+***************
+*** 500,504 ****
+ * Make up a request packet with the configuration info
+ */
+! bzero((char *)&reqpkt, sizeof(reqpkt));
+
+ reqpkt.rm_vn_mode = RM_VN_MODE(0, 0);
+--- 501,505 ----
+ * Make up a request packet with the configuration info
+ */
+! memset((char *)&reqpkt, 0, sizeof(reqpkt));
+
+ reqpkt.rm_vn_mode = RM_VN_MODE(0, 0);
+***************
+*** 508,512 ****
+ reqpkt.err_nitems = ERR_NITEMS(0, 1); /* one item */
+ reqpkt.mbz_itemsize = MBZ_ITEMSIZE(sizeof(struct conf_peer));
+! bcopy((char *)conf, reqpkt.data, sizeof(struct conf_peer));
+ reqpkt.keyid = htonl(req_keyid);
+
+--- 509,513 ----
+ reqpkt.err_nitems = ERR_NITEMS(0, 1); /* one item */
+ reqpkt.mbz_itemsize = MBZ_ITEMSIZE(sizeof(struct conf_peer));
+! memmove(reqpkt.data, (char *)conf, sizeof(struct conf_peer));
+ reqpkt.keyid = htonl(req_keyid);
+
+
diff --git a/usr.sbin/xntpd/patches/patch.40 b/usr.sbin/xntpd/patches/patch.40
new file mode 100644
index 0000000..7f1941d
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.40
@@ -0,0 +1,92 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa23994; 13 Apr 94 15:58 EDT
+Received: from adrastea.lcs.mit.edu by louie.udel.edu id aa07113;
+ 13 Apr 94 15:44 EDT
+Received: by adrastea.lcs.mit.edu; id AA04845; Wed, 13 Apr 1994 15:44:23 -0400
+Date: Wed, 13 Apr 1994 15:44:23 -0400
+From: Garrett Wollman <wollman@adrastea.lcs.mit.edu>
+Message-Id: <9404131944.AA04845@adrastea.lcs.mit.edu>
+To: Mills@udel.edu
+Cc: Garrett Wollman <wollman@adrastea.lcs.mit.edu>,
+ Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
+Subject: Re: You xntp modifications...
+In-Reply-To: <9404122159.aa18355@huey.udel.edu>
+References: <9404122159.aa18355@huey.udel.edu>
+
+<<On Tue, 12 Apr 94 21:59:57 EDT, Mills@udel.edu said:
+
+> Note that we are two versions further along, what with the average of
+> a patch per day, so it would be survivable if this issue could be
+> cleared up ASAP.
+
+This patch, applied relative to my previous patch, provides for both
+behaviors.
+
+
+*** xntpd/xntpd/ntp_control.c Wed Apr 13 12:37:51 1994
+--- ntp_control.c Wed Apr 13 12:38:42 1994
+***************
+*** 264,271 ****
+--- 264,283 ----
+ /*
+ * System and processor definitions. These will change for the gizmo board.
+ */
++ #ifndef HAVE_UNAME
++ #ifndef STR_SYSTEM
++ #define STR_SYSTEM "UNIX"
++ #endif
++ #ifndef STR_PROCESSOR
++ #define STR_PROCESSOR "unknown"
++ #endif
++
++ static char str_system[] = STR_SYSTEM;
++ static char str_processor[] = STR_PROCESSOR;
++ #else
+ #include <sys/utsname.h>
+ static struct utsname utsname;
++ #endif /* HAVE_UNAME */
+
+ /*
+ * Trap structures. We only allow a few of these, and send
+***************
+*** 426,433 ****
+--- 438,447 ----
+ {
+ int i;
+
++ #ifdef HAVE_UNAME
+ uname(&utsname);
+
++ #endif /* HAVE_UNAME */
+ ctl_clr_stats();
+
+ ctl_auth_keyid = 0;
+***************
+*** 1262,1273 ****
+--- 1276,1297 ----
+ ctl_putuint(sys_var[CS_LEAPWARNING].text, (U_LONG)leap_warning);
+ break;
+ case CS_PROCESSOR:
++ #ifndef HAVE_UNAME
++ ctl_putstr(sys_var[CS_PROCESSOR].text, str_processor,
++ sizeof(str_processor) - 1);
++ #else
+ ctl_putstr(sys_var[CS_PROCESSOR].text, utsname.machine,
+ strlen(utsname.machine));
++ #endif /* HAVE_UNAME */
+ break;
+ case CS_SYSTEM:
++ #ifndef HAVE_UNAME
++ ctl_putstr(sys_var[CS_SYSTEM].text, str_system,
++ sizeof(str_system) - 1);
++ #else
+ ctl_putstr(sys_var[CS_SYSTEM].text, utsname.sysname,
+ strlen(utsname.sysname));
++ #endif /* HAVE_UNAME */
+ break;
+ case CS_KEYID:
+ ctl_putuint(sys_var[CS_KEYID].text, (U_LONG)0);
+
+
+[no save]
+
diff --git a/usr.sbin/xntpd/patches/patch.41 b/usr.sbin/xntpd/patches/patch.41
new file mode 100644
index 0000000..5d1f91c
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.41
@@ -0,0 +1,50 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa13197; 16 Apr 94 22:05 EDT
+Received: from motgate.mot.com by louie.udel.edu id aa18176; 16 Apr 94 21:57 EDT
+Received: from pobox.mot.com ([129.188.137.100]) by motgate.mot.com with SMTP (5.67b/IDA-1.4.4/MOT-3.1 for <mills@udel.edu>)
+ id AA01015; Sat, 16 Apr 1994 20:57:21 -0500
+Received: from merlin.dev.cdx.mot.com by pobox.mot.com with SMTP (5.67b/IDA-1.4.4/MOT-3.1 for <mills@udel.edu>)
+ id AA29067; Sat, 16 Apr 1994 20:57:19 -0500
+Received: from ronald.dev.cdx.mot.com (ronald.dev.cdx.mot.com [134.33.39.18]) by merlin.dev.cdx.mot.com (8.6.5/8.6.5) with ESMTP id VAA06544; Sat, 16 Apr 1994 21:57:12 -0400
+From: "Gregory M. Paris" <paris@merlin.dev.cdx.mot.com>
+Received: from localhost (paris@localhost) by ronald.dev.cdx.mot.com (8.6.5/8.6.5) id VAA22231; Sat, 16 Apr 1994 21:57:11 -0400
+Date: Sat, 16 Apr 1994 21:57:11 -0400
+Message-Id: <199404170157.VAA22231@ronald.dev.cdx.mot.com>
+To: mills@udel.edu
+Subject: 3.3y patch
+
+Dave,
+
+I had the same problem compiling 3.3p as I got with 3.3y. The fix
+was to move a #endif that seems to be out of place in xntpd/ntp_unixclock.c.
+It now compiles fine on my HP-UX 9.03. Here's the patch.
+
+Greg
+
+--
+Greg Paris <paris@merlin.dev.cdx.mot.com>
+Motorola Inc, Information Systems Group, 20 Cabot Blvd, Mansfield, MA 02048-1193
+"Your Plastic Pal who's fun to be with." TM Sirius Cybernetics
+These posts are self-disclamatory.
+
+##################################################
+*** xntpd/ntp_unixclock.c.orig Mon Apr 11 22:19:21 1994
+--- xntpd/ntp_unixclock.c Sat Apr 16 21:49:15 1994
+***************
+*** 386,391 ****
+--- 386,392 ----
+ #undef K_TICK_NAME
+ #undef N_NAME
+ }
++ #endif /* SYS_UNIXWARE1 */
+ #endif /* HAVE_READKMEM */
+
+ #if defined(SOLARIS)&&defined(ADJTIME_IS_ACCURATE)
+***************
+*** 583,586 ****
+ *tick = (U_LONG)txc.tick;
+ }
+ #endif /* SYS_LINUX */
+- #endif /* SYS_UNIXWARE1 */
+--- 584,586 ----
+
diff --git a/usr.sbin/xntpd/patches/patch.42 b/usr.sbin/xntpd/patches/patch.42
new file mode 100644
index 0000000..78c9bdf
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.42
@@ -0,0 +1,38 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa00358; 19 Apr 94 17:48 EDT
+Received: from swan.cl.cam.ac.uk by louie.udel.edu id aa12986;
+ 19 Apr 94 17:40 EDT
+Received: from labes.cl.cam.ac.uk (user pb (rfc931)) by swan.cl.cam.ac.uk
+ with SMTP (PP-6.5) to cl; Tue, 19 Apr 1994 22:39:48 +0100
+To: Mills@udel.edu
+cc: Piete Brooks <Piete.Brooks@cl.cam.ac.uk>
+Subject: Re: Multicast NTP - take 1
+In-reply-to: Your message of Tue, 19 Apr 1994 12:29:25 -0400. <9404191229.aa28742@huey.udel.edu>
+Date: Tue, 19 Apr 1994 22:39:44 +0100
+From: Piete Brooks <Piete.Brooks@cl.cam.ac.uk>
+Message-ID: <"swan.cl.cam.:138990:940419214000"@cl.cam.ac.uk>
+
+Shucks !
+
+I omitted the "-c" to diff ...
+
+*** xntpd/refclock_msfees.c.dist Thu Jan 27 14:03:59 1994
+--- xntpd/refclock_msfees.c Tue Apr 19 10:58:57 1994
+***************
+*** 139,145 ****
+ #define INH_DELAY_PPS BITS_TO_L_FP( 0, 9600)
+
+ #ifndef STREAM_PP1
+! #define STREAM_PP1 "ppsclockd\0<-- patch space for module name1 -->"
+ #endif
+ #ifndef STREAM_PP2
+ #define STREAM_PP2 "ppsclock\0<-- patch space for module name2 -->"
+--- 139,145 ----
+ #define INH_DELAY_PPS BITS_TO_L_FP( 0, 9600)
+
+ #ifndef STREAM_PP1
+! #define STREAM_PP1 "ppsclocd\0<-- patch space for module name1 -->"
+ #endif
+ #ifndef STREAM_PP2
+ #define STREAM_PP2 "ppsclock\0<-- patch space for module name2 -->"
+
diff --git a/usr.sbin/xntpd/patches/patch.43 b/usr.sbin/xntpd/patches/patch.43
new file mode 100644
index 0000000..92f9200
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.43
@@ -0,0 +1,48 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa00412; 19 Apr 94 18:04 EDT
+Received: from swan.cl.cam.ac.uk by louie.udel.edu id aa13181;
+ 19 Apr 94 17:44 EDT
+Received: from labes.cl.cam.ac.uk (user pb (rfc931)) by swan.cl.cam.ac.uk
+ with SMTP (PP-6.5) to cl; Tue, 19 Apr 1994 22:44:05 +0100
+To: Mills@udel.edu
+cc: Piete Brooks <Piete.Brooks@cl.cam.ac.uk>
+Subject: Re: Cisco/Multicast/ntp3.3m
+In-reply-to: Your message of Tue, 19 Apr 1994 12:24:31 -0400. <9404191224.aa28707@huey.udel.edu>
+Date: Tue, 19 Apr 1994 22:43:58 +0100
+From: Piete Brooks <Piete.Brooks@cl.cam.ac.uk>
+Message-ID: <"swan.cl.cam.:140740:940419214417"@cl.cam.ac.uk>
+
+> Yes, I think you have caught all the gotchas.
+
+I fear not :-((
+
+> I take it you have the latest kernel mods.
+
+Look for a call sign I assume ....
+Do I take it that they are **REQUIRED** ? :-(((
+
+
+Other problems .....
+
+It appears that you have your own in.h in include/ntp_in.h
+
+I suspect that that is why things are failing ...
+Why not use the syatem's own in.h ??
+
+To make it compile I added:
+
+*** include/ntp_in.h.dist Thu Apr 14 16:20:29 1994
+--- include/ntp_in.h Tue Apr 19 21:40:12 1994
+***************
+*** 19,24 ****
+--- 19,27 ----
+
+ #ifndef _netinet_in_h
+ #define _netinet_in_h
++ #define _NETINET_IN_H_
++ #define _SYS_IN_INCLUDED
++ #define __IN_HEADER
+
+ /*
+ * Protocols
+
diff --git a/usr.sbin/xntpd/patches/patch.5 b/usr.sbin/xntpd/patches/patch.5
new file mode 100644
index 0000000..2225804
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.5
@@ -0,0 +1,49 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa14816; 27 Jan 94 5:15 EST
+Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa11733;
+ 27 Jan 94 5:09 EST
+Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
+ id AA25056 (5.65c-6/7.3v-FAU); Thu, 27 Jan 1994 11:09:06 +0100
+Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
+ id AA09091 (5.65c-6/7.3m-FAU); Thu, 27 Jan 1994 11:09:03 +0100
+From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
+Message-Id: <199401271009.AA09091@faui43.informatik.uni-erlangen.de>
+Subject: Re: Solaribum
+To: Mills@udel.edu
+Date: Thu, 27 Jan 94 11:08:55 MET
+Cc: Frank.Kardel@informatik.uni-erlangen.de, Piete.Brooks@cl.cam.ac.uk,
+ Paul_Vixie@corpmis.sjc.hw.sony.com
+In-Reply-To: <9401261207.aa10860@huey.udel.edu>; from "Mills@udel.edu" at Jan 26, 94 12:07 pm
+X-Mailer: ELM [version 2.3 PL11]
+
+
+And another corer generator to be removed:
+
+===================================================================
+RCS file: /src/NTP/REPOSITORY/v3/xntpd/ntp_control.c,v
+retrieving revision 3.22
+diff -c -r3.22 xntpd/ntp_control.c
+*** xntpd/ntp_control.c:3.22 1994/01/26 21:56:23
+--- xntpd/ntp_control.c 1994/01/27 10:03:01
+***************
+*** 2132,2138 ****
+ for (i = 1; i <= CC_MAXCODE; i++)
+ if (wants[i])
+ ctl_putclock(i, &clock, 1);
+! for (i = 0; !(clock.kv_list[i].flags & EOV); i++)
+ if (wants[i+CC_MAXCODE+1])
+ ctl_putdata(clock.kv_list[i].text,
+ strlen(clock.kv_list[i].text), 0);
+--- 2132,2138 ----
+ for (i = 1; i <= CC_MAXCODE; i++)
+ if (wants[i])
+ ctl_putclock(i, &clock, 1);
+! for (i = 0; clock.kv_list && !(clock.kv_list[i].flags & EOV); i++)
+ if (wants[i+CC_MAXCODE+1])
+ ctl_putdata(clock.kv_list[i].text,
+ strlen(clock.kv_list[i].text), 0);
+--
+ Frank Kardel (kardel@informatik.uni-erlangen.de)
+ All SCSI disks will from now on be required to send an email
+ notice 24 hours prior to complete hardware failure!
+
diff --git a/usr.sbin/xntpd/patches/patch.6 b/usr.sbin/xntpd/patches/patch.6
new file mode 100644
index 0000000..220acad
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.6
@@ -0,0 +1,550 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa17107; 27 Jan 94 14:37 EST
+Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa16998;
+ 27 Jan 94 14:34 EST
+Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
+ id AA29914 (5.65c-6/7.3v-FAU); Thu, 27 Jan 1994 20:34:08 +0100
+Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
+ id AA23509 (5.65c-6/7.3m-FAU); Thu, 27 Jan 1994 20:34:05 +0100
+From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
+Message-Id: <199401271934.AA23509@faui43.informatik.uni-erlangen.de>
+Subject: Re: Solaribum
+To: Mills@udel.edu
+Date: Thu, 27 Jan 94 20:33:59 MET
+Cc: Frank.Kardel@informatik.uni-erlangen.de, Piete.Brooks@cl.cam.ac.uk,
+ Paul_Vixie@corpmis.sjc.hw.sony.com
+In-Reply-To: <9401271111.aa16183@huey.udel.edu>; from "Mills@udel.edu" at Jan 27, 94 11:11 am
+X-Mailer: ELM [version 2.3 PL11]
+
+
+> Guys,
+
+> Two masive patches collided in midair here, leaving broken parts scattered
+> over three counties. The National Time Safety Board has investigated,
+> but been unable, ...
+
+Additional efforts of the european branch of the NTPSB have uncovered
+that the collision was due to low visibility across the atlantic.
+
+And I wanted to go on:
+ All measures have been taken to limit the effects of the crash to a
+ minimum and to resume normal aircraft operation as soon as possible.
+
+ All crew members and passengers are required to apply following patch
+ to xntp3.3y.tar.Z for increased comfort and safety. This patch should
+ enable us to resume normal operation again.
+
+ After applying the patches you may remove following debris:
+
+ include/ntp_machine.h.rej
+ xntpd/ntp_config.c.rej
+ xntpd/ntp_control.c.rej
+
+Unfortunately I did a test compile and the results of that will
+extend the ground stay of the 3.3y aircraft considerably.
+(You may start thinking about bringing up 3.3xx - see below)
+
+SunOS 4.x.x does NOT have the new highly portable "memmove()"
+routine. The lack of this will mean that we will have to
+#define memmove(a, b, c) memcpy(a, b, c)
+or find something else. I'd like to leave this to Paul.
+Also on Sunos 4.x there are implicit declarations of bzero due
+the the FDSET macro from the system header files. So I am not
+so sure whether strictly using mem* is the best or whether we should
+add b* prototypes to l_stdlib.h. I think Paul has now something
+to work on. Anyhow, the patches below will rectify some problems
+but the resulting code still needs much polishing (providing memmove
+where it is missing e.g. SunOS4.x).
+
+In order to get a flying version fast (3.3xx) Dave could apply my
+patch he is holding to 3.3x - that should then make a workable
+version. 3.3y can then be cleaned up slowly (starting with the
+patches below and then port it again to the rest of the systems).
+
+Sorry about the bad news.
+
+> I have one more patch from Frank which I will hold on to until the aircraft
+> is recertified.
+
+That one is still to be applied because without it, it is possible
+to shoot down any plane around the NTP universe that is bearing
+the 3.3x banner (but can be applied to 3.3x).
+
+
+For the 3.3y construction crew:
+
+diff -c -r ../yy/include/ntp_machine.h ./include/ntp_machine.h
+*** ../yy/include/ntp_machine.h Thu Jan 27 15:03:23 1994
+--- ./include/ntp_machine.h Thu Jan 27 19:13:35 1994
+***************
+*** 121,139 ****
+ to the correct broadcast address - are these
+ implementations broken or did the spec change ?
+
+- HAVE_UNISTD_H - Maybe should be part of NTP_POSIX_SOURCE ?
+-
+ DEFINITIONS FOR SYSTEM && PROCESSOR
+ STR_SYSTEM - value of system variable
+ STR_PROCESSOR - value of processor variable
+
+ You could just put the defines on the DEFS line in machines/<os> file.
+! I don't since there are lost of different types compiler that a systemm might
+! have, some that can do proto typing and others that cannot on the saem system.
+! I get a chanse to twiddle some of the configuration paramasters at compile
+! time based on compler/machine combinatsions by using this include file.
+! See convex, aix and sun configurations see how complex it gets.
+!
+ */
+
+
+--- 121,141 ----
+ to the correct broadcast address - are these
+ implementations broken or did the spec change ?
+
+ DEFINITIONS FOR SYSTEM && PROCESSOR
+ STR_SYSTEM - value of system variable
+ STR_PROCESSOR - value of processor variable
+
+ You could just put the defines on the DEFS line in machines/<os> file.
+! I don't since there are lots of different types of compilers that a system might
+! have, some that can do proto typing and others that cannot on the same system.
+! I get a chance to twiddle some of the configuration parameters at compile
+! time based on compiler/machine combinations by using this include file.
+! See convex, aix and sun configurations see how complex it get.
+!
+! Note that it _is_ considered reasonable to add some system-specific defines
+! to the machine/<os> file if it would be too inconvenient to puzzle them out
+! in this file.
+!
+ */
+
+
+diff -c -r ../yy/parse/parse.c ./parse/parse.c
+*** ../yy/parse/parse.c Thu Jan 27 00:25:18 1994
+--- ./parse/parse.c Thu Jan 27 20:18:58 1994
+***************
+*** 29,40 ****
+ #include "sys/time.h"
+ #include "sys/errno.h"
+
+- #include "ntp_fp.h"
+- #include "ntp_unixtime.h"
+- #include "ntp_calendar.h"
+-
+- #include "parse.h"
+-
+ #if defined(PARSESTREAM) && (defined(SYS_SUNOS4) || defined(SYS_SOLARIS)) && defined(STREAM)
+ /*
+ * Sorry, but in SunOS 4.x kernels there are no
+--- 29,34 ----
+***************
+*** 44,51 ****
+--- 38,54 ----
+ #define _ntp_string_h
+ extern void bcopy();
+ extern void bzero();
++ #else
++ #define bzero(_X_, _Y_) memset(_X_, 0, _Y_)
++ #define bcopy(_X_, _Y_, _Z_) memmove(_Y_, _X_, _Z_)
+ #endif
+
++ #include "ntp_fp.h"
++ #include "ntp_unixtime.h"
++ #include "ntp_calendar.h"
++
++ #include "parse.h"
++
+ #include "ntp_stdlib.h"
+
+ #ifdef PARSESTREAM
+diff -c -r ../yy/xntpd/ntp_config.c ./xntpd/ntp_config.c
+*** ../yy/xntpd/ntp_config.c Thu Jan 27 15:03:47 1994
+--- ./xntpd/ntp_config.c Thu Jan 27 19:18:40 1994
+***************
+*** 1,4 ****
+! /* ntp_config.c,v 3.1 1993/07/06 01:11:12 jbj Exp
+ * ntp_config.c - read and apply configuration information
+ */
+ #define RESOLVE_INTERNAL /* gdt */
+--- 1,4 ----
+! /*
+ * ntp_config.c - read and apply configuration information
+ */
+ #define RESOLVE_INTERNAL /* gdt */
+***************
+*** 375,388 ****
+ break;
+ }
+
+! if (errflg || optind != argc) {
+ (void) fprintf(stderr, "usage: %s [ -abd ] [ -c config_file ] [ -e encryption delay ]\n", progname);
+ (void) fprintf(stderr, "\t\t[ -f frequency file ] [ -k key file ] [ -l log file ]\n");
+ (void) fprintf(stderr, "\t\t[ -p pid file ] [ -r broadcast delay ] [ -s status directory ]\n");
+ (void) fprintf(stderr, "\t\t[ -t trusted key ] [ -v sys variable ] [ -V default sys variable ]\n");
+ exit(2);
+ }
+! optind = 0; /* reset optind to restart getopt_l */
+
+ if (debug) {
+ #ifdef NTP_POSIX_SOURCE
+--- 375,388 ----
+ break;
+ }
+
+! if (errflg || ntp_optind != argc) {
+ (void) fprintf(stderr, "usage: %s [ -abd ] [ -c config_file ] [ -e encryption delay ]\n", progname);
+ (void) fprintf(stderr, "\t\t[ -f frequency file ] [ -k key file ] [ -l log file ]\n");
+ (void) fprintf(stderr, "\t\t[ -p pid file ] [ -r broadcast delay ] [ -s status directory ]\n");
+ (void) fprintf(stderr, "\t\t[ -t trusted key ] [ -v sys variable ] [ -V default sys variable ]\n");
+ exit(2);
+ }
+! ntp_optind = 0; /* reset ntp_optind to restart ntp_getopt */
+
+ if (debug) {
+ #ifdef NTP_POSIX_SOURCE
+***************
+*** 430,437 ****
+ char resolver_name[MAXFILENAME];
+ int have_keyfile;
+ char keyfile[MAXFILENAME];
+! extern int optind;
+! extern char *optarg;
+ extern char *Version;
+ extern U_LONG info_auth_keyid;
+ FILEGEN *filegen;
+--- 430,437 ----
+ char resolver_name[MAXFILENAME];
+ int have_keyfile;
+ char keyfile[MAXFILENAME];
+! extern int ntp_optind;
+! extern char *ntp_optarg;
+ extern char *Version;
+ extern U_LONG info_auth_keyid;
+ FILEGEN *filegen;
+***************
+*** 461,467 ****
+ /*
+ * Decode argument list
+ */
+! while ((c = getopt_l(argc, argv, xntp_options)) != EOF) {
+ switch (c) {
+ case 'a':
+ proto_config(PROTO_AUTHENTICATE, (LONG)1);
+--- 461,467 ----
+ /*
+ * Decode argument list
+ */
+! while ((c = ntp_getopt(argc, argv, xntp_options)) != EOF) {
+ switch (c) {
+ case 'a':
+ proto_config(PROTO_AUTHENTICATE, (LONG)1);
+***************
+*** 470,476 ****
+ proto_config(PROTO_BROADCLIENT, (LONG)1);
+ break;
+ case 'c':
+! config_file = optarg;
+ break;
+ case 'd':
+ #ifdef DEBUG
+--- 470,476 ----
+ proto_config(PROTO_BROADCLIENT, (LONG)1);
+ break;
+ case 'c':
+! config_file = ntp_optarg;
+ break;
+ case 'd':
+ #ifdef DEBUG
+***************
+*** 484,498 ****
+ do {
+ l_fp tmp;
+
+! if (!atolfp(optarg, &tmp)) {
+ syslog(LOG_ERR,
+ "command line encryption delay value %s undecodable",
+! optarg);
+ errflg++;
+ } else if (tmp.l_ui != 0) {
+ syslog(LOG_ERR,
+ "command line encryption delay value %s is unlikely",
+! optarg);
+ errflg++;
+ } else {
+ proto_config(PROTO_AUTHDELAY, tmp.l_f);
+--- 484,498 ----
+ do {
+ l_fp tmp;
+
+! if (!atolfp(ntp_optarg, &tmp)) {
+ syslog(LOG_ERR,
+ "command line encryption delay value %s undecodable",
+! ntp_optarg);
+ errflg++;
+ } else if (tmp.l_ui != 0) {
+ syslog(LOG_ERR,
+ "command line encryption delay value %s is unlikely",
+! ntp_optarg);
+ errflg++;
+ } else {
+ proto_config(PROTO_AUTHDELAY, tmp.l_f);
+***************
+*** 501,537 ****
+ break;
+
+ case 'f':
+! stats_config(STATS_FREQ_FILE, optarg);
+ break;
+
+ case 'k':
+! getauthkeys(optarg);
+! if ((int)strlen(optarg) >= MAXFILENAME) {
+ syslog(LOG_ERR,
+ "key file name too LONG (>%d, sigh), no name resolution possible",
+ MAXFILENAME);
+ } else {
+ have_keyfile = 1;
+! (void)strcpy(keyfile, optarg);
+ }
+ break;
+
+ case 'p':
+! stats_config(STATS_PID_FILE, optarg);
+ break;
+
+ case 'r':
+ do {
+ l_fp tmp;
+
+! if (!atolfp(optarg, &tmp)) {
+ syslog(LOG_ERR,
+ "command line broadcast delay value %s undecodable",
+! optarg);
+ } else if (tmp.l_ui != 0) {
+ syslog(LOG_ERR,
+ "command line broadcast delay value %s is unlikely",
+! optarg);
+ } else {
+ proto_config(PROTO_BROADDELAY, tmp.l_f);
+ }
+--- 501,537 ----
+ break;
+
+ case 'f':
+! stats_config(STATS_FREQ_FILE, ntp_optarg);
+ break;
+
+ case 'k':
+! getauthkeys(ntp_optarg);
+! if ((int)strlen(ntp_optarg) >= MAXFILENAME) {
+ syslog(LOG_ERR,
+ "key file name too LONG (>%d, sigh), no name resolution possible",
+ MAXFILENAME);
+ } else {
+ have_keyfile = 1;
+! (void)strcpy(keyfile, ntp_optarg);
+ }
+ break;
+
+ case 'p':
+! stats_config(STATS_PID_FILE, ntp_optarg);
+ break;
+
+ case 'r':
+ do {
+ l_fp tmp;
+
+! if (!atolfp(ntp_optarg, &tmp)) {
+ syslog(LOG_ERR,
+ "command line broadcast delay value %s undecodable",
+! ntp_optarg);
+ } else if (tmp.l_ui != 0) {
+ syslog(LOG_ERR,
+ "command line broadcast delay value %s is unlikely",
+! ntp_optarg);
+ } else {
+ proto_config(PROTO_BROADDELAY, tmp.l_f);
+ }
+***************
+*** 539,556 ****
+ break;
+
+ case 's':
+! stats_config(STATS_STATSDIR, optarg);
+ break;
+
+ case 't':
+ do {
+ int tkey;
+
+! tkey = atoi(optarg);
+ if (tkey <= 0 || tkey > NTP_MAXKEY) {
+ syslog(LOG_ERR,
+ "command line trusted key %s is unlikely",
+! optarg);
+ } else {
+ authtrust(tkey, (LONG)1);
+ }
+--- 539,556 ----
+ break;
+
+ case 's':
+! stats_config(STATS_STATSDIR, ntp_optarg);
+ break;
+
+ case 't':
+ do {
+ int tkey;
+
+! tkey = atoi(ntp_optarg);
+ if (tkey <= 0 || tkey > NTP_MAXKEY) {
+ syslog(LOG_ERR,
+ "command line trusted key %s is unlikely",
+! ntp_optarg);
+ } else {
+ authtrust(tkey, (LONG)1);
+ }
+***************
+*** 559,565 ****
+
+ case 'v':
+ case 'V':
+! set_sys_var(optarg, strlen(optarg)+1, RW | ((c == 'V') ? DEF : 0));
+ break;
+
+ default:
+--- 559,565 ----
+
+ case 'v':
+ case 'V':
+! set_sys_var(ntp_optarg, strlen(ntp_optarg)+1, RW | ((c == 'V') ? DEF : 0));
+ break;
+
+ default:
+diff -c -r ../yy/xntpd/ntp_control.c ./xntpd/ntp_control.c
+*** ../yy/xntpd/ntp_control.c Thu Jan 27 15:03:48 1994
+--- ./xntpd/ntp_control.c Thu Jan 27 19:29:06 1994
+***************
+*** 1848,1854 ****
+ ctl_sys_num_events = 0;
+ gotvar += count_var(ext_sys_var);
+ wants = (u_char *)emalloc(gotvar);
+! bzero((char *)wants, gotvar);
+ gotvar = 0;
+ while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
+ if (v->flags & EOV) {
+--- 1848,1854 ----
+ ctl_sys_num_events = 0;
+ gotvar += count_var(ext_sys_var);
+ wants = (u_char *)emalloc(gotvar);
+! memset((char *)wants, 0, gotvar);
+ gotvar = 0;
+ while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
+ if (v->flags & EOV) {
+***************
+*** 1904,1910 ****
+ if (res_authokay)
+ peer->num_events = 0;
+ wants = (u_char *)emalloc(gotvar);
+! bzero((char*)wants, gotvar);
+ gotvar = 0;
+ while ((v = ctl_getitem(peer_var, &valuep)) != 0) {
+ if (v->flags & EOV) {
+--- 1904,1910 ----
+ if (res_authokay)
+ peer->num_events = 0;
+ wants = (u_char *)emalloc(gotvar);
+! memset((char*)wants, 0, gotvar);
+ gotvar = 0;
+ while ((v = ctl_getitem(peer_var, &valuep)) != 0) {
+ if (v->flags & EOV) {
+***************
+*** 2106,2112 ****
+ rpkt.status = htons(ctlclkstatus(&clock));
+ gotvar = CC_MAXCODE+1+count_var(clock.kv_list);
+ wants = (u_char *)emalloc(gotvar);
+! bzero((char*)wants, gotvar);
+ gotvar = 0;
+ while ((v = ctl_getitem(clock_var, &valuep)) != 0) {
+ if (v->flags & EOV) {
+--- 2106,2112 ----
+ rpkt.status = htons(ctlclkstatus(&clock));
+ gotvar = CC_MAXCODE+1+count_var(clock.kv_list);
+ wants = (u_char *)emalloc(gotvar);
+! memset((char*)wants, 0, gotvar);
+ gotvar = 0;
+ while ((v = ctl_getitem(clock_var, &valuep)) != 0) {
+ if (v->flags & EOV) {
+***************
+*** 2578,2584 ****
+ *kv = (struct ctl_var *)emalloc((c+2)*sizeof(struct ctl_var));
+ if (k)
+ {
+! bcopy((char *)k, (char *)*kv, sizeof(struct ctl_var)*c);
+ free((char *)k);
+ }
+
+--- 2578,2584 ----
+ *kv = (struct ctl_var *)emalloc((c+2)*sizeof(struct ctl_var));
+ if (k)
+ {
+! memmove((char *)*kv, (char *)k, sizeof(struct ctl_var)*c);
+ free((char *)k);
+ }
+
+***************
+*** 2621,2627 ****
+ {
+ free(k->text);
+ k->text = (char *)emalloc(size);
+! bcopy(data, k->text, size);
+ k->flags = def;
+ return;
+ }
+--- 2621,2627 ----
+ {
+ free(k->text);
+ k->text = (char *)emalloc(size);
+! memmove(k->text, data, size);
+ k->flags = def;
+ return;
+ }
+***************
+*** 2629,2635 ****
+ else
+ {
+ k->text = (char *)emalloc(size);
+! bcopy(data, k->text, size);
+ k->flags = def;
+ return;
+ }
+--- 2629,2635 ----
+ else
+ {
+ k->text = (char *)emalloc(size);
+! memmove(k->text, data, size);
+ k->flags = def;
+ return;
+ }
+***************
+*** 2637,2643 ****
+ }
+ }
+ t = add_var(kv, size, def);
+! bcopy(data, t, size);
+ }
+
+ void
+--- 2637,2643 ----
+ }
+ }
+ t = add_var(kv, size, def);
+! memmove(t, data, size);
+ }
+
+ void
+--
+ Frank Kardel (kardel@informatik.uni-erlangen.de)
+ All SCSI disks will from now on be required to send an email
+ notice 24 hours prior to complete hardware failure!
+
diff --git a/usr.sbin/xntpd/patches/patch.7 b/usr.sbin/xntpd/patches/patch.7
new file mode 100644
index 0000000..682065f
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.7
@@ -0,0 +1,274 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa21105; 28 Jan 94 9:25 EST
+Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa08838;
+ 28 Jan 94 9:20 EST
+Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
+ id AA29169 (5.65c-6/7.3v-FAU); Fri, 28 Jan 1994 15:19:56 +0100
+Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
+ id AA11999 (5.65c-6/7.3m-FAU); Fri, 28 Jan 1994 15:19:51 +0100
+From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
+Message-Id: <199401281419.AA11999@faui43.informatik.uni-erlangen.de>
+Subject: Re: Solaribum
+To: Paul A Vixie <Paul_Vixie@corpmis.sjc.hw.sony.com>
+Date: Fri, 28 Jan 94 14:02:02 MET
+Cc: Mills@udel.edu, Frank.Kardel@informatik.uni-erlangen.de,
+ Piete.Brooks@cl.cam.ac.uk, Paul_Vixie@corpmis.sjc.hw.sony.com
+In-Reply-To: <9401272236.AA27835@morality.sjc.hw.sony.com>; from "Paul A Vixie" at Jan 27, 94 2:36 pm
+X-Mailer: ELM [version 2.3 PL11]
+
+
+> >memmove() and crumps in loading with an unknown external. If the missing
+> >routine is not there in SunOS 4, why not conditionally compile one
+> >and be done with it?
+
+> as i said in earlier mail, there is already a macro for memmove, to define
+> it in terms of bcopy, but it is only enabled on systems that don't have a
+> native memmove. include/*.h tells the story.
+
+Ok, in order to cope with the problems (non existent memmove() and
+sys header files that use bops) I fixed SUNOS4 and ULTRIX to use the
+b-ops (via the NTP_NEED_BOPS define). All other should to my knowledge
+use the mem* stuff (I'd rather use either mem* or b* instead of mixtures
+of both).
+
+Now, the following patch should get 3.3y (and 3.3yy) to fly
+(=compile) on suns. Functional test have not been done. ULTRIX
+has not been tested.
+
+> there are too many x's and y's now. i'm confused. i promise not to send
+> any more patches until the dust clears..
+
+With this patch we should get to 3.3yyy which should be the
+base for all next efforts (-> and 3.3{x,xx,y,yy} can be deleted).
+
+May the source be with us:
+
+diff -c -r ../yy/include/l_stdlib.h ./include/l_stdlib.h
+*** ../yy/include/l_stdlib.h Thu Jan 27 15:03:21 1994
+--- ./include/l_stdlib.h Fri Jan 28 12:46:31 1994
+***************
+*** 47,54 ****
+--- 47,60 ----
+ extern int rand P((void));
+ extern int setpgrp P((int, int));
+ extern void srand P((unsigned int));
++ extern void bcopy P((char *, char *, int));
+ #endif
+
++ #ifndef bzero /* XXX macro prototyping clash */
++ extern void bzero P((char *, int));
++ extern int bcmp P((char *, char *, int));
++ extern void bcopy P((char *, char *, int));
++ #endif
+ extern char *mktemp P((char *));
+
+ extern int tolower P((int));
+***************
+*** 92,102 ****
+--- 98,110 ----
+
+ #ifdef _ntp_string_h
+ #ifdef NTP_POSIX_SOURCE /* these are builtins */
++ #ifndef NTP_NEED_BOPS /* but may be emulated by bops */
+ extern char *memcpy();
+ extern char *memset();
+ extern int memcmp();
+ #endif
+ #endif
++ #endif
+
+ #ifdef _sys_socket_h
+ extern int bind P((int, struct sockaddr *, int));
+***************
+*** 187,192 ****
+--- 195,203 ----
+
+ #ifndef NTP_POSIX_SOURCE
+ extern int atoi P((char *));
++ extern void bzero P((char *, int));
++ extern int bcmp P((char *, char *, int));
++ extern void bcopy P((char *, char *, int));
+ extern int execve P((char *, char **,char **));
+ extern int fork P((void));
+ extern int getdtablesize P((void));
+diff -c -r ../yy/include/ntp_machine.h ./include/ntp_machine.h
+*** ../yy/include/ntp_machine.h Fri Jan 28 13:32:33 1994
+--- ./include/ntp_machine.h Fri Jan 28 12:25:29 1994
+***************
+*** 168,173 ****
+--- 168,174 ----
+ * Note: posix version has NTP_POSIX_SOURCE and HAVE_SIGNALED_IO
+ */
+ #if defined(SYS_SUNOS4)
++ #define NTP_NEED_BOPS
+ #define NO_SIGNED_CHAR_DECL
+ #define HAVE_LIBKVM
+ #define HAVE_MALLOC_H
+***************
+*** 266,271 ****
+--- 267,273 ----
+ * Note: posix version has NTP_POSIX_SOURCE and HAVE_SIGNALED_IO
+ */
+ #if defined(SYS_ULTRIX)
++ #define NTP_NEED_BOPS
+ #define S_CHAR_DEFINED
+ #define HAVE_READKMEM
+ #define HAVE_BSD_NICE
+diff -c -r ../yy/include/ntp_string.h ./include/ntp_string.h
+*** ../yy/include/ntp_string.h Thu Jan 27 15:03:24 1994
+--- ./include/ntp_string.h Fri Jan 28 12:36:44 1994
+***************
+*** 5,11 ****
+ #ifndef _ntp_string_h
+ #define _ntp_string_h
+
+! #ifdef NTP_POSIX_SOURCE
+
+ # if defined(HAVE_MEMORY_H)
+ # include <memory.h>
+--- 5,11 ----
+ #ifndef _ntp_string_h
+ #define _ntp_string_h
+
+! #if defined(NTP_POSIX_SOURCE)
+
+ # if defined(HAVE_MEMORY_H)
+ # include <memory.h>
+***************
+*** 13,29 ****
+
+ # include <string.h>
+
+! #else /* NTP_POSIX_SOURCE */
+
+ # include <strings.h>
+-
+ # define strchr(s,c) index(s,c)
+ # define strrchr(s,c) rindex(s,c)
+ # define memcmp(a,b,c) bcmp(a,b,c)
+ # define memmove(t,f,c) bcopy(f,t,c)
+! # define memset(a,x,c) if (x == 0x00) bzero(a,c) else ntp_memset((char*)a,x,c)
+ void ntp_memset P((char *, int, int));
+
+! #endif /* NTP_POSIX_SOURCE */
+
+ #endif /* _ntp_string_h */
+--- 13,35 ----
+
+ # include <string.h>
+
+! #else
+
+ # include <strings.h>
+ # define strchr(s,c) index(s,c)
+ # define strrchr(s,c) rindex(s,c)
++ # ifndef NTP_NEED_BOPS
++ # define NTP_NEED_BOPS
++ # endif
++ #endif /* NTP_POSIX_SOURCE */
++
++ #ifdef NTP_NEED_BOPS
++
+ # define memcmp(a,b,c) bcmp(a,b,c)
+ # define memmove(t,f,c) bcopy(f,t,c)
+! # define memset(a,x,c) if (x == 0x00) bzero(a,c); else ntp_memset((char*)a,x,c)
+ void ntp_memset P((char *, int, int));
+
+! #endif /* NTP_NEED_BOPS */
+
+ #endif /* _ntp_string_h */
+diff -c -r ../yy/lib/machines.c ./lib/machines.c
+*** ../yy/lib/machines.c Thu Jan 27 15:03:35 1994
+--- ./lib/machines.c Fri Jan 28 13:55:26 1994
+***************
+*** 31,37 ****
+ }
+ #endif
+
+! #if !defined(NTP_POSIX_SOURCE)
+ void
+ ntp_memset(a, x, c)
+ char *a;
+--- 31,37 ----
+ }
+ #endif
+
+! #if !defined(NTP_POSIX_SOURCE) || defined(NTP_NEED_BOPS)
+ void
+ ntp_memset(a, x, c)
+ char *a;
+diff -c -r ../yy/parse/Makefile.tmpl ./parse/Makefile.tmpl
+*** ../yy/parse/Makefile.tmpl Fri Nov 26 05:28:30 1993
+--- ./parse/Makefile.tmpl Fri Jan 28 13:47:30 1994
+***************
+*** 92,98 ****
+
+ clean:
+ -@rm -f $(LIBNAME).a $(KLIBNAME).a *.o *.out *.ln make.log Makefile.bak \
+! lintlib.errs lint.errs genassym assym.s parsestreams parse
+ -@cd util && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" -f Makefile.tmpl clean
+
+ distclean: clean
+--- 92,98 ----
+
+ clean:
+ -@rm -f $(LIBNAME).a $(KLIBNAME).a *.o *.out *.ln make.log Makefile.bak \
+! lintlib.errs lint.errs genassym assym.s parsestreams parse parsestreams.o.*
+ -@cd util && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" -f Makefile.tmpl clean
+
+ distclean: clean
+diff -c -r ../yy/parse/parse.c ./parse/parse.c
+*** ../yy/parse/parse.c Fri Jan 28 13:32:34 1994
+--- ./parse/parse.c Fri Jan 28 13:08:01 1994
+***************
+*** 29,47 ****
+ #include "sys/time.h"
+ #include "sys/errno.h"
+
+ #if defined(PARSESTREAM) && (defined(SYS_SUNOS4) || defined(SYS_SOLARIS)) && defined(STREAM)
+ /*
+! * Sorry, but in SunOS 4.x kernels there are no
+ * mem* operations. I don't want them - bcopy, bzero
+ * are fine in the kernel
+ */
+! #define _ntp_string_h
+! extern void bcopy();
+! extern void bzero();
+ #else
+ #define bzero(_X_, _Y_) memset(_X_, 0, _Y_)
+ #define bcopy(_X_, _Y_, _Z_) memmove(_Y_, _X_, _Z_)
+ #endif
+
+ #include "ntp_fp.h"
+ #include "ntp_unixtime.h"
+--- 29,53 ----
+ #include "sys/time.h"
+ #include "sys/errno.h"
+
++ #include "ntp_machine.h"
++
+ #if defined(PARSESTREAM) && (defined(SYS_SUNOS4) || defined(SYS_SOLARIS)) && defined(STREAM)
+ /*
+! * Sorry, but in SunOS 4.x AND Solaris 2.x kernels there are no
+ * mem* operations. I don't want them - bcopy, bzero
+ * are fine in the kernel
+ */
+! #ifndef NTP_NEED_BOPS
+! #define NTP_NEED_BOPS
+! #endif
+ #else
++ #ifndef NTP_NEED_BOPS
++ #ifndef bzero
+ #define bzero(_X_, _Y_) memset(_X_, 0, _Y_)
+ #define bcopy(_X_, _Y_, _Z_) memmove(_Y_, _X_, _Z_)
+ #endif
++ #endif
++ #endif
+
+ #include "ntp_fp.h"
+ #include "ntp_unixtime.h"
+--
+ Frank Kardel (kardel@informatik.uni-erlangen.de)
+ All SCSI disks will from now on be required to send an email
+ notice 24 hours prior to complete hardware failure!
+
diff --git a/usr.sbin/xntpd/patches/patch.8 b/usr.sbin/xntpd/patches/patch.8
new file mode 100644
index 0000000..52e928c
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.8
@@ -0,0 +1,44 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa21136; 28 Jan 94 9:30 EST
+Received: from relay1.uu.net by louie.udel.edu id aa09355; 28 Jan 94 9:29 EST
+Received: from outpost.wg.waii.com by relay1.UU.NET with SMTP
+ (5.61/UUNET-internet-primary) id AAwaur00219; Fri, 28 Jan 94 09:29:28 -0500
+Received: from airgun.wg.waii.com by outpost.wg.waii.com with SMTP id AA18918
+ (5.65c/IDA-1.4.4 for <mills@udel.edu>); Fri, 28 Jan 1994 08:29:23 -0600
+Received: from merlin.london.waii.com by airgun.wg.waii.com with SMTP id AA18376
+ (5.65c/IDA-1.4.4 for <mills@udel.edu>); Fri, 28 Jan 1994 08:29:16 -0600
+Received: from phoenix.london.waii.com by merlin.london.waii.com with SMTP id AA21698
+ (5.65c/IDA-1.4.4 for <mills@udel.edu>); Fri, 28 Jan 1994 14:24:29 GMT
+Received: by phoenix.london.waii.com (4.1/SMI-4.1)
+ id AA21825; Fri, 28 Jan 94 14:29:12 GMT
+Date: Fri, 28 Jan 94 14:29:12 GMT
+From: Marc Brett <ltso@london.waii.com>
+Message-Id: <9401281429.AA21825@phoenix.london.waii.com>
+To: mills@udel.edu
+Subject: Bug in export version of xntp.3.3c
+
+Dave,
+
+The crippled DES routine fails to compile on my machine (SunOS 1.4.3, cc).
+It complains about U_LONG being unrecognized. Luckily, the fix is a
+one-liner.
+
+*** authdes.c.export Tue Aug 24 22:26:45 1993
+--- authdes.c Fri Jan 28 12:18:40 1994
+***************
+*** 15,20 ****
+--- 15,21 ----
+ * to its exportable state, copy this file to authdes.c .
+ */
+ #include <sys/types.h>
++ #include "ntp_stdlib.h"
+
+ /*
+ * This routine is normally called to compute the key schedule.
+
+
+Regards,
+
+Marc Brett marc.brett@london.waii.com
+Western Geophysical Tel: +44 81 560 3160
+
diff --git a/usr.sbin/xntpd/patches/patch.9 b/usr.sbin/xntpd/patches/patch.9
new file mode 100644
index 0000000..76b3309
--- /dev/null
+++ b/usr.sbin/xntpd/patches/patch.9
@@ -0,0 +1,83 @@
+
+Received: from louie.udel.edu by huey.udel.edu id aa04410; 31 Jan 94 4:58 EST
+Received: from gw.home.vix.com by louie.udel.edu id aa00370; 31 Jan 94 4:52 EST
+Received: by gw.home.vix.com id AA12643; Mon, 31 Jan 94 01:52:12 -0800
+Message-Id: <9401310952.AA12643@gw.home.vix.com>
+X-Btw: vix.com is also gw.home.vix.com and vixie.sf.ca.us
+To: Mills@udel.edu
+Cc: Frank.Kardel@informatik.uni-erlangen.de, Piete.Brooks@cl.cam.ac.uk
+Subject: diffs to yyy to make ultrix/GOES happy
+Date: Mon, 31 Jan 94 01:52:11 PST
+From: Paul A Vixie <vixie@vix.com>
+
+diff -r -c2 yyy.ref/adjtime/adjtimed.c xntp3.3yyy/adjtime/adjtimed.c
+*** yyy.ref/adjtime/adjtimed.c Thu Jan 27 06:03:11 1994
+--- xntp3.3yyy/adjtime/adjtimed.c Mon Jan 31 01:24:49 1994
+***************
+*** 82,86 ****
+--- 82,90 ----
+ progname = argv[0];
+
++ #ifdef LOG_LOCAL6
+ openlog("adjtimed", LOG_PID, LOG_LOCAL6);
++ #else
++ openlog("adjtimed", LOG_PID);
++ #endif
+
+ while ((ch = ntp_getopt(argc, argv, "hkrvdfp:")) != EOF) {
+diff -r -c2 yyy.ref/include/ntp_machine.h xntp3.3yyy/include/ntp_machine.h
+*** yyy.ref/include/ntp_machine.h Fri Jan 28 07:26:11 1994
+--- xntp3.3yyy/include/ntp_machine.h Mon Jan 31 01:01:11 1994
+***************
+*** 42,47 ****
+
+
+! WHICH TERMINAL MODEL TO USE - I would assume HAVE_POSIX_TTYS if
+! NTP_POSIX_SOURCE was set but cann't. The
+ posix tty driver is too restrictive on most systems.
+ It defined if you define STREAMS.
+--- 42,47 ----
+
+
+! WHICH TERMINAL MODEL TO USE - I would assume HAVE_TERMIOS if
+! NTP_POSIX_SOURCE was set but can't. The
+ posix tty driver is too restrictive on most systems.
+ It defined if you define STREAMS.
+***************
+*** 50,54 ****
+ HAVE_BSD_TTYS - Use BSD stty.h
+ HAVE_TERMIOS - Use POSIX termios.h
+- HAVE_POSIX_TTYS - "struct termios" has c_line defined
+
+ THIS MAKES PORTS TO NEW SYSTEMS EASY - You only have to wory about
+--- 50,53 ----
+***************
+*** 268,272 ****
+ */
+ #if defined(SYS_ULTRIX)
+- #define NTP_NEED_BOPS
+ #define S_CHAR_DEFINED
+ #define HAVE_READKMEM
+--- 267,270 ----
+***************
+*** 277,280 ****
+--- 275,279 ----
+ #define STR_SYSTEM "UNIX/Ultrix"
+ #endif
++ #define HAVE_TERMIOS
+ #endif
+
+***************
+*** 565,568 ****
+--- 564,573 ----
+ && !defined(HAVE_NO_NICE)
+ ERROR You_must_define_one_of_the_HAVE_xx_NICE_defines
++ #endif
++
++ #if !defined(HAVE_SYSV_TTYS) \
++ && !defined(HAVE_BSD_TTYS) \
++ && !defined(HAVE_TERMIOS)
++ ERROR no_tty_type_defined
+ #endif
+
+
OpenPOWER on IntegriCloud