diff --git a/cc3200/application.mk b/cc3200/application.mk index 48db12b2aa..f3ed40a72b 100644 --- a/cc3200/application.mk +++ b/cc3200/application.mk @@ -20,6 +20,7 @@ APP_INC += -I$(BUILD) APP_INC += -I$(BUILD)/genhdr APP_INC += -I../lib/fatfs APP_INC += -I../lib/mp-readline +APP_INC += -I../lib/netutils APP_INC += -I../stmhal APP_CPPDEFINES = -Dgcc -DTARGET_IS_CC3200 -DSL_FULL -DUSE_FREERTOS @@ -142,6 +143,7 @@ APP_LIB_SRC_C = $(addprefix lib/,\ fatfs/option/ccsbcs.c \ libc/string0.c \ mp-readline/readline.c \ + netutils/netutils.c \ ) APP_STM_SRC_C = $(addprefix stmhal/,\ diff --git a/cc3200/mods/modnetwork.c b/cc3200/mods/modnetwork.c index b63cb484dc..f9536ccb5e 100644 --- a/cc3200/mods/modnetwork.c +++ b/cc3200/mods/modnetwork.c @@ -114,60 +114,3 @@ const mp_obj_module_t mp_module_network = { .name = MP_QSTR_network, .globals = (mp_obj_dict_t*)&mp_module_network_globals, }; - -/******************************************************************************/ -// Miscellaneous helpers - -// Takes an address of the form '192.168.0.1' and converts it to integer -// in out_ip (little endian, so the 192 is the last byte). -void mod_network_parse_ipv4_addr(mp_obj_t addr_in, uint8_t *out_ip) { - mp_uint_t addr_len; - const char *addr_str = mp_obj_str_get_data(addr_in, &addr_len); - if (addr_len == 0) { - // special case of no address given - memset(out_ip, 0, MOD_NETWORK_IPV4ADDR_BUF_SIZE); - return; - } - const char *s = addr_str; - const char *s_top = addr_str + addr_len; - for (mp_uint_t i = 3 ; ; i--) { - mp_uint_t val = 0; - for (; s < s_top && *s != '.'; s++) { - val = val * 10 + *s - '0'; - } - out_ip[i] = val; - if (i == 0 && s == s_top) { - return; - } else if (i > 0 && s < s_top && *s == '.') { - s++; - } else { - nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, mpexception_value_invalid_arguments)); - } - } -} - -// Takes an address of the form ('192.168.0.1', 8080), returns the port and -// puts IP in out_ip (which must take at least IPADDR_BUF_SIZE bytes). -mp_uint_t mod_network_parse_inet_addr(mp_obj_t addr_in, uint8_t *out_ip) { - mp_obj_t *addr_items; - mp_obj_get_array_fixed_n(addr_in, 2, &addr_items); - mod_network_parse_ipv4_addr(addr_items[0], out_ip); - return mp_obj_get_int(addr_items[1]); -} - -// Takes an array with a raw IPv4 address and returns something like '192.168.0.1'. -mp_obj_t mod_network_format_ipv4_addr(uint8_t *ip) { - char ip_str[16]; - mp_uint_t ip_len = snprintf(ip_str, 16, "%u.%u.%u.%u", ip[3], ip[2], ip[1], ip[0]); - return mp_obj_new_str(ip_str, ip_len, false); -} - -// Takes an array with a raw IP address, and a port, and returns a net-address -// tuple such as ('192.168.0.1', 8080). -mp_obj_t mod_network_format_inet_addr(uint8_t *ip, mp_uint_t port) { - mp_obj_t tuple[2] = { - tuple[0] = mod_network_format_ipv4_addr(ip), - tuple[1] = mp_obj_new_int(port), - }; - return mp_obj_new_tuple(2, tuple); -} diff --git a/cc3200/mods/modnetwork.h b/cc3200/mods/modnetwork.h index a8f6facf41..1b7811c93f 100644 --- a/cc3200/mods/modnetwork.h +++ b/cc3200/mods/modnetwork.h @@ -77,9 +77,4 @@ void mod_network_init0(void); void mod_network_register_nic(mp_obj_t nic); mp_obj_t mod_network_find_nic(void); -void mod_network_parse_ipv4_addr(mp_obj_t addr_in, uint8_t *out_ip); -mp_uint_t mod_network_parse_inet_addr(mp_obj_t addr_in, uint8_t *out_ip); -mp_obj_t mod_network_format_ipv4_addr(uint8_t *ip); -mp_obj_t mod_network_format_inet_addr(uint8_t *ip, mp_uint_t port); - #endif // MODNETWORK_H_ diff --git a/cc3200/mods/modusocket.c b/cc3200/mods/modusocket.c index d3e596b03b..f74f2673dd 100644 --- a/cc3200/mods/modusocket.c +++ b/cc3200/mods/modusocket.c @@ -32,6 +32,7 @@ #include "py/mpstate.h" #include MICROPY_HAL_H #include "py/runtime.h" +#include "netutils.h" #include "modnetwork.h" #include "mpexception.h" @@ -99,7 +100,7 @@ STATIC mp_obj_t socket_bind(mp_obj_t self_in, mp_obj_t addr_in) { // get address uint8_t ip[MOD_NETWORK_IPV4ADDR_BUF_SIZE]; - mp_uint_t port = mod_network_parse_inet_addr(addr_in, ip); + mp_uint_t port = netutils_parse_inet_addr(addr_in, ip, NETUTILS_LITTLE); // call the NIC to bind the socket int _errno; @@ -155,7 +156,7 @@ STATIC mp_obj_t socket_accept(mp_obj_t self_in) { // make the return value mp_obj_tuple_t *client = mp_obj_new_tuple(2, NULL); client->items[0] = socket2; - client->items[1] = mod_network_format_inet_addr(ip, port); + client->items[1] = netutils_format_inet_addr(ip, port, NETUTILS_LITTLE); return client; } @@ -167,7 +168,7 @@ STATIC mp_obj_t socket_connect(mp_obj_t self_in, mp_obj_t addr_in) { // get address uint8_t ip[MOD_NETWORK_IPV4ADDR_BUF_SIZE]; - mp_uint_t port = mod_network_parse_inet_addr(addr_in, ip); + mp_uint_t port = netutils_parse_inet_addr(addr_in, ip, NETUTILS_LITTLE); // call the NIC to connect the socket int _errno; @@ -231,7 +232,7 @@ STATIC mp_obj_t socket_sendto(mp_obj_t self_in, mp_obj_t data_in, mp_obj_t addr_ // get address uint8_t ip[MOD_NETWORK_IPV4ADDR_BUF_SIZE]; - mp_uint_t port = mod_network_parse_inet_addr(addr_in, ip); + mp_uint_t port = netutils_parse_inet_addr(addr_in, ip, NETUTILS_LITTLE); // call the NIC to sendto int _errno; @@ -268,7 +269,7 @@ STATIC mp_obj_t socket_recvfrom(mp_obj_t self_in, mp_obj_t len_in) { vstr.buf[vstr.len] = '\0'; tuple[0] = mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr); } - tuple[1] = mod_network_format_inet_addr(ip, port); + tuple[1] = netutils_format_inet_addr(ip, port, NETUTILS_LITTLE); return mp_obj_new_tuple(2, tuple); } STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_recvfrom_obj, socket_recvfrom); @@ -399,7 +400,7 @@ STATIC mp_obj_t mod_usocket_getaddrinfo(mp_obj_t host_in, mp_obj_t port_in) { tuple->items[1] = MP_OBJ_NEW_SMALL_INT(SOCK_STREAM); tuple->items[2] = MP_OBJ_NEW_SMALL_INT(0); tuple->items[3] = MP_OBJ_NEW_QSTR(MP_QSTR_); - tuple->items[4] = mod_network_format_inet_addr(out_ip, port); + tuple->items[4] = netutils_format_inet_addr(out_ip, port, NETUTILS_LITTLE); return mp_obj_new_list(1, (mp_obj_t*)&tuple); } } diff --git a/cc3200/mods/modwlan.c b/cc3200/mods/modwlan.c index f5935bf825..e2fbdf5031 100644 --- a/cc3200/mods/modwlan.c +++ b/cc3200/mods/modwlan.c @@ -34,6 +34,7 @@ #include "py/obj.h" #include "py/objstr.h" #include "py/runtime.h" +#include "netutils.h" #include "modnetwork.h" #include "modwlan.h" #include "pybioctl.h" @@ -836,10 +837,10 @@ STATIC mp_obj_t wlan_ifconfig (mp_obj_t self_in) { ifconfig[1] = mp_obj_new_str((const char *)wlan_obj.ssid, strlen((const char *)wlan_obj.ssid), false); ifconfig[2] = mp_obj_new_bytes((const byte *)wlan_obj.bssid, SL_BSSID_LENGTH); ifconfig[3] = mp_obj_new_bytes((const byte *)wlan_obj.mac, SL_BSSID_LENGTH); - ifconfig[4] = mod_network_format_ipv4_addr((uint8_t *)&wlan_obj.ip); - ifconfig[5] = mod_network_format_ipv4_addr((uint8_t *)&ipV4.ipV4Mask); - ifconfig[6] = mod_network_format_ipv4_addr((uint8_t *)&wlan_obj.gateway); - ifconfig[7] = mod_network_format_ipv4_addr((uint8_t *)&wlan_obj.dns); + ifconfig[4] = netutils_format_ipv4_addr((uint8_t *)&wlan_obj.ip, NETUTILS_LITTLE); + ifconfig[5] = netutils_format_ipv4_addr((uint8_t *)&ipV4.ipV4Mask, NETUTILS_LITTLE); + ifconfig[6] = netutils_format_ipv4_addr((uint8_t *)&wlan_obj.gateway, NETUTILS_LITTLE); + ifconfig[7] = netutils_format_ipv4_addr((uint8_t *)&wlan_obj.dns, NETUTILS_LITTLE); return mp_obj_new_attrtuple(wlan_ifconfig_fields, 8, ifconfig); } @@ -992,10 +993,10 @@ STATIC mp_obj_t wlan_config_ip (mp_uint_t n_args, const mp_obj_t *pos_args, mp_m } SlNetCfgIpV4Args_t ipV4; - mod_network_parse_ipv4_addr(args[1].u_obj, (uint8_t *)&ipV4.ipV4); - mod_network_parse_ipv4_addr(args[2].u_obj, (uint8_t *)&ipV4.ipV4Mask); - mod_network_parse_ipv4_addr(args[3].u_obj, (uint8_t *)&ipV4.ipV4Gateway); - mod_network_parse_ipv4_addr(args[4].u_obj, (uint8_t *)&ipV4.ipV4DnsServer); + netutils_parse_ipv4_addr(args[1].u_obj, (uint8_t *)&ipV4.ipV4, NETUTILS_LITTLE); + netutils_parse_ipv4_addr(args[2].u_obj, (uint8_t *)&ipV4.ipV4Mask, NETUTILS_LITTLE); + netutils_parse_ipv4_addr(args[3].u_obj, (uint8_t *)&ipV4.ipV4Gateway, NETUTILS_LITTLE); + netutils_parse_ipv4_addr(args[4].u_obj, (uint8_t *)&ipV4.ipV4DnsServer, NETUTILS_LITTLE); wlan_servers_stop(); diff --git a/lib/netutils/netutils.c b/lib/netutils/netutils.c new file mode 100644 index 0000000000..ac4ebfa2b7 --- /dev/null +++ b/lib/netutils/netutils.c @@ -0,0 +1,95 @@ +/* + * This file is part of the Micro Python project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2013, 2014 Damien P. George + * Copyright (c) 2015 Daniel Campora + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include +#include +#include + +#include "py/obj.h" +#include "py/nlr.h" +#include "netutils.h" + +// Takes an array with a raw IPv4 address and returns something like '192.168.0.1'. +mp_obj_t netutils_format_ipv4_addr(uint8_t *ip, netutils_endian_t endian) { + char ip_str[16]; + mp_uint_t ip_len; + if (endian == NETUTILS_LITTLE) { + ip_len = snprintf(ip_str, 16, "%u.%u.%u.%u", ip[3], ip[2], ip[1], ip[0]); + } else { + ip_len = snprintf(ip_str, 16, "%u.%u.%u.%u", ip[0], ip[1], ip[2], ip[3]); + } + return mp_obj_new_str(ip_str, ip_len, false); +} + +// Takes an array with a raw IP address, and a port, and returns a net-address +// tuple such as ('192.168.0.1', 8080). +mp_obj_t netutils_format_inet_addr(uint8_t *ip, mp_uint_t port, netutils_endian_t endian) { + mp_obj_t tuple[2] = { + tuple[0] = netutils_format_ipv4_addr(ip, endian), + tuple[1] = mp_obj_new_int(port), + }; + return mp_obj_new_tuple(2, tuple); +} + +void netutils_parse_ipv4_addr(mp_obj_t addr_in, uint8_t *out_ip, netutils_endian_t endian) { + mp_uint_t addr_len; + const char *addr_str = mp_obj_str_get_data(addr_in, &addr_len); + if (addr_len == 0) { + // special case of no address given + memset(out_ip, 0, NETUTILS_IPV4ADDR_BUFSIZE); + return; + } + const char *s = addr_str; + const char *s_top = addr_str + addr_len; + for (mp_uint_t i = 3 ; ; i--) { + mp_uint_t val = 0; + for (; s < s_top && *s != '.'; s++) { + val = val * 10 + *s - '0'; + } + if (endian == NETUTILS_LITTLE) { + out_ip[i] = val; + } else { + out_ip[NETUTILS_IPV4ADDR_BUFSIZE - 1 - i] = val; + } + if (i == 0 && s == s_top) { + return; + } else if (i > 0 && s < s_top && *s == '.') { + s++; + } else { + nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "invalid arguments")); + } + } +} + +// Takes an address of the form ('192.168.0.1', 8080), returns the port and +// puts IP in out_ip (which must take at least IPADDR_BUF_SIZE bytes). +mp_uint_t netutils_parse_inet_addr(mp_obj_t addr_in, uint8_t *out_ip, netutils_endian_t endian) { + mp_obj_t *addr_items; + mp_obj_get_array_fixed_n(addr_in, 2, &addr_items); + netutils_parse_ipv4_addr(addr_items[0], out_ip, endian); + return mp_obj_get_int(addr_items[1]); +} diff --git a/lib/netutils/netutils.h b/lib/netutils/netutils.h new file mode 100644 index 0000000000..45e0216402 --- /dev/null +++ b/lib/netutils/netutils.h @@ -0,0 +1,50 @@ +/* + * This file is part of the Micro Python project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2013, 2014 Damien P. George + * Copyright (c) 2015 Daniel Campora + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#ifndef __MICROPY_INCLUDED_LIB_NETUTILS_H__ +#define __MICROPY_INCLUDED_LIB_NETUTILS_H__ + +#define NETUTILS_IPV4ADDR_BUFSIZE 4 + +typedef enum _netutils_endian_t { + NETUTILS_LITTLE, + NETUTILS_BIG, +} netutils_endian_t; + +// Takes an array with a raw IPv4 address and returns something like '192.168.0.1'. +mp_obj_t netutils_format_ipv4_addr(uint8_t *ip, netutils_endian_t endian); + +// Takes an array with a raw IP address, and a port, and returns a net-address +// tuple such as ('192.168.0.1', 8080). +mp_obj_t netutils_format_inet_addr(uint8_t *ip, mp_uint_t port, netutils_endian_t endian); + +void netutils_parse_ipv4_addr(mp_obj_t addr_in, uint8_t *out_ip, netutils_endian_t endian); + +// Takes an address of the form ('192.168.0.1', 8080), returns the port and +// puts IP in out_ip (which must take at least IPADDR_BUF_SIZE bytes). +mp_uint_t netutils_parse_inet_addr(mp_obj_t addr_in, uint8_t *out_ip, netutils_endian_t endian); + +#endif // __MICROPY_INCLUDED_LIB_NETUTILS_H__ diff --git a/stmhal/Makefile b/stmhal/Makefile index 78553f188b..60f05669b2 100644 --- a/stmhal/Makefile +++ b/stmhal/Makefile @@ -41,6 +41,7 @@ INC += -I$(HAL_DIR)/inc INC += -I$(USBDEV_DIR)/core/inc -I$(USBDEV_DIR)/class/inc #INC += -I$(USBHOST_DIR) INC += -I../lib/mp-readline +INC += -I../lib/netutils CFLAGS_CORTEX_M4 = -mthumb -mtune=cortex-m4 -mabi=aapcs-linux -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fsingle-precision-constant -Wdouble-promotion CFLAGS = $(INC) -Wall -Wpointer-arith -Werror -ansi -std=gnu99 -nostdlib $(CFLAGS_MOD) $(CFLAGS_CORTEX_M4) $(COPT) @@ -92,6 +93,7 @@ SRC_LIB = $(addprefix lib/,\ fatfs/ff.c \ fatfs/option/ccsbcs.c \ mp-readline/readline.c \ + netutils/netutils.c \ ) SRC_C = \ diff --git a/stmhal/modnetwork.c b/stmhal/modnetwork.c index 4163783e2c..86bf7379bb 100644 --- a/stmhal/modnetwork.c +++ b/stmhal/modnetwork.c @@ -90,65 +90,3 @@ const mp_obj_module_t mp_module_network = { .name = MP_QSTR_network, .globals = (mp_obj_dict_t*)&mp_module_network_globals, }; - -/******************************************************************************/ -// Miscellaneous helpers - -void mod_network_convert_ipv4_endianness(uint8_t *ip) { - uint8_t ip0 = ip[0]; ip[0] = ip[3]; ip[3] = ip0; - uint8_t ip1 = ip[1]; ip[1] = ip[2]; ip[2] = ip1; -} - -// Takes an address of the form '192.168.0.1' and converts it to network format -// in out_ip (big endian, so the 192 is the first byte). -void mod_network_parse_ipv4_addr(mp_obj_t addr_in, uint8_t *out_ip) { - mp_uint_t addr_len; - const char *addr_str = mp_obj_str_get_data(addr_in, &addr_len); - if (addr_len == 0) { - // special case of no address given - memset(out_ip, 0, MOD_NETWORK_IPADDR_BUF_SIZE); - return; - } - const char *s = addr_str; - const char *s_top = addr_str + addr_len; - for (mp_uint_t i = 0;; i++) { - mp_uint_t val = 0; - for (; s < s_top && *s != '.'; s++) { - val = val * 10 + *s - '0'; - } - out_ip[i] = val; - if (i == 3 && s == s_top) { - return; - } else if (i < 3 && s < s_top && *s == '.') { - s++; - } else { - nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "invalid IP address")); - } - } -} - -// Takes an address of the form ('192.168.0.1', 8080), returns the port and -// puts IP in out_ip (which must take at least IPADDR_BUF_SIZE bytes). -mp_uint_t mod_network_parse_inet_addr(mp_obj_t addr_in, uint8_t *out_ip) { - mp_obj_t *addr_items; - mp_obj_get_array_fixed_n(addr_in, 2, &addr_items); - mod_network_parse_ipv4_addr(addr_items[0], out_ip); - return mp_obj_get_int(addr_items[1]); -} - -// Takes an array with a raw IPv4 address and returns something like '192.168.0.1'. -mp_obj_t mod_network_format_ipv4_addr(uint8_t *ip) { - char ip_str[16]; - mp_uint_t ip_len = snprintf(ip_str, 16, "%u.%u.%u.%u", ip[0], ip[1], ip[2], ip[3]); - return mp_obj_new_str(ip_str, ip_len, false); -} - -// Takes an array with a raw IP address, and a port, and returns a net-address -// tuple such as ('192.168.0.1', 8080). -mp_obj_t mod_network_format_inet_addr(uint8_t *ip, mp_uint_t port) { - mp_obj_t tuple[2] = { - tuple[0] = mod_network_format_ipv4_addr(ip), - tuple[1] = mp_obj_new_int(port), - }; - return mp_obj_new_tuple(2, tuple); -} diff --git a/stmhal/modnetwork.h b/stmhal/modnetwork.h index f306f877a5..d3bc5674de 100644 --- a/stmhal/modnetwork.h +++ b/stmhal/modnetwork.h @@ -77,9 +77,3 @@ extern const mod_network_nic_type_t mod_network_nic_type_cc3k; void mod_network_init(void); void mod_network_register_nic(mp_obj_t nic); mp_obj_t mod_network_find_nic(const uint8_t *ip); - -void mod_network_convert_ipv4_endianness(uint8_t *ip); -void mod_network_parse_ipv4_addr(mp_obj_t addr_in, uint8_t *out_ip); -mp_uint_t mod_network_parse_inet_addr(mp_obj_t addr_in, uint8_t *out_ip); -mp_obj_t mod_network_format_ipv4_addr(uint8_t *ip); -mp_obj_t mod_network_format_inet_addr(uint8_t *ip, mp_uint_t port); diff --git a/stmhal/modnwcc3k.c b/stmhal/modnwcc3k.c index 5236c3bdc1..7dd5fb2cdf 100644 --- a/stmhal/modnwcc3k.c +++ b/stmhal/modnwcc3k.c @@ -36,6 +36,7 @@ #include "py/objlist.h" #include "py/stream.h" #include "py/runtime.h" +#include "netutils.h" #include "modnetwork.h" #include "pin.h" #include "genhdr/pins.h" @@ -519,13 +520,6 @@ STATIC mp_obj_t cc3k_ifconfig(mp_obj_t self_in) { tNetappIpconfigRetArgs ipconfig; netapp_ipconfig(&ipconfig); - // CC3000 returns little endian, but we want big endian - mod_network_convert_ipv4_endianness(ipconfig.aucIP); - mod_network_convert_ipv4_endianness(ipconfig.aucSubnetMask); - mod_network_convert_ipv4_endianness(ipconfig.aucDefaultGateway); - mod_network_convert_ipv4_endianness(ipconfig.aucDNSServer); - mod_network_convert_ipv4_endianness(ipconfig.aucDHCPServer); - // render MAC address VSTR_FIXED(mac_vstr, 18); const uint8_t *mac = ipconfig.uaMacAddr; @@ -533,11 +527,11 @@ STATIC mp_obj_t cc3k_ifconfig(mp_obj_t self_in) { // create and return tuple with ifconfig info mp_obj_t tuple[7] = { - mod_network_format_ipv4_addr(ipconfig.aucIP), - mod_network_format_ipv4_addr(ipconfig.aucSubnetMask), - mod_network_format_ipv4_addr(ipconfig.aucDefaultGateway), - mod_network_format_ipv4_addr(ipconfig.aucDNSServer), - mod_network_format_ipv4_addr(ipconfig.aucDHCPServer), + netutils_format_ipv4_addr(ipconfig.aucIP, NETUTILS_LITTLE), + netutils_format_ipv4_addr(ipconfig.aucSubnetMask, NETUTILS_LITTLE), + netutils_format_ipv4_addr(ipconfig.aucDefaultGateway, NETUTILS_LITTLE), + netutils_format_ipv4_addr(ipconfig.aucDNSServer, NETUTILS_LITTLE), + netutils_format_ipv4_addr(ipconfig.aucDHCPServer, NETUTILS_LITTLE), mp_obj_new_str(mac_vstr.buf, mac_vstr.len, false), mp_obj_new_str((const char*)ipconfig.uaSSID, strlen((const char*)ipconfig.uaSSID), false), }; diff --git a/stmhal/modnwwiznet5k.c b/stmhal/modnwwiznet5k.c index 896c4402d8..48d9be170c 100644 --- a/stmhal/modnwwiznet5k.c +++ b/stmhal/modnwwiznet5k.c @@ -32,6 +32,7 @@ #include "py/nlr.h" #include "py/objlist.h" #include "py/runtime.h" +#include "netutils.h" #include "modnetwork.h" #include "pin.h" #include "genhdr/pins.h" @@ -422,20 +423,20 @@ STATIC mp_obj_t wiznet5k_ifconfig(mp_uint_t n_args, const mp_obj_t *args) { if (n_args == 1) { // get mp_obj_t tuple[4] = { - mod_network_format_ipv4_addr(netinfo.ip), - mod_network_format_ipv4_addr(netinfo.sn), - mod_network_format_ipv4_addr(netinfo.gw), - mod_network_format_ipv4_addr(netinfo.dns), + netutils_format_ipv4_addr(netinfo.ip, NETUTILS_BIG), + netutils_format_ipv4_addr(netinfo.sn, NETUTILS_BIG), + netutils_format_ipv4_addr(netinfo.gw, NETUTILS_BIG), + netutils_format_ipv4_addr(netinfo.dns, NETUTILS_BIG), }; return mp_obj_new_tuple(4, tuple); } else { // set mp_obj_t *items; mp_obj_get_array_fixed_n(args[1], 4, &items); - mod_network_parse_ipv4_addr(items[0], netinfo.ip); - mod_network_parse_ipv4_addr(items[1], netinfo.sn); - mod_network_parse_ipv4_addr(items[2], netinfo.gw); - mod_network_parse_ipv4_addr(items[3], netinfo.dns); + netutils_parse_ipv4_addr(items[0], netinfo.ip, NETUTILS_BIG); + netutils_parse_ipv4_addr(items[1], netinfo.sn, NETUTILS_BIG); + netutils_parse_ipv4_addr(items[2], netinfo.gw, NETUTILS_BIG); + netutils_parse_ipv4_addr(items[3], netinfo.dns, NETUTILS_BIG); ctlnetwork(CN_SET_NETINFO, &netinfo); return mp_const_none; } diff --git a/stmhal/modusocket.c b/stmhal/modusocket.c index a2ec08f59e..4ef614e4ca 100644 --- a/stmhal/modusocket.c +++ b/stmhal/modusocket.c @@ -32,6 +32,7 @@ #include "py/objtuple.h" #include "py/objlist.h" #include "py/runtime.h" +#include "netutils.h" #include "modnetwork.h" /******************************************************************************/ @@ -93,7 +94,7 @@ STATIC mp_obj_t socket_bind(mp_obj_t self_in, mp_obj_t addr_in) { // get address uint8_t ip[MOD_NETWORK_IPADDR_BUF_SIZE]; - mp_uint_t port = mod_network_parse_inet_addr(addr_in, ip); + mp_uint_t port = netutils_parse_inet_addr(addr_in, ip, NETUTILS_BIG); // check if we need to select a NIC socket_select_nic(self, ip); @@ -153,7 +154,7 @@ STATIC mp_obj_t socket_accept(mp_obj_t self_in) { // make the return value mp_obj_tuple_t *client = mp_obj_new_tuple(2, NULL); client->items[0] = socket2; - client->items[1] = mod_network_format_inet_addr(ip, port); + client->items[1] = netutils_format_inet_addr(ip, port, NETUTILS_BIG); return client; } @@ -165,7 +166,7 @@ STATIC mp_obj_t socket_connect(mp_obj_t self_in, mp_obj_t addr_in) { // get address uint8_t ip[MOD_NETWORK_IPADDR_BUF_SIZE]; - mp_uint_t port = mod_network_parse_inet_addr(addr_in, ip); + mp_uint_t port = netutils_parse_inet_addr(addr_in, ip, NETUTILS_BIG); // check if we need to select a NIC socket_select_nic(self, ip); @@ -231,7 +232,7 @@ STATIC mp_obj_t socket_sendto(mp_obj_t self_in, mp_obj_t data_in, mp_obj_t addr_ // get address uint8_t ip[MOD_NETWORK_IPADDR_BUF_SIZE]; - mp_uint_t port = mod_network_parse_inet_addr(addr_in, ip); + mp_uint_t port = netutils_parse_inet_addr(addr_in, ip, NETUTILS_BIG); // check if we need to select a NIC socket_select_nic(self, ip); @@ -270,7 +271,7 @@ STATIC mp_obj_t socket_recvfrom(mp_obj_t self_in, mp_obj_t len_in) { vstr.len = ret; tuple[0] = mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr); } - tuple[1] = mod_network_format_inet_addr(ip, port); + tuple[1] = netutils_format_inet_addr(ip, port, NETUTILS_BIG); return mp_obj_new_tuple(2, tuple); } STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_recvfrom_obj, socket_recvfrom); @@ -404,7 +405,7 @@ STATIC mp_obj_t mod_usocket_getaddrinfo(mp_obj_t host_in, mp_obj_t port_in) { tuple->items[1] = MP_OBJ_NEW_SMALL_INT(MOD_NETWORK_SOCK_STREAM); tuple->items[2] = MP_OBJ_NEW_SMALL_INT(0); tuple->items[3] = MP_OBJ_NEW_QSTR(MP_QSTR_); - tuple->items[4] = mod_network_format_inet_addr(out_ip, port); + tuple->items[4] = netutils_format_inet_addr(out_ip, port, NETUTILS_BIG); return mp_obj_new_list(1, (mp_obj_t*)&tuple); } }