summaryrefslogtreecommitdiff
path: root/extmod/modnetwork.c
diff options
context:
space:
mode:
authorJim Mussared <jim.mussared@gmail.com>2023-02-01 14:19:45 +1100
committerDamien George <damien@micropython.org>2023-03-01 01:26:17 +1100
commita3773026238c7c779cad79aa9d9c468e680e7004 (patch)
treef2654f2bc0ab70f2032b4d8cdf70573d68b83c14 /extmod/modnetwork.c
parentfc4c47f7bc72bf0ff216a45a334702fcd25e14de (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.c42
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