]>
git.ipfire.org Git - people/ms/u-boot.git/blob - net/sntp.c
4 * Masami Komiya <mkomiya@sonare.it> 2005
16 #define SNTP_TIMEOUT 10000UL
18 static int sntp_our_port
;
20 static void sntp_send(void)
22 struct sntp_pkt_t pkt
;
23 int pktlen
= SNTP_PACKET_LEN
;
26 debug("%s\n", __func__
);
28 memset(&pkt
, 0, sizeof(pkt
));
30 pkt
.li
= NTP_LI_NOLEAP
;
32 pkt
.mode
= NTP_MODE_CLIENT
;
34 memcpy((char *)net_tx_packet
+ net_eth_hdr_size() + IP_UDP_HDR_SIZE
,
35 (char *)&pkt
, pktlen
);
37 sntp_our_port
= 10000 + (get_timer(0) % 4096);
38 sport
= NTP_SERVICE_PORT
;
40 net_send_udp_packet(net_server_ethaddr
, net_ntp_server
, sport
,
41 sntp_our_port
, pktlen
);
44 static void sntp_timeout_handler(void)
47 net_set_state(NETLOOP_FAIL
);
51 static void sntp_handler(uchar
*pkt
, unsigned dest
, struct in_addr sip
,
52 unsigned src
, unsigned len
)
54 #ifdef CONFIG_TIMESTAMP
55 struct sntp_pkt_t
*rpktp
= (struct sntp_pkt_t
*)pkt
;
60 debug("%s\n", __func__
);
62 if (dest
!= sntp_our_port
)
65 #ifdef CONFIG_TIMESTAMP
67 * As the RTC's used in U-Boot support second resolution only
68 * we simply ignore the sub-second field.
70 memcpy(&seconds
, &rpktp
->transmit_timestamp
, sizeof(ulong
));
72 rtc_to_tm(ntohl(seconds
) - 2208988800UL + net_ntp_time_offset
, &tm
);
73 #if defined(CONFIG_CMD_DATE)
78 ret
= uclass_get_device(UCLASS_RTC
, 0, &dev
);
80 printf("SNTP: cannot find RTC: err=%d\n", ret
);
87 printf("Date: %4d-%02d-%02d Time: %2d:%02d:%02d\n",
88 tm
.tm_year
, tm
.tm_mon
, tm
.tm_mday
,
89 tm
.tm_hour
, tm
.tm_min
, tm
.tm_sec
);
92 net_set_state(NETLOOP_SUCCESS
);
97 debug("%s\n", __func__
);
99 net_set_timeout_handler(SNTP_TIMEOUT
, sntp_timeout_handler
);
100 net_set_udp_handler(sntp_handler
);
101 memset(net_server_ethaddr
, 0, sizeof(net_server_ethaddr
));