📄 net_icmp.h
字号:
/*
*********************************************************************************************************
* uC/TCP-IP
* The Embedded TCP/IP Suite
*
* (c) Copyright 2003-2006; Micrium, Inc.; Weston, FL
*
* All rights reserved. Protected by international copyright laws.
*
* uC/TCP-IP is provided in source form for FREE evaluation, for educational
* use or peaceful research. If you plan on using uC/TCP-IP in a commercial
* product you need to contact Micrium to properly license its use in your
* product. We provide ALL the source code for your convenience and to help
* you experience uC/TCP-IP. The fact that the source code is provided does
* NOT mean that you can use it without paying a licensing fee.
*
* Knowledge of the source code may NOT be used to develop a similar product.
*
* Please help us continue to provide the Embedded community with the finest
* software available. Your honesty is greatly appreciated.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*
* NETWORK ICMP LAYER
* (INTERNET CONTROL MESSAGE PROTOCOL)
*
* Filename : net_icmp.h
* Version : V1.87
* Programmer(s) : ITJ
*********************************************************************************************************
* Note(s) : (1) Supports Internet Control Message Protocol as described in RFC #792 with the following
* restrictions/constraints :
*
* (a) Does NOT support IP forwarding/routing RFC #1122, Section 3.3.1
*
* (b) Does NOT support IP multicasting RFC #1122, Section 3.3.7
*
* (c) Does NOT support ICMP Address Mask Agent/Server RFC #1122, Section 3.2.2.9
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* EXTERNS
*********************************************************************************************************
*/
#ifdef NET_ICMP_MODULE
#define NET_ICMP_EXT
#else
#define NET_ICMP_EXT extern
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* DEFINES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* ICMP TRANSMIT SOURCE QUENCH DEFINES
*********************************************************************************************************
*/
#define NET_ICMP_TX_SRC_QUENCH_TH_MIN 1
#define NET_ICMP_TX_SRC_QUENCH_TH_MAX 100
#define NET_ICMP_TX_SRC_QUENCH_TH_DFLT 5
/*
*********************************************************************************************************
* ICMP FLAG DEFINES
*********************************************************************************************************
*/
/* ------------------ NET ICMP FLAGS ------------------ */
#define NET_ICMP_FLAG_NONE DEF_BIT_NONE
#define NET_ICMP_FLAG_USED DEF_BIT_00 /* ICMP entry cur used; i.e. NOT in free pool. */
/*
*********************************************************************************************************
* ICMP TYPE DEFINES
*
* Note(s) : (1) NET_ICMP_TYPE_??? #define values specifically chosen as ASCII representations of the ICMP
* types. Memory dumps of ICMP types will display the ICMP TYPE with the chosen ASCII name.
*********************************************************************************************************
*/
/* ------------------ NET ICMP TYPES ------------------ */
#if (CPU_CFG_ENDIAN_TYPE == CPU_ENDIAN_TYPE_BIG)
#define NET_ICMP_TYPE_NONE 0x4E4F4E45 /* "NONE" in ASCII. */
#define NET_ICMP_TYPE_TX_SRC_QUENCH 0x54585351 /* "TXSQ" in ASCII. */
#else
#if (CPU_CFG_DATA_SIZE == CPU_WORD_SIZE_32)
#define NET_ICMP_TYPE_NONE 0x454E4F4E /* "NONE" in ASCII. */
#define NET_ICMP_TYPE_TX_SRC_QUENCH 0x51535854 /* "TXSQ" in ASCII. */
#elif (CPU_CFG_DATA_SIZE == CPU_WORD_SIZE_16)
#define NET_ICMP_TYPE_NONE 0x4F4E454E /* "NONE" in ASCII. */
#define NET_ICMP_TYPE_TX_SRC_QUENCH 0x58545153 /* "TXSQ" in ASCII. */
#else /* Dflt CPU_WORD_SIZE_08. */
#define NET_ICMP_TYPE_NONE 0x4E4F4E45 /* "NONE" in ASCII. */
#define NET_ICMP_TYPE_TX_SRC_QUENCH 0x54585351 /* "TXSQ" in ASCII. */
#endif
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* ICMP MESSAGE TYPES & CODES
*
* Note(s) : (1) 'DEST_UNREACH' abbreviated to 'DEST' for ICMP 'Destination Unreachable' message
* error codes to enforce ANSI-compliance of 31-character symbol length uniqueness.
*
* (2) ICMP 'Redirect' & 'Router' messages are NOT supported (see 'net_icmp.h Note #1').
*
* (3) ICMP 'Address Mask Request' messages received by this host are NOT supported (see
* 'net_icmp.h Note #3').
*********************************************************************************************************
*/
/* ------------------ ICMP MSG TYPES ------------------ */
#define NET_ICMP_MSG_TYPE_NONE 255
#define NET_ICMP_MSG_TYPE_ECHO_REPLY 0
#define NET_ICMP_MSG_TYPE_DEST_UNREACH 3
#define NET_ICMP_MSG_TYPE_SRC_QUENCH 4
#define NET_ICMP_MSG_TYPE_REDIRECT 5 /* See Note #2. */
#define NET_ICMP_MSG_TYPE_ECHO_REQ 8
#define NET_ICMP_MSG_TYPE_ROUTE_AD 9 /* See Note #2. */
#define NET_ICMP_MSG_TYPE_ROUTE_REQ 10 /* See Note #2. */
#define NET_ICMP_MSG_TYPE_TIME_EXCEED 11
#define NET_ICMP_MSG_TYPE_PARAM_PROB 12
#define NET_ICMP_MSG_TYPE_TS_REQ 13
#define NET_ICMP_MSG_TYPE_TS_REPLY 14
#define NET_ICMP_MSG_TYPE_ADDR_MASK_REQ 17
#define NET_ICMP_MSG_TYPE_ADDR_MASK_REPLY 18
/* ------------------ ICMP MSG CODES ------------------ */
#define NET_ICMP_MSG_CODE_NONE 255
#define NET_ICMP_MSG_CODE_ECHO 0
#define NET_ICMP_MSG_CODE_ECHO_REQ 0
#define NET_ICMP_MSG_CODE_ECHO_REPLY 0
#define NET_ICMP_MSG_CODE_DEST_NET 0 /* See Note #1. */
#define NET_ICMP_MSG_CODE_DEST_HOST 1
#define NET_ICMP_MSG_CODE_DEST_PROTOCOL 2
#define NET_ICMP_MSG_CODE_DEST_PORT 3
#define NET_ICMP_MSG_CODE_DEST_FRAG_NEEDED 4
#define NET_ICMP_MSG_CODE_DEST_ROUTE_FAIL 5
#define NET_ICMP_MSG_CODE_DEST_NET_UNKNOWN 6
#define NET_ICMP_MSG_CODE_DEST_HOST_UNKNOWN 7
#define NET_ICMP_MSG_CODE_DEST_HOST_ISOLATED 8
#define NET_ICMP_MSG_CODE_DEST_NET_TOS 11
#define NET_ICMP_MSG_CODE_DEST_HOST_TOS 12
#define NET_ICMP_MSG_CODE_SRC_QUENCH 0
#define NET_ICMP_MSG_CODE_TIME_EXCEED_TTL 0
#define NET_ICMP_MSG_CODE_TIME_EXCEED_FRAG_REASM 1
#define NET_ICMP_MSG_CODE_PARAM_PROB_IP_HDR 0
#define NET_ICMP_MSG_CODE_PARAM_PROB_OPT_MISSING 1
#define NET_ICMP_MSG_CODE_TS 0
#define NET_ICMP_MSG_CODE_TS_REQ 0
#define NET_ICMP_MSG_CODE_TS_REPLY 0
#define NET_ICMP_MSG_CODE_ADDR_MASK 0
#define NET_ICMP_MSG_CODE_ADDR_MASK_REQ 0
#define NET_ICMP_MSG_CODE_ADDR_MASK_REPLY 0
/*$PAGE*/
/*
*********************************************************************************************************
* ICMP MESSAGE DEFINES
*********************************************************************************************************
*/
#define NET_ICMP_HDR_SIZE_DFLT 8
#define NET_ICMP_HDR_SIZE_DEST_UNREACH NET_ICMP_HDR_SIZE_DFLT
#define NET_ICMP_HDR_SIZE_SRC_QUENCH NET_ICMP_HDR_SIZE_DFLT
#define NET_ICMP_HDR_SIZE_TIME_EXCEED NET_ICMP_HDR_SIZE_DFLT
#define NET_ICMP_HDR_SIZE_PARAM_PROB NET_ICMP_HDR_SIZE_DFLT
#define NET_ICMP_HDR_SIZE_ECHO NET_ICMP_HDR_SIZE_DFLT
#define NET_ICMP_HDR_SIZE_TS 20
#define NET_ICMP_HDR_SIZE_ADDR_MASK 12
#define NET_ICMP_HDR_NBR_OCTETS_UNUSED 4
#define NET_ICMP_HDR_NBR_OCTETS_UNUSED_PARAM_PROB 3
#define NET_ICMP_MSG_ERR_HDR_SIZE_MIN NET_IP_HDR_SIZE_MIN
#define NET_ICMP_MSG_ERR_HDR_SIZE_MAX NET_IP_HDR_SIZE_MAX
#define NET_ICMP_MSG_ERR_DATA_SIZE_MIN_BITS 64 /* See RFC #1122, Section 3.2.2. */
#define NET_ICMP_MSG_ERR_DATA_SIZE_MIN_OCTETS (((NET_ICMP_MSG_ERR_DATA_SIZE_MIN_BITS - 1) / DEF_OCTET_NBR_BITS) + 1)
#define NET_ICMP_MSG_ERR_LEN_MIN (NET_ICMP_MSG_ERR_HDR_SIZE_MIN + NET_ICMP_MSG_ERR_DATA_SIZE_MIN_OCTETS)
#define NET_ICMP_MSG_ERR_LEN_MAX (NET_ICMP_MSG_ERR_HDR_SIZE_MAX + NET_ICMP_MSG_ERR_DATA_SIZE_MIN_OCTETS)
#define NET_ICMP_MSG_LEN_MIN_DFLT NET_ICMP_HDR_SIZE_DFLT
#define NET_ICMP_MSG_LEN_MIN_DEST_UNREACH (NET_ICMP_HDR_SIZE_DEST_UNREACH + NET_ICMP_MSG_ERR_LEN_MIN)
#define NET_ICMP_MSG_LEN_MIN_SRC_QUENCH (NET_ICMP_HDR_SIZE_SRC_QUENCH + NET_ICMP_MSG_ERR_LEN_MIN)
#define NET_ICMP_MSG_LEN_MIN_TIME_EXCEED (NET_ICMP_HDR_SIZE_TIME_EXCEED + NET_ICMP_MSG_ERR_LEN_MIN)
#define NET_ICMP_MSG_LEN_MIN_PARAM_PROB (NET_ICMP_HDR_SIZE_PARAM_PROB + NET_ICMP_MSG_ERR_LEN_MIN)
#define NET_ICMP_MSG_LEN_MIN_ECHO NET_ICMP_HDR_SIZE_ECHO
#define NET_ICMP_MSG_LEN_MIN_TS NET_ICMP_HDR_SIZE_TS
#define NET_ICMP_MSG_LEN_MIN_ADDR_MASK NET_ICMP_HDR_SIZE_ADDR_MASK
#define NET_ICMP_MSG_LEN_MAX_NONE 0xFFFF
#define NET_ICMP_MSG_LEN_MAX_DEST_UNREACH NET_ICMP_MSG_LEN_MAX_NONE
#define NET_ICMP_MSG_LEN_MAX_SRC_QUENCH NET_ICMP_MSG_LEN_MAX_NONE
#define NET_ICMP_MSG_LEN_MAX_TIME_EXCEED NET_ICMP_MSG_LEN_MAX_NONE
#define NET_ICMP_MSG_LEN_MAX_PARAM_PROB NET_ICMP_MSG_LEN_MAX_NONE
#define NET_ICMP_MSG_LEN_MAX_ECHO NET_ICMP_MSG_LEN_MAX_NONE
#define NET_ICMP_MSG_LEN_MAX_TS NET_ICMP_HDR_SIZE_TS
#define NET_ICMP_MSG_LEN_MAX_ADDR_MASK NET_ICMP_HDR_SIZE_ADDR_MASK
#define NET_ICMP_MSG_PTR_NONE 255
#define NET_ICMP_MSG_PTR_MIN_PARAM_PROB NET_ICMP_MSG_LEN_MIN_DFLT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -