diff --git a/include/buddy/lwipopts.h b/include/buddy/lwipopts.h index 6dd207f667..e5fd4ddca0 100644 --- a/include/buddy/lwipopts.h +++ b/include/buddy/lwipopts.h @@ -9,27 +9,28 @@ extern "C" { #include -#define WITH_RTOS 1 -#define MEM_LIBC_MALLOC 0 -#define CHECKSUM_BY_HARDWARE 0 -#define LWIP_DHCP 1 -#define MEM_ALIGNMENT 4 -#define MEMP_NUM_SYS_TIMEOUT 8 -#define LWIP_ETHERNET 1 -#define LWIP_DNS_SECURE 7 -#define DNS_MAX_NAME_LENGTH 128 -#define SNTP_GET_SERVERS_FROM_DHCP 1 - -#define TCP_MSS 1024 -#define TCP_WND (8 * TCP_MSS) -#define TCP_SND_BUF (2 * TCP_MSS) -#define LWIP_WND_SCALE 0 -#define TCP_RCV_SCALE 0 -#define PBUF_POOL_SIZE 10 -#define PBUF_POOL_SMALL_SIZE 12 -#define IP_REASS_MAX_PBUFS 15 -#define TCPIP_THREAD_STACKSIZE 1248 -#define TCPIP_MBOX_SIZE PBUF_POOL_SIZE + PBUF_POOL_SMALL_SIZE +#define WITH_RTOS 1 +#define MEM_LIBC_MALLOC 0 +#define CHECKSUM_BY_HARDWARE 0 +#define LWIP_DHCP 1 +#define MEM_ALIGNMENT 4 +#define MEMP_NUM_SYS_TIMEOUT 8 +#define LWIP_ETHERNET 1 +#define LWIP_DNS_SECURE 7 +#define DNS_MAX_NAME_LENGTH 128 +#define SNTP_GET_SERVERS_FROM_DHCP 1 +#define SNTP_GET_SERVERS_FROM_DHCPV6 1 +#define SNTP_MAX_SERVERS 2 +#define TCP_MSS 1024 +#define TCP_WND (8 * TCP_MSS) +#define TCP_SND_BUF (2 * TCP_MSS) +#define LWIP_WND_SCALE 0 +#define TCP_RCV_SCALE 0 +#define PBUF_POOL_SIZE 10 +#define PBUF_POOL_SMALL_SIZE 12 +#define IP_REASS_MAX_PBUFS 15 +#define TCPIP_THREAD_STACKSIZE 1248 +#define TCPIP_MBOX_SIZE PBUF_POOL_SIZE + PBUF_POOL_SMALL_SIZE #define DEFAULT_UDP_RECVMBOX_SIZE TCPIP_MBOX_SIZE #define DEFAULT_TCP_RECVMBOX_SIZE TCPIP_MBOX_SIZE diff --git a/lib/WUI/netif_settings.h b/lib/WUI/netif_settings.h index b297a9ed30..9a4d17326d 100644 --- a/lib/WUI/netif_settings.h +++ b/lib/WUI/netif_settings.h @@ -33,7 +33,7 @@ typedef struct { ip_addr_t dns2_ip4; // user defined DNS #2 lan_t lan; // user defined LAN configurations uint32_t var_mask; // mask for setting ethvars - ip_addr_t ntp_ip4; // user defined NTP + char ntp[DNS_MAX_NAME_LENGTH + 1]; // user defined NTP } ETH_config_t; // those bits were previously assigned to distinguish WPA/WEP/none diff --git a/lib/WUI/sntp/sntp_client.c b/lib/WUI/sntp/sntp_client.c index 3e2ffbbb6f..86e245ca8b 100644 --- a/lib/WUI/sntp/sntp_client.c +++ b/lib/WUI/sntp/sntp_client.c @@ -2,50 +2,38 @@ #include "sntp_client.h" #include "netdev.h" #include "netif.h" - -// default ntp server: ip of Czech CESNET NTP server tak.cesnet.cz, until user changable -static const uint32_t ntp_server = 4002443715; // 4002443715 = rev32(3278999790) => "195.113.144.238" +#include "netdb.h" static uint32_t sntp_running = 0; // describes if sntp is currently running or not -void sntp_client_static_init(ip4_addr_t *ntp_ipv4_address) { +void sntp_client_static_init(const char *ntp_address) { sntp_setoperatingmode(SNTP_OPMODE_POLL); sntp_servermode_dhcp(0); -#if LWIP_IPV4 - #ifdef SNTP_SERVER_DNS - if (ntp_ipv4_address->addr == ntp_server) { - sntp_setservername(1, SNTP_SERVER_ADDRESS); - } else { - sntp_setserver(0, ntp_ipv4_address); - } - #else - sntp_setserver(0, ntp_ipv4_address); - #endif -#endif /* LWIP_IPV4 */ + sntp_setservername(0, ntp_address); sntp_init(); } -void sntp_client_dhcp_init(ip4_addr_t *ntp_ipv4_address) { +void sntp_client_dhcp_init(const char *ntp_address) { sntp_setoperatingmode(SNTP_OPMODE_POLL); sntp_servermode_dhcp(1); #if LWIP_IPV4 #ifdef SNTP_SERVER_DNS sntp_setservername(1, SNTP_SERVER_ADDRESS); #else - sntp_setserver(1, ntp_ipv4_address); + sntp_setservername(1, ntp_address); #endif #endif /* LWIP_IPV4 */ sntp_init(); } -void sntp_client_step(bool ntp_via_dhcp, ip4_addr_t *ntp_ipv4_address) { +void sntp_client_step(bool ntp_via_dhcp, const char *ntp_address) { netdev_status_t eth = netdev_get_status(NETDEV_ETH_ID); netdev_status_t wifi = netdev_get_status(NETDEV_ESP_ID); if (!sntp_running && (eth == NETDEV_NETIF_UP || wifi == NETDEV_NETIF_UP)) { if (ntp_via_dhcp) { - sntp_client_dhcp_init(ntp_ipv4_address); + sntp_client_dhcp_init(ntp_address); } else { - sntp_client_static_init(ntp_ipv4_address); + sntp_client_static_init(ntp_address); } sntp_running = 1; } else if (sntp_running && eth != NETDEV_NETIF_UP && wifi != NETDEV_NETIF_UP) { diff --git a/lib/WUI/sntp/sntp_client.h b/lib/WUI/sntp/sntp_client.h index f82a807771..e3dbb862e6 100644 --- a/lib/WUI/sntp/sntp_client.h +++ b/lib/WUI/sntp/sntp_client.h @@ -5,9 +5,9 @@ extern "C" { #endif -void sntp_client_static_init(ip4_addr_t *ntp_ipv4_address); -void sntp_client_dhcp_init(ip4_addr_t *ntp_ipv4_address); -void sntp_client_step(bool ntp_via_dhcp, ip4_addr_t *ntp_ipv4_address); +void sntp_client_static_init(const char *ntp_address); +void sntp_client_dhcp_init(const char *ntp_address); +void sntp_client_step(bool ntp_via_dhcp, const char *ntp_ipv4_address); void sntp_client_stop(void); #ifdef __cplusplus diff --git a/lib/WUI/wui.cpp b/lib/WUI/wui.cpp index a3babeccfc..ce49d31648 100644 --- a/lib/WUI/wui.cpp +++ b/lib/WUI/wui.cpp @@ -1,4 +1,5 @@ #include "wui.h" +#include "netdb.h" #include "netif_settings.h" #include "marlin_client.hpp" @@ -244,8 +245,7 @@ class NetworkState { // selected interface? dns_setserver(0, &cfg.dns1_ip4); dns_setserver(1, &cfg.dns2_ip4); - ip4_addr_t ntp_ipv4 { .addr = cfg.ntp_ip4.addr }; - sntp_client_static_init(&ntp_ipv4); + sntp_client_static_init((const char *)&cfg.ntp); netifapi_netif_set_addr(&iface.dev, &cfg.lan.addr_ip4, &cfg.lan.msk_ip4, &cfg.lan.gw_ip4); netifapi_dhcp_inform(&iface.dev); break; @@ -410,8 +410,7 @@ class NetworkState { // TODO: This does some code gymnastics inside to track changes // of network configuration. Consider cleaning that up and // integrating into some kind of up/down mechanism. - ip4_addr_t ntp_ipv4 = { .addr = config_store().lan_ntp_ip4_addr.get() }; - sntp_client_step(config_store().lan_ntp_via_dhcp.get(), &ntp_ipv4); + sntp_client_step(config_store().lan_ntp_via_dhcp.get(), config_store().lan_ntp_addr.get_c_str()); } if (events & HealthCheck) { diff --git a/lib/WUI/wui_api.cpp b/lib/WUI/wui_api.cpp index 8b35e4cdbd..563ac7cb28 100644 --- a/lib/WUI/wui_api.cpp +++ b/lib/WUI/wui_api.cpp @@ -80,10 +80,9 @@ static int ini_handler_func(void *user, const char *section, const char *name, c if (ip4addr_aton(value, &tmp_config->lan.gw_ip4)) { tmp_config->var_mask |= ETHVAR_MSK(ETHVAR_LAN_GW_IP4); } - } else if (ini_string_match(section, "network", name, "ntp4")) { - if (ip4addr_aton(value, &tmp_config->ntp_ip4)) { - tmp_config->var_mask |= ETHVAR_MSK(ETHVAR_NTP_ADDR_IP4); - } + } else if (ini_string_match(section, "network", name, "ntp")) { + strlcpy(tmp_config->ntp, value, DNS_MAX_NAME_LENGTH + 1); + tmp_config->var_mask |= ETHVAR_MSK(ETHVAR_NTP_ADDRESS); } else if (ini_string_match(section, "network", name, "dns4")) { if (NULL != strchr(value, ';')) { @@ -173,8 +172,8 @@ void save_net_params(ETH_config_t *ethconfig, ap_entry_t *ap, uint32_t netdev_id netdev_id == NETDEV_ETH_ID ? config_store().lan_hostname.set(ethconfig->hostname) : config_store().wifi_hostname.set(ethconfig->hostname); } - if (ethconfig->var_mask & ETHVAR_MSK(ETHVAR_NTP_ADDR_IP4)) { - config_store().lan_ntp_ip4_addr.set(ethconfig->ntp_ip4.addr); + if (ethconfig->var_mask & ETHVAR_MSK(ETHVAR_NTP_ADDRESS)) { + config_store().lan_ntp_addr.set(ethconfig->ntp); } if (ap != NULL) { assert(netdev_id == NETDEV_ESP_ID); @@ -200,7 +199,7 @@ void load_net_params(ETH_config_t *ethconfig, ap_entry_t *ap, uint32_t netdev_id ethconfig->dns2_ip4.addr = config_store().lan_ip4_dns2.get(); ethconfig->lan.msk_ip4.addr = config_store().lan_ip4_mask.get(); ethconfig->lan.gw_ip4.addr = config_store().lan_ip4_gateway.get(); - ethconfig->ntp_ip4.addr = config_store().lan_ntp_ip4_addr.get(); + strlcpy(ethconfig->ntp, config_store().lan_ntp_addr.get_c_str(), DNS_MAX_NAME_LENGTH + 1); strlcpy(ethconfig->hostname, config_store().lan_hostname.get_c_str(), ETH_HOSTNAME_LEN + 1); } else { ethconfig->lan.flag = config_store().wifi_flag.get() & ~RESERVED_MASK; @@ -209,7 +208,7 @@ void load_net_params(ETH_config_t *ethconfig, ap_entry_t *ap, uint32_t netdev_id ethconfig->dns2_ip4.addr = config_store().wifi_ip4_dns2.get(); ethconfig->lan.msk_ip4.addr = config_store().wifi_ip4_mask.get(); ethconfig->lan.gw_ip4.addr = config_store().wifi_ip4_gateway.get(); - ethconfig->ntp_ip4.addr = config_store().lan_ntp_ip4_addr.get(); + strlcpy(ethconfig->ntp, config_store().lan_ntp_addr.get_c_str(), DNS_MAX_NAME_LENGTH + 1); strlcpy(ethconfig->hostname, config_store().wifi_hostname.get_c_str(), ETH_HOSTNAME_LEN + 1); } diff --git a/lib/WUI/wui_api.h b/lib/WUI/wui_api.h index 1a100bd732..0d28cbf3f9 100644 --- a/lib/WUI/wui_api.h +++ b/lib/WUI/wui_api.h @@ -48,7 +48,7 @@ typedef enum { ETHVAR_DNS1_IP4, // ip_addr_t, dns1_ip4 ETHVAR_DNS2_IP4, // ip_addr_t, dns2_ip4 ETHVAR_MAC_ADDRESS, // is not included in ethconfig (used in stringifying for screen) - ETHVAR_NTP_ADDR_IP4, // ip_addr_t, ntp_ip4 + ETHVAR_NTP_ADDRESS, // char[256+1], hostname or ip APVAR_SSID, // char[32 + 1], ap_entry_t::ssid APVAR_PASS, // char[64 + 1], ap_entry_t::pass diff --git a/src/gui/MItem_lan.cpp b/src/gui/MItem_lan.cpp index 7829f6e2fb..e790d8146e 100644 --- a/src/gui/MItem_lan.cpp +++ b/src/gui/MItem_lan.cpp @@ -87,8 +87,8 @@ MI_MAC_ADDR::MI_MAC_ADDR() : WiInfo(_(label), nullptr, is_enabled_t::yes, is_hidden_t::no) { } -MI_NTP_IP4_ADDR::MI_NTP_IP4_ADDR() - : WiInfo(_(label), nullptr, is_enabled_t::yes, is_hidden_t::no) { +MI_NTP_ADDR::MI_NTP_ADDR() + : WiInfo(_(label), nullptr, is_enabled_t::yes, is_hidden_t::no) { } /*****************************************************************************/ diff --git a/src/gui/MItem_lan.hpp b/src/gui/MItem_lan.hpp index 530884ddcf..0130df2720 100644 --- a/src/gui/MItem_lan.hpp +++ b/src/gui/MItem_lan.hpp @@ -118,11 +118,11 @@ class MI_MAC_ADDR : public WiInfo { MI_MAC_ADDR(); }; -class MI_NTP_IP4_ADDR : public WiInfo { - static constexpr const char *const label = GuiDefaults::ScreenWidth > 240 ? N_("NTP IPv4 Address") : N_("NTP IP"); +class MI_NTP_ADDR : public WiInfo { + static constexpr const char *const label = GuiDefaults::ScreenWidth > 240 ? N_("NTP Address") : N_("NTP"); public: - MI_NTP_IP4_ADDR(); + MI_NTP_ADDR(); }; class MI_NTP_VIA_DHCP : public WI_ICON_SWITCH_OFF_ON_t { diff --git a/src/gui/screen_menu_network.cpp b/src/gui/screen_menu_network.cpp index 2724cb034e..b9c58fc012 100644 --- a/src/gui/screen_menu_network.cpp +++ b/src/gui/screen_menu_network.cpp @@ -29,10 +29,10 @@ void ScreenMenuNetwork::refresh_address() { stringify_address_for_screen(str, sizeof(str), ethconfig, ETHVAR_MSK(ETHVAR_LAN_ADDR_IP4)); Item().ChangeInformation(str); const ip_addr_t *ntp_server = sntp_getserver(0); - Item().ChangeInformation(ipaddr_ntoa(ntp_server)); + Item().ChangeInformation(ipaddr_ntoa(ntp_server)); } else { Item().ChangeInformation(UNKNOWN_ADDR); - Item().ChangeInformation(UNKNOWN_ADDR); + Item().ChangeInformation(UNKNOWN_ADDR); } } diff --git a/src/gui/screen_menu_network.hpp b/src/gui/screen_menu_network.hpp index aa925ab292..9b04bcaaed 100644 --- a/src/gui/screen_menu_network.hpp +++ b/src/gui/screen_menu_network.hpp @@ -15,7 +15,7 @@ using ScreenMenuNetwork__ = ScreenMenu; + MI_NET_INTERFACE_t, MI_IP4_ADDR, MI_MAC_ADDR, MI_NTP_VIA_DHCP, MI_NTP_ADDR, MI_METRICS_SETTINGS, MI_ETH_SETTINGS, MI_WIFI_SETTINGS>; class ScreenMenuNetwork : public ScreenMenuNetwork__ { public: diff --git a/src/persistent_stores/store_instances/config_store/defaults.hpp b/src/persistent_stores/store_instances/config_store/defaults.hpp index f3bb425eef..ead8c713c1 100644 --- a/src/persistent_stores/store_instances/config_store/defaults.hpp +++ b/src/persistent_stores/store_instances/config_store/defaults.hpp @@ -12,6 +12,7 @@ #include #include #include +#include "lwipopts.h" namespace config_store_ns { @@ -80,8 +81,7 @@ namespace defaults { inline constexpr std::array wifi_ap_ssid { "" }; inline constexpr std::array wifi_ap_password { "" }; - // default ntp server: ip of Czech CESNET NTP server tak.cesnet.cz, until user changable - inline constexpr uint32_t ntp_server { 4002443715 }; // 4002443715 = rev32(3278999790) => "195.113.144.238" + inline constexpr std::array ntp_server { "pool.ntp.org" }; inline constexpr eSOUND_MODE sound_mode { eSOUND_MODE::_undef }; inline constexpr uint8_t sound_volume { 5 }; diff --git a/src/persistent_stores/store_instances/config_store/store_definition.hpp b/src/persistent_stores/store_instances/config_store/store_definition.hpp index 0c0790672e..f734384b95 100644 --- a/src/persistent_stores/store_instances/config_store/store_definition.hpp +++ b/src/persistent_stores/store_instances/config_store/store_definition.hpp @@ -58,7 +58,7 @@ struct CurrentStore : public journal::CurrentStoreConfig lan_ip4_gateway; // X.X.X.X address encoded StoreItem lan_ip4_dns1; // X.X.X.X address encoded StoreItem lan_ip4_dns2; // X.X.X.X address encoded - StoreItem lan_ntp_ip4_addr; // X.X.X.X address encoded + StoreItem, defaults::ntp_server, journal::hash("NTP Address")> lan_ntp_addr; // X.X.X.X address encoded or string StoreItem, defaults::net_hostname, journal::hash("LAN Hostname")> lan_hostname; StoreItem timezone; // hour difference from UTC