/************************************************************************ * NAME: fnet_inet_ptos * * DESCRIPTION:The function converts from presentation format (string) * to struct sockaddr. *************************************************************************/ int fnet_inet_ptos (char *str, struct sockaddr *addr) { #if FNET_CFG_IP4 if(fnet_inet_pton(AF_INET, str, addr->sa_data, sizeof(addr->sa_data)) == FNET_OK) addr->sa_family = AF_INET; else #endif /* FNET_CFG_IP4 */ #if FNET_CFG_IP6 if(fnet_inet_pton(AF_INET6, str, addr->sa_data, sizeof(addr->sa_data)) == FNET_OK) addr->sa_family = AF_INET6; else #endif /* FNET_CFG_IP6 */ return FNET_ERR; return FNET_OK; }
/************************************************************************ * NAME: fnet_inet_ptos * * DESCRIPTION:The function converts from presentation format (string) * to struct sockaddr. *************************************************************************/ int fnet_inet_ptos (const char *str, struct sockaddr *addr) { #if FNET_CFG_IP4 if(fnet_inet_pton(AF_INET, str, addr->sa_data, sizeof(addr->sa_data)) == FNET_OK) { addr->sa_family = AF_INET; } else #endif /* FNET_CFG_IP4 */ #if FNET_CFG_IP6 if(fnet_inet_pton(AF_INET6, str, addr->sa_data, sizeof(addr->sa_data)) == FNET_OK) { addr->sa_family = AF_INET6; /* Scope ID.*/ { unsigned long scope_id; const char *p = fnet_strrchr(str, '%'); /* Find "%<scope id>".*/ if(p != FNET_NULL) { scope_id = fnet_strtoul((p+1), 0, 10); } else { scope_id = 0; /* Default interface.*/ } ((struct sockaddr_in6 *)addr)->sin6_scope_id = scope_id; } } else #endif /* FNET_CFG_IP6 */ return FNET_ERR; addr->sa_port = 0; return FNET_OK; }
static void fapp_unbind_cmd( fnet_shell_desc_t desc, fnet_index_t argc, fnet_char_t ** argv ) { fnet_netif_desc_t netif = fnet_netif_get_default(); fnet_ip6_addr_t addr; FNET_COMP_UNUSED_ARG(argc); if(fnet_inet_pton(AF_INET6, argv[1], &addr, sizeof(addr)) == FNET_OK) { fnet_netif_unbind_ip6_addr(netif, &addr); } else { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[1]); } }