diff options
| author | Jim Mussared <jim.mussared@gmail.com> | 2023-02-01 14:19:45 +1100 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2023-03-01 01:26:17 +1100 |
| commit | a3773026238c7c779cad79aa9d9c468e680e7004 (patch) | |
| tree | f2654f2bc0ab70f2032b4d8cdf70573d68b83c14 /extmod/modnetwork.c | |
| parent | fc4c47f7bc72bf0ff216a45a334702fcd25e14de (diff) | |
extmod/modnetwork: Add network.hostname() and network.country().
This provides a standard interface to setting the global networking config
for all interfaces and interface types.
For ports that already use either a static hostname (mimxrt, rp2) they will
now use the configured value. The default is configured by the port
(or optionally the board).
For interfaces that previously supported .config(hostname), this is still
supported but now implemented using the global network.hostname.
Similarly, pyb.country and rp2.country are now deprecated, but the methods
still exist (and forward to network.hostname).
Because ESP32/ESP8266 do not use extmod/modnetwork.c they are not affected
by this commit.
Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
Diffstat (limited to 'extmod/modnetwork.c')
| -rw-r--r-- | extmod/modnetwork.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/extmod/modnetwork.c b/extmod/modnetwork.c index d5c8f83ea..0431e5f41 100644 --- a/extmod/modnetwork.c +++ b/extmod/modnetwork.c @@ -54,6 +54,14 @@ /// /// This module provides network drivers and routing configuration. +char mod_network_country_code[2] = "XX"; + +#ifndef MICROPY_PY_NETWORK_HOSTNAME_DEFAULT +#error "MICROPY_PY_NETWORK_HOSTNAME_DEFAULT must be set in mpconfigport.h or mpconfigboard.h" +#endif + +char mod_network_hostname[MICROPY_PY_NETWORK_HOSTNAME_MAX_LEN] = MICROPY_PY_NETWORK_HOSTNAME_DEFAULT; + void mod_network_init(void) { mp_obj_list_init(&MP_STATE_PORT(mod_network_nic_list), 0); } @@ -89,9 +97,43 @@ STATIC mp_obj_t network_route(void) { } STATIC MP_DEFINE_CONST_FUN_OBJ_0(network_route_obj, network_route); +STATIC mp_obj_t network_country(size_t n_args, const mp_obj_t *args) { + if (n_args == 0) { + return mp_obj_new_str(mod_network_country_code, 2); + } else { + size_t len; + const char *str = mp_obj_str_get_data(args[0], &len); + if (len != 2) { + mp_raise_ValueError(NULL); + } + mod_network_country_code[0] = str[0]; + mod_network_country_code[1] = str[1]; + return mp_const_none; + } +} +// TODO: Non-static to allow backwards-compatible pyb.country. +MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_network_country_obj, 0, 1, network_country); + +STATIC mp_obj_t network_hostname(size_t n_args, const mp_obj_t *args) { + if (n_args == 0) { + return mp_obj_new_str(mod_network_hostname, strlen(mod_network_hostname)); + } else { + size_t len; + const char *str = mp_obj_str_get_data(args[0], &len); + if (len >= MICROPY_PY_NETWORK_HOSTNAME_MAX_LEN) { + mp_raise_ValueError(NULL); + } + strcpy(mod_network_hostname, str); + return mp_const_none; + } +} +STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_network_hostname_obj, 0, 1, network_hostname); + STATIC const mp_rom_map_elem_t mp_module_network_globals_table[] = { { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_network) }, { MP_ROM_QSTR(MP_QSTR_route), MP_ROM_PTR(&network_route_obj) }, + { MP_ROM_QSTR(MP_QSTR_country), MP_ROM_PTR(&mod_network_country_obj) }, + { MP_ROM_QSTR(MP_QSTR_hostname), MP_ROM_PTR(&mod_network_hostname_obj) }, // Defined per port in mpconfigport.h MICROPY_PORT_NETWORK_INTERFACES |
