|
|
@ -297,20 +297,23 @@ mp_obj_t mod_network_nic_ipconfig(struct netif *netif, size_t n_args, const mp_o |
|
|
|
char plain_ip[IPADDR_STRLEN_MAX]; |
|
|
|
char *split = strchr(input_str, '/'); |
|
|
|
const char *addr_str = input_str; |
|
|
|
int to_copy = MIN(sizeof(plain_ip) - 1, addr_len); |
|
|
|
memcpy(plain_ip, addr_str, to_copy); |
|
|
|
if (split) { |
|
|
|
int to_copy = sizeof(plain_ip) - 1; |
|
|
|
if (split - addr_str < to_copy) { |
|
|
|
to_copy = split - addr_str; |
|
|
|
} |
|
|
|
memcpy(plain_ip, addr_str, to_copy); |
|
|
|
mp_obj_t prefix_obj = mp_parse_num_integer(split + 1, strlen(split + 1), 10, NULL); |
|
|
|
prefix_bits = mp_obj_get_int(prefix_obj); |
|
|
|
if (mp_obj_str_get_qstr(args[0]) == MP_QSTR_addr4) { |
|
|
|
uint32_t mask = -(1u << (32 - prefix_bits)); |
|
|
|
ip_addr_set_ip4_u32_val(netmask, ((mask & 0xFF) << 24) | ((mask & 0xFF00) << 8) | ((mask >> 8) & 0xFF00) | ((mask >> 24) & 0xFF)); |
|
|
|
} |
|
|
|
} else { |
|
|
|
netmask = netif->netmask; |
|
|
|
} |
|
|
|
if (mp_obj_str_get_qstr(args[0]) == MP_QSTR_addr4) { |
|
|
|
uint32_t mask = -(1u << (32 - prefix_bits)); |
|
|
|
ip_addr_set_ip4_u32_val(netmask, ((mask & 0xFF) << 24) | ((mask & 0xFF00) << 8) | ((mask >> 8) & 0xFF00) | ((mask >> 24) & 0xFF)); |
|
|
|
} |
|
|
|
if (!ipaddr_aton(addr_str, &ip_addr)) { |
|
|
|
plain_ip[to_copy] = '\0'; |
|
|
|
if (!ipaddr_aton(plain_ip, &ip_addr)) { |
|
|
|
mp_raise_ValueError(MP_ERROR_TEXT("invalid arguments")); |
|
|
|
} |
|
|
|
if ((mp_obj_str_get_qstr(args[0]) == MP_QSTR_addr6) != IP_IS_V6(&ip_addr) |
|
|
|