]> git.baikalelectronics.ru Git - uboot.git/commitdiff
sntp: use udp framework
authorPhilippe Reynes <philippe.reynes@softathome.com>
Fri, 18 Sep 2020 12:13:02 +0000 (14:13 +0200)
committerTom Rini <trini@konsulko.com>
Wed, 30 Sep 2020 20:55:03 +0000 (16:55 -0400)
This commits update the support of sntp to use
the framework udp. This change allows to remove
all the reference to sntp in the main network
file net/net.c.

Signed-off-by: Philippe Reynes <philippe.reynes@softathome.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
cmd/Kconfig
cmd/net.c
include/net/sntp.h [new file with mode: 0644]
net/net.c
net/sntp.c
net/sntp.h [deleted file]

index 30c358d7e745fd6dc95d3edd02ed276189fc03ff..999b6cf239a3ea478dd5ca52f79f68f15b82342c 100644 (file)
@@ -1645,6 +1645,7 @@ config CMD_CDP
 
 config CMD_SNTP
        bool "sntp"
+       select PROT_UDP
        help
          Synchronize RTC via network
 
index 9bbcdbcfe0762f50d1c39c1554def117e8ccdfed..beb2877dfd50152c26405ce16f5e262803ecbd30 100644 (file)
--- a/cmd/net.c
+++ b/cmd/net.c
@@ -13,6 +13,8 @@
 #include <env.h>
 #include <image.h>
 #include <net.h>
+#include <net/udp.h>
+#include <net/sntp.h>
 
 static int netboot_common(enum proto_t, struct cmd_tbl *, int, char * const []);
 
