[OpenBIOS] r723 - cpu/x86/pc/olpc ofw/inet
svn at openbios.org
svn at openbios.org
Thu Nov 8 00:59:05 CET 2007
Author: wmb
Date: 2007-11-08 00:59:05 +0100 (Thu, 08 Nov 2007)
New Revision: 723
Added:
ofw/inet/sntp.fth
Modified:
cpu/x86/pc/olpc/fw.bth
Log:
Added SNTP support and the new OLPC command "ntp-set-clock".
Modified: cpu/x86/pc/olpc/fw.bth
===================================================================
--- cpu/x86/pc/olpc/fw.bth 2007-11-07 23:57:36 UTC (rev 722)
+++ cpu/x86/pc/olpc/fw.bth 2007-11-07 23:59:05 UTC (rev 723)
@@ -138,12 +138,14 @@
[then]
[ifdef] linux-support
+\needs unix-seconds> fload ${BP}/ofw/fs/unixtime.fth \ Unix time calculation
support-package: ext2-file-system
fload ${BP}/ofw/fs/ext2fs/ext2fs.fth \ Linux file system
end-support-package
[then]
[ifdef] jffs2-support
+\needs unix-seconds> fload ${BP}/ofw/fs/unixtime.fth \ Unix time calculation
support-package: jffs2-file-system
fload ${BP}/ofw/fs/jffs2/jffs2.fth \ Journaling flash file system 2
end-support-package
@@ -419,6 +421,23 @@
;
' olpc-ssids to default-ssids
+fload ${BP}/ofw/inet/sntp.fth
+: olpc-ntp-servers ( -- )
+ " time 172.18.0.1 0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org"
+;
+' olpc-ntp-servers to ntp-servers
+: ntp-time&date ( -- s m h d m y )
+ ntp-timestamp abort" Can't contact NTP server"
+ ntp>time&date
+;
+: .clock ( -- )
+ time&date .date space .time ." UTC" cr
+;
+: ntp-set-clock ( -- )
+ ntp-time&date " set-time" clock-node @ $call-method
+ .clock
+;
+
[ifdef] use-ppp
fload ${BP}/ofw/ppp/loadppp.fth
[then]
Added: ofw/inet/sntp.fth
===================================================================
--- ofw/inet/sntp.fth (rev 0)
+++ ofw/inet/sntp.fth 2007-11-07 23:59:05 UTC (rev 723)
@@ -0,0 +1,101 @@
+purpose: Get data and time from an NTP server using SNTP
+\ See license at end of file
+
+0 value ip-ih
+: $call-ip ip-ih $call-method ;
+
+d# 123 constant ntp-port#
+h# 30 constant /sntp-request
+
+: send-sntp-request ( -- )
+ /sntp-request " allocate-udp" $call-ip >r
+ r@ /sntp-request erase
+ 3 3 lshift \ SNTP version 3
+ 3 or \ Client request
+ r@ c!
+ r@ /sntp-request ntp-port# ntp-port# " send-udp-packet" $call-ip
+ r> /sntp-request " free-udp" $call-ip
+;
+: receive-sntp-reply ( -- true | d.timestamp false )
+ ntp-port# " receive-udp-packet" $call-ip if ( ) \ Timeout
+ true exit
+ then ( adr len src-port# )
+ drop ( adr len )
+ h# 30 < if ( adr len )
+ ." Bad NTP reply length" cr
+ drop true exit
+ then ( adr )
+\ dup c@ h# c0 and if ( adr ) \ Check LI field
+\ ." NTP server not synchronized" cr
+\ drop true exit
+\ then ( adr )
+ dup h# 2c + be-l@ ( adr fraction )
+ dup 0= if ( adr fraction )
+ ." NTP server not synchronized" cr
+ 2drop true exit
+ then ( adr fraction )
+ swap h# 28 + be-l@ ( fraction seconds )
+ false ( d.timestamp false )
+;
+: try-sntp ( hostname$ -- true | d.timestamp false )
+ " ip" open-dev to ip-ih
+ ip-ih 0= if
+ ." Networking not available" cr
+ true exit
+ then
+
+ d# 5,000 " set-timeout" $call-ip
+ " $set-host" $call-ip
+ send-sntp-request
+ receive-sntp-reply
+ ip-ih close-dev
+;
+
+defer ntp-servers
+: default-ntp-servers " 0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org" ;
+' default-ntp-servers to ntp-servers
+
+: ntp-timestamp ( -- true | d.timestamp false )
+ ntp-servers begin dup while ( rem$ )
+ bl left-parse-string ( rem$ server$ )
+ ['] try-sntp catch if ( rem$ x x )
+ 2drop ( rem$ )
+ else ( rem$ [ true | d.timestamp false ] )
+ 0= if ( rem$ d.timestamp )
+ 2nip false exit
+ then ( rem$ )
+ then ( rem$ )
+ repeat ( rem$ )
+ 2drop true
+;
+
+d# 2,208,988,800 constant unix-epoch
+
+: ntp>time&date ( d.timestamp -- s m h m d y )
+ nip unix-epoch - unix-seconds>
+;
+
+
+\ LICENSE_BEGIN
+\ Copyright (c) 2007 FirmWorks
+\
+\ Permission is hereby granted, free of charge, to any person obtaining
+\ a copy of this software and associated documentation files (the
+\ "Software"), to deal in the Software without restriction, including
+\ without limitation the rights to use, copy, modify, merge, publish,
+\ distribute, sublicense, and/or sell copies of the Software, and to
+\ permit persons to whom the Software is furnished to do so, subject to
+\ the following conditions:
+\
+\ The above copyright notice and this permission notice shall be
+\ included in all copies or substantial portions of the Software.
+\
+\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+\
+\ LICENSE_END
More information about the OpenBIOS
mailing list