4 * Masami Komiya <mkomiya@sonare.it> 2005
15 #if defined(CONFIG_CMD_NET) && defined(CONFIG_CMD_SNTP)
17 #define SNTP_TIMEOUT 10
19 static int SntpOurPort
;
24 struct sntp_pkt_t pkt
;
25 int pktlen
= SNTP_PACKET_LEN
;
28 debug ("%s\n", __FUNCTION__
);
30 memset (&pkt
, 0, sizeof(pkt
));
32 pkt
.li
= NTP_LI_NOLEAP
;
34 pkt
.mode
= NTP_MODE_CLIENT
;
36 memcpy ((char *)NetTxPacket
+ NetEthHdrSize() + IP_HDR_SIZE
, (char *)&pkt
, pktlen
);
38 SntpOurPort
= 10000 + (get_timer(0) % 4096);
39 sport
= NTP_SERVICE_PORT
;
41 NetSendUDPPacket (NetServerEther
, NetNtpServerIP
, sport
, SntpOurPort
, pktlen
);
48 NetState
= NETLOOP_FAIL
;
53 SntpHandler (uchar
*pkt
, unsigned dest
, unsigned src
, unsigned len
)
55 struct sntp_pkt_t
*rpktp
= (struct sntp_pkt_t
*)pkt
;
59 debug ("%s\n", __FUNCTION__
);
61 if (dest
!= SntpOurPort
) return;
64 * As the RTC's used in U-Boot sepport second resolution only
65 * we simply ignore the sub-second field.
67 memcpy (&seconds
, &rpktp
->transmit_timestamp
, sizeof(ulong
));
69 to_tm(ntohl(seconds
) - 2208988800UL + NetTimeOffset
, &tm
);
70 #if defined(CONFIG_CMD_DATE)
73 printf ("Date: %4d-%02d-%02d Time: %2d:%02d:%02d\n",
74 tm
.tm_year
, tm
.tm_mon
, tm
.tm_mday
,
75 tm
.tm_hour
, tm
.tm_min
, tm
.tm_sec
);
77 NetState
= NETLOOP_SUCCESS
;
83 debug ("%s\n", __FUNCTION__
);
85 NetSetTimeout (SNTP_TIMEOUT
* CFG_HZ
, SntpTimeout
);
86 NetSetHandler(SntpHandler
);
87 memset (NetServerEther
, 0, 6);