@@ -356,6 +358,12 @@ U_BOOT_CMD(
 #endif
 
 #if defined(CONFIG_CMD_SNTP)
+static struct udp_ops sntp_ops = {
+       .prereq = sntp_prereq,
+       .start = sntp_start,
+       .data = NULL,
+};
+
 int do_sntp(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 {
        char *toff;
@@ -380,7 +388,7 @@ int do_sntp(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
        else
                net_ntp_time_offset = simple_strtol(toff, NULL, 10);
 
-       if (net_loop(SNTP) < 0) {
+       if (udp_loop(&sntp_ops) < 0) {
                printf("SNTP failed: host %pI4 not responding\n",
                       &net_ntp_server);
                return CMD_RET_FAILURE;
diff --git a/include/net/sntp.h b/include/net/sntp.h
new file mode 100644 (file)
index 0000000..30b44d1
--- /dev/null
@@ -0,0 +1,58 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * (C) Masami Komiya <mkomiya@sonare.it> 2005
+ */
+
+#ifndef __SNTP_H__
+#define __SNTP_H__
+
+#define NTP_SERVICE_PORT       123
+#define SNTP_PACKET_LEN                48
+
+
+/* Leap Indicator */
+#define NTP_LI_NOLEAP          0x0
+#define NTP_LI_61SECS          0x1
+#define NTP_LI_59SECS          0x2
+#define NTP_LI_ALARM           0x3
+
+/* Version */
+
+#define NTP_VERSION            4
+
+/* Mode */
+#define NTP_MODE_RESERVED      0
+#define NTP_MODE_SYMACTIVE     1       /* Symmetric Active */
+#define NTP_MODE_SYMPASSIVE    2       /* Symmetric Passive */
+#define NTP_MODE_CLIENT                3
+#define NTP_MODE_SERVER                4
+#define NTP_MODE_BROADCAST     5
+#define NTP_MODE_NTPCTRL       6       /* Reserved for NTP control message */
+#define NTP_MODE_PRIVATE       7       /* Reserved for private use */
+
+struct sntp_pkt_t {
+#if __LITTLE_ENDIAN
+       uchar mode:3;
+       uchar vn:3;
+       uchar li:2;
+#else
+       uchar li:2;
+       uchar vn:3;
+       uchar mode:3;
+#endif
+       uchar stratum;
+       uchar poll;
+       uchar precision;
+       uint root_delay;
+       uint root_dispersion;
+       uint reference_id;
+       unsigned long long reference_timestamp;
+       unsigned long long originate_timestamp;
+       unsigned long long receive_timestamp;
+       unsigned long long transmit_timestamp;
+} __attribute__((packed));
+
+int sntp_prereq(void *data);
+int sntp_start(void *data);    /* Begin SNTP */
+
+#endif /* __SNTP_H__ */
index 1ce0eb57a7595a5e1d2362a15cf530b372010c12..197fde3568d7f325f3abc2e1380ad2dc13ee88d5 100644 (file)
--- a/net/net.c
+++ b/net/net.c
  *     We want:        - load the boot file
  *     Next step:      none
  *
- * SNTP:
- *
- *     Prerequisites:  - own ethernet address
- *                     - own IP address
- *     We want:        - network time
- *     Next step:      none
  *
  * WOL:
  *
 #include "nfs.h"
 #include "ping.h"
 #include "rarp.h"
-#if defined(CONFIG_CMD_SNTP)
-#include "sntp.h"
-#endif
 #if defined(CONFIG_CMD_WOL)
 #include "wol.h"
 #endif
@@ -185,13 +176,6 @@ u32 net_boot_file_size;
 /* Boot file size in blocks as reported by the DHCP server */
 u32 net_boot_file_expected_size_in_blocks;
 
-#if defined(CONFIG_CMD_SNTP)
-/* NTP server IP address */
-struct in_addr net_ntp_server;
-/* offset time from UTC */
-int            net_ntp_time_offset;
-#endif
-
 static uchar net_pkt_buf[(PKTBUFSRX+1) * PKTSIZE_ALIGN + PKTALIGN];
 /* Receive packets */
 uchar *net_rx_packets[PKTBUFSRX];
@@ -521,11 +505,6 @@ restart:
                        nc_start();
                        break;
 #endif
-#if defined(CONFIG_CMD_SNTP)
-               case SNTP:
-                       sntp_start();
-                       break;
-#endif
 #if defined(CONFIG_CMD_DNS)
                case DNS:
                        dns_start();
@@ -1352,14 +1331,6 @@ static int net_check_prereq(enum proto_t protocol)
                }
                goto common;
 #endif
-#if defined(CONFIG_CMD_SNTP)
-       case SNTP:
-               if (net_ntp_server.s_addr == 0) {
-                       puts("*** ERROR: NTP server address not given\n");
-                       return 1;
-               }
-               goto common;
-#endif
 #if defined(CONFIG_CMD_DNS)
        case DNS:
                if (net_dns_server.s_addr == 0) {
@@ -1385,7 +1356,7 @@ static int net_check_prereq(enum proto_t protocol)
                        puts("*** ERROR: `serverip' not set\n");
                        return 1;
                }
-#if    defined(CONFIG_CMD_PING) || defined(CONFIG_CMD_SNTP) || \
+#if    defined(CONFIG_CMD_PING) || \
        defined(CONFIG_CMD_DNS) || defined(CONFIG_PROT_UDP)
 common:
 #endif
index 39d7664a2248942cf890038c9d2f1465743cf210..d5d5671933180a942278912a8e9cd6e3018c2d78 100644 (file)
 #include <net.h>
 #include <rtc.h>
 
-#include "sntp.h"
+#include <net/sntp.h>
 
 #define SNTP_TIMEOUT 10000UL
 
 static int sntp_our_port;
 
+/* NTP server IP address */
+struct in_addr net_ntp_server;
+/* offset time from UTC */
+int            net_ntp_time_offset;
+
 static void sntp_send(void)
 {
        struct sntp_pkt_t pkt;
@@ -93,7 +98,25 @@ static void sntp_handler(uchar *pkt, unsigned dest, struct in_addr sip,
        net_set_state(NETLOOP_SUCCESS);
 }
 
-void sntp_start(void)
+/*
+ * SNTP:
+ *
+ *     Prerequisites:  - own ethernet address
+ *                     - own IP address
+ *     We want:        - network time
+ *     Next step:      none
+ */
+int sntp_prereq(void *data)
+{
+       if (net_ntp_server.s_addr == 0) {
+               puts("*** ERROR: NTP server address not given\n");
+               return 1;
+       }
+
+       return 0;
+}
+
+int sntp_start(void *data)
 {
        debug("%s\n", __func__);
 
@@ -102,4 +125,6 @@ void sntp_start(void)
        memset(net_server_ethaddr, 0, sizeof(net_server_ethaddr));
 
        sntp_send();
+
+       return 0;
 }
diff --git a/net/sntp.h b/net/sntp.h
deleted file mode 100644 (file)
index d3cbfbc..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
-/*
- * (C) Masami Komiya <mkomiya@sonare.it> 2005
- */
-
-#ifndef __SNTP_H__
-#define __SNTP_H__
-
-#define NTP_SERVICE_PORT       123
-#define SNTP_PACKET_LEN                48
-
-
-/* Leap Indicator */
-#define NTP_LI_NOLEAP          0x0
-#define NTP_LI_61SECS          0x1
-#define NTP_LI_59SECS          0x2
-#define NTP_LI_ALARM           0x3
-
-/* Version */
-
-#define NTP_VERSION            4
-
-/* Mode */
-#define NTP_MODE_RESERVED      0
-#define NTP_MODE_SYMACTIVE     1       /* Symmetric Active */
-#define NTP_MODE_SYMPASSIVE    2       /* Symmetric Passive */
-#define NTP_MODE_CLIENT                3
-#define NTP_MODE_SERVER                4
-#define NTP_MODE_BROADCAST     5
-#define NTP_MODE_NTPCTRL       6       /* Reserved for NTP control message */
-#define NTP_MODE_PRIVATE       7       /* Reserved for private use */
-
-struct sntp_pkt_t {
-#if __LITTLE_ENDIAN
-       uchar mode:3;
-       uchar vn:3;
-       uchar li:2;
-#else
-       uchar li:2;
-       uchar vn:3;
-       uchar mode:3;
-#endif
-       uchar stratum;
-       uchar poll;
-       uchar precision;
-       uint root_delay;
-       uint root_dispersion;
-       uint reference_id;
-       unsigned long long reference_timestamp;
-       unsigned long long originate_timestamp;
-       unsigned long long receive_timestamp;
-       unsigned long long transmit_timestamp;
-} __attribute__((packed));
-
-void sntp_start(void); /* Begin SNTP */
-
-#endif /* __SNTP_H__ */