229 lines
10 KiB
C
229 lines
10 KiB
C
/*
|
|
*********************************************************************************************************
|
|
* uC/TCP-IP
|
|
* The Embedded TCP/IP Suite
|
|
*
|
|
* Copyright 2004-2020 Silicon Laboratories Inc. www.silabs.com
|
|
*
|
|
* SPDX-License-Identifier: APACHE-2.0
|
|
*
|
|
* This software is subject to an open source license and is distributed by
|
|
* Silicon Laboratories Inc. pursuant to the terms of the Apache License,
|
|
* Version 2.0 available at www.apache.org/licenses/LICENSE-2.0.
|
|
*
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
*
|
|
* NETWORK ASCII LIBRARY
|
|
*
|
|
* Filename : net_ascii.h
|
|
* Version : V3.06.00
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
*********************************************************************************************************
|
|
* MODULE
|
|
*********************************************************************************************************
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#ifndef NET_ASCII_MODULE_PRESENT
|
|
#define NET_ASCII_MODULE_PRESENT
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
*********************************************************************************************************
|
|
* INCLUDE FILES
|
|
*********************************************************************************************************
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#include "net_cfg_net.h"
|
|
#include <cpu.h>
|
|
#include "net_type.h"
|
|
#include "net_err.h"
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* DEFINES
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#define NET_ASCII_CHAR_LEN_DOT 1u
|
|
#define NET_ASCII_CHAR_LEN_HYPHEN 1u
|
|
#define NET_ASCII_CHAR_LEN_COLON 1u
|
|
#define NET_ASCII_CHAR_LEN_NUL 1u
|
|
|
|
|
|
#define NET_ASCII_CHAR_MIN_OCTET 1u
|
|
|
|
#define NET_ASCII_CHAR_MAX_OCTET_08 DEF_INT_08U_NBR_DIG_MAX
|
|
#define NET_ASCII_CHAR_MAX_OCTET_16 DEF_INT_16U_NBR_DIG_MAX
|
|
#define NET_ASCII_CHAR_MAX_OCTET_32 DEF_INT_32U_NBR_DIG_MAX
|
|
|
|
#define NET_ASCII_STR_LOCAL_HOST "localhost"
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* NETWORK ASCII ADDRESS DEFINES
|
|
*
|
|
* Note(s) : (1) ONLY supports 48-bit Ethernet MAC addresses.
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#define NET_ASCII_NBR_OCTET_ADDR_MAC 6u /* See Note #1. */
|
|
#define NET_ASCII_CHAR_MAX_OCTET_ADDR_MAC 2u
|
|
|
|
#define NET_ASCII_LEN_MAX_ADDR_MAC ((NET_ASCII_NBR_OCTET_ADDR_MAC * NET_ASCII_CHAR_MAX_OCTET_ADDR_MAC) + \
|
|
((NET_ASCII_NBR_OCTET_ADDR_MAC - 1u) * NET_ASCII_CHAR_LEN_HYPHEN ) + \
|
|
NET_ASCII_CHAR_LEN_NUL )
|
|
|
|
|
|
/* IPv4 addresses. */
|
|
#define NET_ASCII_CHAR_MAX_OCTET_ADDR_IPv4 3u
|
|
#define NET_ASCII_VAL_MAX_OCTET_ADDR_IPv4 255u
|
|
|
|
#define NET_ASCII_NBR_OCTET_ADDR_IPv4 (sizeof(NET_IPv4_ADDR))
|
|
|
|
|
|
#define NET_ASCII_LEN_MAX_ADDR_IPv4 ((NET_ASCII_NBR_OCTET_ADDR_IPv4 * NET_ASCII_CHAR_MAX_OCTET_ADDR_IPv4) + \
|
|
((NET_ASCII_NBR_OCTET_ADDR_IPv4 - 1) * NET_ASCII_CHAR_LEN_DOT ) + \
|
|
NET_ASCII_CHAR_LEN_NUL )
|
|
|
|
#define NET_ASCII_NBR_MAX_DEC_PARTS 4u
|
|
#define NET_ASCII_CHAR_MAX_PART_ADDR_IP DEF_INT_32U_NBR_DIG_MAX
|
|
#define NET_ASCII_VAL_MAX_PART_ADDR_IP DEF_INT_32U_MAX_VAL
|
|
#define NET_ASCII_NBR_MAX_DOT_ADDR_IP 3u
|
|
|
|
#define NET_ASCII_MASK_32_01_BIT 0xFFFFFFFFu
|
|
#define NET_ASCII_MASK_24_01_BIT 0x00FFFFFFu
|
|
#define NET_ASCII_MASK_16_01_BIT 0x0000FFFFu
|
|
#define NET_ASCII_MASK_08_01_BIT 0x000000FFu
|
|
#define NET_ASCII_MASK_16_09_BIT 0x0000FF00u
|
|
#define NET_ASCII_MASK_24_17_BIT 0x00FF0000u
|
|
|
|
|
|
/* IPv6 addresses. */
|
|
#define NET_ASCII_CHAR_MAX_OCTET_ADDR_IPv6 2u
|
|
#define NET_ASCII_CHAR_MAX_DIG_ADDR_IPv6 (NET_ASCII_CHAR_MAX_OCTET_ADDR_IPv6 * 2)
|
|
#define NET_ASCII_CHAR_MIN_COLON_IPv6 2u
|
|
#define NET_ASCII_CHAR_MAX_COLON_IPv6 7u
|
|
#define NET_ASCII_VAL_MAX_OCTET_ADDR_IPv6 255u
|
|
|
|
#define NET_ASCII_NBR_OCTET_ADDR_IPv6 (sizeof(NET_IPv6_ADDR))
|
|
|
|
|
|
#define NET_ASCII_LEN_MAX_ADDR_IPv6 (((NET_ASCII_CHAR_MAX_DIG_ADDR_IPv6 * 4) * NET_ASCII_CHAR_MAX_OCTET_ADDR_IPv6) + \
|
|
(((NET_ASCII_CHAR_MAX_DIG_ADDR_IPv6 * 2) - 1) * NET_ASCII_CHAR_LEN_COLON ) + \
|
|
NET_ASCII_CHAR_LEN_NUL )
|
|
|
|
#ifdef NET_IP_MODULE_EN
|
|
|
|
#ifdef NET_IPv4_MODULE_EN
|
|
#undef NET_ASCII_LEN_MAX_ADDR_IP
|
|
#define NET_ASCII_LEN_MAX_ADDR_IP NET_ASCII_LEN_MAX_ADDR_IPv4
|
|
#endif
|
|
|
|
#ifdef NET_IPv6_MODULE_EN
|
|
#undef NET_ASCII_LEN_MAX_ADDR_IP
|
|
#define NET_ASCII_LEN_MAX_ADDR_IP NET_ASCII_LEN_MAX_ADDR_IPv6
|
|
#endif
|
|
|
|
#define NET_ASCII_LEN_MAX_PORT DEF_INT_16U_NBR_DIG_MAX
|
|
|
|
|
|
#endif
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
*********************************************************************************************************
|
|
* FUNCTION PROTOTYPES
|
|
*********************************************************************************************************
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* EXTERNAL C LANGUAGE LINKAGE
|
|
*
|
|
* Note(s) : (1) C++ compilers MUST 'extern'ally declare ALL C function prototypes & variable/object
|
|
* declarations for correct C language linkage.
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* PUBLIC API
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
void NetASCII_Str_to_MAC(CPU_CHAR *p_addr_mac_ascii,
|
|
CPU_INT08U *p_addr_mac,
|
|
NET_ERR *p_err);
|
|
|
|
void NetASCII_MAC_to_Str(CPU_INT08U *p_addr_mac,
|
|
CPU_CHAR *p_addr_mac_ascii,
|
|
CPU_BOOLEAN hex_lower_case,
|
|
CPU_BOOLEAN hex_colon_sep,
|
|
NET_ERR *p_err);
|
|
|
|
NET_IP_ADDR_FAMILY NetASCII_Str_to_IP(CPU_CHAR *p_addr_ip_ascii,
|
|
void *p_addr,
|
|
CPU_INT08U addr_max_len,
|
|
NET_ERR *p_err);
|
|
|
|
NET_IPv4_ADDR NetASCII_Str_to_IPv4(CPU_CHAR *p_addr_ip_ascii,
|
|
NET_ERR *p_err);
|
|
|
|
NET_IPv6_ADDR NetASCII_Str_to_IPv6(CPU_CHAR *p_addr_ip_ascii,
|
|
NET_ERR *p_err);
|
|
|
|
void NetASCII_IPv4_to_Str(NET_IPv4_ADDR addr_ip,
|
|
CPU_CHAR *p_addr_ip_ascii,
|
|
CPU_BOOLEAN lead_zeros,
|
|
NET_ERR *p_err);
|
|
|
|
NET_IPv4_ADDR NetASCII_Str_to_IPv4_Handler(CPU_CHAR *p_addr_ip_ascii,
|
|
CPU_INT08U *p_dot_nbr,
|
|
NET_ERR *p_err);
|
|
|
|
void NetASCII_IPv6_to_Str(NET_IPv6_ADDR *p_addr_ip,
|
|
CPU_CHAR *p_addr_ip_ascii,
|
|
CPU_BOOLEAN hex_lower_case,
|
|
CPU_BOOLEAN lead_zeros,
|
|
NET_ERR *p_err);
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* EXTERNAL C LANGUAGE LINKAGE END
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
*********************************************************************************************************
|
|
* MODULE END
|
|
*********************************************************************************************************
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#endif /* NET_ASCII_MODULE_PRESENT */
|