extmod/modnetwork: Increase max hostname length to 32.

This changes from the previous limit of 15 characters.  Although DHCP and
mDNS allow for up to 63, ESP32 and ESP8266 only allow 32, so this seems
like a reasonable limit to enforce across all ports (and avoids wasting the
additional memory).

Also clarifies that `MICROPY_PY_NETWORK_HOSTNAME_MAX_LEN` does not include
the null terminator (which was unclear before).

This work was funded through GitHub Sponsors.

Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
This commit is contained in:
Jim Mussared 2023-09-29 22:49:49 +10:00 committed by Damien George
parent d6c55a40fe
commit b329fdcb73
6 changed files with 15 additions and 8 deletions

View File

@ -188,6 +188,11 @@ The following are functions available in the network module.
during connection. For this reason, you must set the hostname before during connection. For this reason, you must set the hostname before
activating/connecting your network interfaces. activating/connecting your network interfaces.
The length of the hostname is limited to 32 characters.
:term:`MicroPython ports <MicroPython port>` may choose to set a lower
limit for memory reasons. If the given name does not fit, a `ValueError`
is raised.
The default hostname is typically the name of the board. The default hostname is typically the name of the board.
.. function:: phy_mode([mode]) .. function:: phy_mode([mode])

View File

@ -35,7 +35,7 @@
#if MICROPY_PY_NETWORK #if MICROPY_PY_NETWORK
#include "shared/netutils/netutils.h" #include "shared/netutils/netutils.h"
#include "modnetwork.h" #include "extmod/modnetwork.h"
#if MICROPY_PY_NETWORK_CYW43 #if MICROPY_PY_NETWORK_CYW43
// So that CYW43_LINK_xxx constants are available to MICROPY_PORT_NETWORK_INTERFACES. // So that CYW43_LINK_xxx constants are available to MICROPY_PORT_NETWORK_INTERFACES.
@ -56,7 +56,7 @@ char mod_network_country_code[2] = "XX";
#error "MICROPY_PY_NETWORK_HOSTNAME_DEFAULT must be set in mpconfigport.h or mpconfigboard.h" #error "MICROPY_PY_NETWORK_HOSTNAME_DEFAULT must be set in mpconfigport.h or mpconfigboard.h"
#endif #endif
char mod_network_hostname[MICROPY_PY_NETWORK_HOSTNAME_MAX_LEN] = MICROPY_PY_NETWORK_HOSTNAME_DEFAULT; char mod_network_hostname[MICROPY_PY_NETWORK_HOSTNAME_MAX_LEN + 1] = MICROPY_PY_NETWORK_HOSTNAME_DEFAULT;
#ifdef MICROPY_PORT_NETWORK_INTERFACES #ifdef MICROPY_PORT_NETWORK_INTERFACES
@ -122,7 +122,7 @@ STATIC mp_obj_t network_hostname(size_t n_args, const mp_obj_t *args) {
} else { } else {
size_t len; size_t len;
const char *str = mp_obj_str_get_data(args[0], &len); const char *str = mp_obj_str_get_data(args[0], &len);
if (len >= MICROPY_PY_NETWORK_HOSTNAME_MAX_LEN) { if (len > MICROPY_PY_NETWORK_HOSTNAME_MAX_LEN) {
mp_raise_ValueError(NULL); mp_raise_ValueError(NULL);
} }
strcpy(mod_network_hostname, str); strcpy(mod_network_hostname, str);

View File

@ -56,10 +56,12 @@
extern char mod_network_country_code[2]; extern char mod_network_country_code[2];
#ifndef MICROPY_PY_NETWORK_HOSTNAME_MAX_LEN #ifndef MICROPY_PY_NETWORK_HOSTNAME_MAX_LEN
#define MICROPY_PY_NETWORK_HOSTNAME_MAX_LEN (16) // Doesn't include the null terminator.
#define MICROPY_PY_NETWORK_HOSTNAME_MAX_LEN (32)
#endif #endif
extern char mod_network_hostname[MICROPY_PY_NETWORK_HOSTNAME_MAX_LEN]; // This is a null-terminated string.
extern char mod_network_hostname[MICROPY_PY_NETWORK_HOSTNAME_MAX_LEN + 1];
#if MICROPY_PY_LWIP #if MICROPY_PY_LWIP
struct netif; struct netif;

View File

@ -500,7 +500,7 @@ STATIC mp_obj_t network_cyw43_config(size_t n_args, const mp_obj_t *args, mp_map
// TODO: Deprecated. Use network.hostname(name) instead. // TODO: Deprecated. Use network.hostname(name) instead.
size_t len; size_t len;
const char *str = mp_obj_str_get_data(e->value, &len); const char *str = mp_obj_str_get_data(e->value, &len);
if (len >= MICROPY_PY_NETWORK_HOSTNAME_MAX_LEN) { if (len > MICROPY_PY_NETWORK_HOSTNAME_MAX_LEN) {
mp_raise_ValueError(NULL); mp_raise_ValueError(NULL);
} }
strcpy(mod_network_hostname, str); strcpy(mod_network_hostname, str);

View File

@ -524,7 +524,7 @@ STATIC mp_obj_t network_wlan_config(size_t n_args, const mp_obj_t *args, mp_map_
// TODO: Deprecated. Use network.hostname(name) instead. // TODO: Deprecated. Use network.hostname(name) instead.
size_t len; size_t len;
const char *str = mp_obj_str_get_data(kwargs->table[i].value, &len); const char *str = mp_obj_str_get_data(kwargs->table[i].value, &len);
if (len >= MICROPY_PY_NETWORK_HOSTNAME_MAX_LEN) { if (len > MICROPY_PY_NETWORK_HOSTNAME_MAX_LEN) {
mp_raise_ValueError(NULL); mp_raise_ValueError(NULL);
} }
strcpy(mod_network_hostname, str); strcpy(mod_network_hostname, str);

View File

@ -404,7 +404,7 @@ STATIC mp_obj_t esp_config(size_t n_args, const mp_obj_t *args, mp_map_t *kwargs
// TODO: Deprecated. Use network.hostname(name) instead. // TODO: Deprecated. Use network.hostname(name) instead.
size_t len; size_t len;
const char *str = mp_obj_str_get_data(kwargs->table[i].value, &len); const char *str = mp_obj_str_get_data(kwargs->table[i].value, &len);
if (len >= MICROPY_PY_NETWORK_HOSTNAME_MAX_LEN) { if (len > MICROPY_PY_NETWORK_HOSTNAME_MAX_LEN) {
mp_raise_ValueError(NULL); mp_raise_ValueError(NULL);
} }
strcpy(mod_network_hostname, str); strcpy(mod_network_hostname, str);