static void ipv4_addr_add_handler(struct net_mgmt_event_callback *cb, u32_t mgmt_event, struct net_if *iface) { char hr_addr[NET_IPV4_ADDR_LEN]; int i = 0; for (i = 0; i < NET_IF_MAX_IPV4_ADDR; i++) { struct net_if_addr *if_addr = &iface->ipv4.unicast[i]; if (if_addr->addr_type != NET_ADDR_DHCP || !if_addr->is_used) { continue; } NET_INFO("IPv4 address: %s", net_addr_ntop(AF_INET, &if_addr->address.in_addr, hr_addr, NET_IPV4_ADDR_LEN)); NET_INFO("Lease time: %u seconds", iface->dhcpv4.lease_time); NET_INFO("Subnet: %s", net_addr_ntop(AF_INET, &iface->ipv4.netmask, hr_addr, NET_IPV4_ADDR_LEN)); NET_INFO("Router: %s", net_addr_ntop(AF_INET, &iface->ipv4.gw, hr_addr, NET_IPV4_ADDR_LEN)); break; } }
static void sprint_addr(char *buf, int len, sa_family_t family, struct sockaddr *addr) { if (family == AF_INET6) { net_addr_ntop(AF_INET6, &net_sin6(addr)->sin6_addr, buf, len); } else if (family == AF_INET) { net_addr_ntop(AF_INET, &net_sin(addr)->sin_addr, buf, len); } else { NET_DBG("Invalid protocol family"); } }
static void setup_ipv4(struct net_if *iface) { char hr_addr[NET_IPV4_ADDR_LEN]; struct in_addr addr; if (net_addr_pton(AF_INET, CONFIG_NET_APP_MY_IPV4_ADDR, &addr)) { NET_ERR("Invalid address: %s", CONFIG_NET_APP_MY_IPV4_ADDR); return; } net_if_ipv4_addr_add(iface, &addr, NET_ADDR_MANUAL, 0); NET_INFO("IPv4 address: %s", net_addr_ntop(AF_INET, &addr, hr_addr, NET_IPV4_ADDR_LEN)); }
STATIC mp_obj_t format_inet_addr(struct sockaddr *addr, mp_obj_t port) { // We employ the fact that port and address offsets are the same for IPv4 & IPv6 struct sockaddr_in6 *sockaddr_in6 = (struct sockaddr_in6*)addr; char buf[40]; net_addr_ntop(addr->sa_family, &sockaddr_in6->sin6_addr, buf, sizeof(buf)); mp_obj_tuple_t *tuple = mp_obj_new_tuple(addr->sa_family == AF_INET ? 2 : 4, NULL); tuple->items[0] = mp_obj_new_str(buf, strlen(buf), false); // We employ the fact that port offset is the same for IPv4 & IPv6 // not filled in //tuple->items[1] = mp_obj_new_int(ntohs(((struct sockaddr_in*)addr)->sin_port)); tuple->items[1] = port; if (addr->sa_family == AF_INET6) { tuple->items[2] = MP_OBJ_NEW_SMALL_INT(0); // flow_info tuple->items[3] = MP_OBJ_NEW_SMALL_INT(sockaddr_in6->sin6_scope_id); } return MP_OBJ_FROM_PTR(tuple); }
static void setup_ipv6(struct net_if *iface) { char hr_addr[NET_IPV6_ADDR_LEN]; struct in6_addr addr; if (net_addr_pton(AF_INET6, CONFIG_NET_APP_MY_IPV6_ADDR, &addr)) { NET_ERR("Invalid address: %s", CONFIG_NET_APP_MY_IPV6_ADDR); return; } net_if_ipv6_addr_add(iface, &addr, NET_ADDR_MANUAL, 0); NET_INFO("IPv6 address: %s", net_addr_ntop(AF_INET6, &addr, hr_addr, NET_IPV6_ADDR_LEN)); if (net_addr_pton(AF_INET6, MCAST_IP6ADDR, &addr)) { NET_ERR("Invalid address: %s", MCAST_IP6ADDR); return; } net_if_ipv6_maddr_add(iface, &addr); }
static void setup_device(void) { char hr_addr[NET_IPV6_ADDR_LEN]; struct net_if *iface; struct in6_addr addr; struct device *dev; dev = device_get_binding(CONFIG_IEEE802154_UPIPE_DRV_NAME); if (!dev) { NET_INFO("Cannot get UPIPE device\n"); return; } iface = net_if_lookup_by_dev(dev); if (!iface) { NET_INFO("Cannot get UPIPE network interface\n"); return; } if (net_addr_pton(AF_INET6, CONFIG_NET_APP_MY_IPV6_ADDR, &addr)) { NET_ERR("Invalid address: %s", CONFIG_NET_APP_MY_IPV6_ADDR); return; } net_if_ipv6_addr_add(iface, &addr, NET_ADDR_MANUAL, 0); NET_INFO("IPv6 address: %s", net_addr_ntop(AF_INET6, &addr, hr_addr, NET_IPV6_ADDR_LEN)); if (net_addr_pton(AF_INET6, MCAST_IP6ADDR, &addr)) { NET_ERR("Invalid address: %s", MCAST_IP6ADDR); return; } NET_INFO("802.15.4 device up and running\n"); }