📄 net_ip.h
字号:
/*$PAGE*/
/*
*********************************************************************************************************
* IP ADDRESS DEFINES
*
* Note(s) : (1) See the following RFC's for IP address summary :
*
* (a) RFC # 791, Section 3.2 'Addressing'
* (b) RFC #1122, Section 3.2.1.3
*
* (2) (a) (1) Supports IP Class A, B, & C Network addresses ONLY.
*
* (2) RFC #1519 states that "the concept of network 'class' needs to be deprecated"
* (Section 4.1) in order to "support classless network destinations" which will
* "permit arbitrary super/subnetting of the remaining class A and class B [and
* class C] address space (the assumption being that classless ... non-contiguous
* subnets ... will be contained within a single ... domain)" (Section 2.2).
*
* However, despite the aggregated, classless network address space; individual
* class definitions MUST still be used to validate IP addresses as within the
* network address space -- versus multicast, reserved, or experimental addresses.
*
* (b) IP Class D Multicast addresses NOT supported (see 'net_ip.h Note #1d').
*
* (3) RFC #950, Section 2.1 states that "the bits that identify the subnet ... need not be adjacent
* in the address. However, we recommend that the subnet bits be contiguous and located as the
* most significant bits of the local address".
*
* Therefore, it is assumed that at least the most significant bit of the network portion of
* the subnet address SHOULD be set.
*
* (4) Currently supports limited & directed-network broadcast ONLY :
*
* (a) Limited Broadcast 255.255.255.255 See RFC #1122, Section 3.2.1.3.(c)
* (b) Directed-Network Broadcast <net>.<-1> See RFC #1122, Section 3.2.1.3.(d)
* (c) Directed-Subnet Broadcast <net>.<subnet >.<-1> See RFC #1122, Section 3.2.1.3.(e)
*
* #### Directed-subnets broadcasts NOT currently supported :
*
* (d) Directed-Subnets Broadcast <net>.<subnets>.<-1> See RFC #1122, Section 3.2.1.3.(f)
*
* (5) NET_IP_ADDR_THIS_HOST/NET_IP_ADDR_BROADCAST ideally #define'd as 'NET_IP_ADDR' values;
* declared as 'CPU_INT32U' because 'NET_IP_ADDR' NOT defined at time of #define'tion.
*
* NET_IP_ADDR_THIS_HOST/NET_IP_ADDR_BROADCAST #define's expressed in dotted-decimal notation :
*
* ww.xx.yy.zz
*
* #define'd as
*
* (((CPU_INT32U) ww << 24) | \
* ((CPU_INT32U) xx << 16) | \
* ((CPU_INT32U) yy << 8) | \
* ((CPU_INT32U) zz << 0))
*********************************************************************************************************
*/
/*$PAGE*/
/* See Note #5; RFC #1122, Section 3.2.1.3.(a). */
#define NET_IP_ADDR_THIS_HOST (((CPU_INT32U) 0 << 24) | \
((CPU_INT32U) 0 << 16) | \
((CPU_INT32U) 0 << 8) | \
((CPU_INT32U) 0 << 0))
/* See Note #5; RFC #1122, Section 3.2.1.3.(c). */
#define NET_IP_ADDR_BROADCAST (((CPU_INT32U)255 << 24) | \
((CPU_INT32U)255 << 16) | \
((CPU_INT32U)255 << 8) | \
((CPU_INT32U)255 << 0))
#define NET_IP_ADDR_NONE NET_IP_ADDR_THIS_HOST
#define NET_IP_ADDR_CLASS_A_MASK 0x80000000
#define NET_IP_ADDR_CLASS_A 0x00000000
#define NET_IP_ADDR_CLASS_A_MASK_NET 0xFF000000
#define NET_IP_ADDR_CLASS_A_MASK_HOST 0x00FFFFFF
#define NET_IP_ADDR_CLASS_B_MASK 0xC0000000
#define NET_IP_ADDR_CLASS_B 0x80000000
#define NET_IP_ADDR_CLASS_B_MASK_NET 0xFFFF0000
#define NET_IP_ADDR_CLASS_B_MASK_HOST 0x0000FFFF
#define NET_IP_ADDR_CLASS_C_MASK 0xE0000000
#define NET_IP_ADDR_CLASS_C 0xC0000000
#define NET_IP_ADDR_CLASS_C_MASK_NET 0xFFFFFF00
#define NET_IP_ADDR_CLASS_C_MASK_HOST 0x000000FF
#define NET_IP_ADDR_CLASS_SUBNET_MASK 0x80000000 /* See Note #3. */
#define NET_IP_ADDR_LOCAL_HOST_ADDR 0x7F000001 /* Typical dflt local host addr. */
#define NET_IP_ADDR_LOCAL_HOST_MASK 0xFF000000
#define NET_IP_ADDR_LOCAL_HOST 0x7F000000
#define NET_IP_ADDR_LOCAL_HOST_MASK_NET 0xFF000000
#define NET_IP_ADDR_LOCAL_HOST_MASK_HOST 0x00FFFFFF
/*$PAGE*/
/*
*********************************************************************************************************
* IP HEADER OPTIONS DEFINES
*
* Note(s) : (1) See the following RFC's for IP options summary :
*
* (a) RFC # 791, Section 3.1 'Options'
* (b) RFC #1122, Section 3.2.1.8
* (c) RFC #1108
*
* (2) IP option types are coded in the first octet for each IP option as follows :
*
* 7 6 5 4 3 2 1 0
* ---------------------
* |CPY|CLASS| N B R |
* ---------------------
*
* where
* CPY Indicates whether option is copied into all fragments :
* '0' - IP option NOT copied into fragments
* '1' - IP option copied into fragments
* CLASS Indicates options class :
* '00' - Control
* '01' - Reserved
* '10' - Debug / Measurement
* '11' - Reserved
* NBR Option Number :
* '00000' - End of Options List
* '00001' - No Operation
* '00010' - Security
* '00011' - Loose Source Routing
* '00100' - Internet Timestamp
* '00111' - Record Route
* '01001' - Strict Source Routing
*
* (3) IP header allows for a maximum option list length of ten (10) 32-bit options :
*
* NET_IP_HDR_OPT_SIZE_MAX = (NET_IP_HDR_SIZE_MAX - NET_IP_HDR_SIZE_MIN) / NET_IP_HDR_OPT_SIZE_WORD
*
* = (60 - 20) / (32-bits)
*
* = Ten (10) 32-bit options
*
* (4) Data type MUST be globally declared PRIOR to certain dependent #define's.
*********************************************************************************************************
*/
/*$PAGE*/
#define NET_IP_HDR_OPT_COPY_FLAG DEF_BIT_07
#define NET_IP_HDR_OPT_CLASS_MASK 0x60
#define NET_IP_HDR_OPT_CLASS_CTRL 0x00
#define NET_IP_HDR_OPT_CLASS_RESERVED_1 0x20
#define NET_IP_HDR_OPT_CLASS_DBG 0x40
#define NET_IP_HDR_OPT_CLASS_RESERVED_2 0x60
#define NET_IP_HDR_OPT_NBR_MASK 0x1F
#define NET_IP_HDR_OPT_NBR_END_LIST 0x00
#define NET_IP_HDR_OPT_NBR_NOP 0x01
#define NET_IP_HDR_OPT_NBR_SECURITY 0x02 /* See 'net_ip.h Note #1f'. */
#define NET_IP_HDR_OPT_NBR_ROUTE_SRC_LOOSE 0x03
#define NET_IP_HDR_OPT_NBR_SECURITY_EXTENDED 0x05 /* See 'net_ip.h Note #1f'. */
#define NET_IP_HDR_OPT_NBR_TS 0x04
#define NET_IP_HDR_OPT_NBR_ROUTE_REC 0x07
#define NET_IP_HDR_OPT_NBR_ROUTE_SRC_STRICT 0x09
#define NET_IP_HDR_OPT_END_LIST ( NET_IP_HDR_OPT_CLASS_CTRL | NET_IP_HDR_OPT_NBR_END_LIST )
#define NET_IP_HDR_OPT_NOP ( NET_IP_HDR_OPT_CLASS_CTRL | NET_IP_HDR_OPT_NBR_NOP )
#define NET_IP_HDR_OPT_SECURITY (NET_IP_HDR_OPT_COPY_FLAG | NET_IP_HDR_OPT_CLASS_CTRL | NET_IP_HDR_OPT_NBR_SECURITY )
#define NET_IP_HDR_OPT_ROUTE_SRC_LOOSE (NET_IP_HDR_OPT_COPY_FLAG | NET_IP_HDR_OPT_CLASS_CTRL | NET_IP_HDR_OPT_NBR_ROUTE_SRC_LOOSE )
#define NET_IP_HDR_OPT_SECURITY_EXTENDED (NET_IP_HDR_OPT_COPY_FLAG | NET_IP_HDR_OPT_CLASS_CTRL | NET_IP_HDR_OPT_NBR_SECURITY_EXTENDED)
#define NET_IP_HDR_OPT_TS ( NET_IP_HDR_OPT_CLASS_DBG | NET_IP_HDR_OPT_NBR_TS )
#define NET_IP_HDR_OPT_ROUTE_REC ( NET_IP_HDR_OPT_CLASS_CTRL | NET_IP_HDR_OPT_NBR_ROUTE_REC )
#define NET_IP_HDR_OPT_ROUTE_SRC_STRICT (NET_IP_HDR_OPT_COPY_FLAG | NET_IP_HDR_OPT_CLASS_CTRL | NET_IP_HDR_OPT_NBR_ROUTE_SRC_STRICT )
#define NET_IP_HDR_OPT_PAD 0x00
/* ---------------- SRC/REC ROUTE OPTS ---------------- */
#define NET_IP_OPT_ROUTE_PTR_OPT 0 /* Ptr ix to route opt itself. */
#define NET_IP_OPT_ROUTE_PTR_ROUTE 4 /* Ptr ix to first route (min legal ptr val). */
/* --------------------- TS OPTS ---------------------- */
#define NET_IP_OPT_TS_PTR_OPT 0 /* Ptr ix to TS opt itself. */
#define NET_IP_OPT_TS_PTR_TS 4 /* Ptr ix to first TS (min legal ptr val). */
#define NET_IP_OPT_TS_OVF_MASK 0xF0
#define NET_IP_OPT_TS_OVF_SHIFT 4
#define NET_IP_OPT_TS_OVF_MAX 15
#define NET_IP_OPT_TS_FLAG_MASK 0x0F
#define NET_IP_OPT_TS_FLAG_TS_ONLY 0
#define NET_IP_OPT_TS_FLAG_TS_ROUTE_REC 1
#define NET_IP_OPT_TS_FLAG_TS_ROUTE_SPEC 3
typedef CPU_INT32U NET_IP_OPT_SIZE; /* IP opt size data type (see Note #4). */
#define NET_IP_HDR_OPT_SIZE_WORD (sizeof(NET_IP_OPT_SIZE))
#define NET_IP_HDR_OPT_SIZE_MAX (NET_IP_HDR_SIZE_MAX - NET_IP_HDR_SIZE_MIN)
#define NET_IP_HDR_OPT_SIZE_ROUTE NET_IP_HDR_OPT_SIZE_WORD
#define NET_IP_HDR_OPT_SIZE_TS NET_IP_HDR_OPT_SIZE_WORD
#define NET_IP_HDR_OPT_SIZE_SECURITY 3
#define NET_IP_HDR_OPT_NBR_MIN 0
#define NET_IP_HDR_OPT_NBR_MAX (NET_IP_HDR_OPT_SIZE_MAX / NET_IP_HDR_OPT_SIZE_WORD)
#define NET_IP_OPT_PARAM_NBR_MIN 1
#define NET_IP_OPT_PARAM_NBR_MAX_ROUTE 9
#define NET_IP_OPT_PARAM_NBR_MAX_TS_ONLY 9
#define NET_IP_OPT_PARAM_NBR_MAX_TS_ROUTE 4
#define NET_IP_OPT_PARAM_NBR_MAX 9 /* Max nbr of 'max nbr opts'. */
#define NET_IP_HDR_OPT_IX NET_IP_HDR_SIZE_MIN
#define NET_IP_OPT_IX_RX 0
/*$PAGE*/
/*
*********************************************************************************************************
* IP OPTION CONFIGURATION TYPE DEFINES
*
* Note(s) : (1) NET_IP_OPT_CFG_TYPE_??? #define values specifically chosen as ASCII representations of
* the IP option configuration types. Memory dumps of IP option configuration buffers will
* display the IP option configuration TYPEs with their chosen ASCII names.
*********************************************************************************************************
*/
/* ----------------- IP OPT CFG TYPES ----------------- */
#if (CPU_CFG_ENDIAN_TYPE == CPU_ENDIAN_TYPE_BIG)
#define NET_IP_OPT_CFG_TYPE_NONE 0x4E4F4E45 /* "NONE" in ASCII. */
#define NET_IP_OPT_CFG_TYPE_ROUTE_STRICT 0x52545354 /* "RTST" in ASCII. */
#define NET_IP_OPT_CFG_TYPE_ROUTE_LOOSE 0x52544C53 /* "RTLS" in ASCII. */
#define NET_IP_OPT_CFG_TYPE_ROUTE_REC 0x52545243 /* "RTRC" in ASCII. */
#define NET_IP_OPT_CFG_TYPE_TS_ONLY 0x54532020 /* "TS " in ASCII. */
#define NET_IP_OPT_CFG_TYPE_TS_ROUTE_REC 0x54535243 /* "TSRC" in ASCII. */
#define NET_IP_OPT_CFG_TYPE_TS_ROUTE_SPEC 0x54535254 /* "TSRT" in ASCII. */
#define NET_IP_OPT_CFG_TYPE_SECURITY 0x53454320 /* "SEC " in ASCII (see 'net_ip.h Note #1f'). */
#define NET_IP_OPT_CFG_TYPE_SECURITY_EXTENDED 0x53454358 /* "SECX" in ASCII (see 'net_ip.h Note #1f'). */
#else
#if (CPU_CFG_DATA_SIZE == CPU_WORD_SIZE_32)
#define NET_IP_OPT_CFG_TYPE_NONE 0x454E4F4E /* "NONE" in ASCII. */
#define NET_IP_OPT_CFG_TYPE_ROUTE_STRICT 0x54535452 /* "RTST" in ASCII. */
#define NET_IP_OPT_CFG_TYPE_ROUTE_LOOSE 0x534C5452 /* "RTLS" in ASCII. */
#define NET_IP_OPT_CFG_TYPE_ROUTE_REC 0x43525452 /* "RTRC" in ASCII. */
#define NET_IP_OPT_CFG_TYPE_TS_ONLY 0x20205354 /* "TS " in ASCII. */
#define NET_IP_OPT_CFG_TYPE_TS_ROUTE_REC 0x43525354 /* "TSRC" in ASCII. */
#define NET_IP_OPT_CFG_TYPE_TS_ROUTE_SPEC 0x54525354 /* "TSRT" in ASCII. */
#define NET_IP_OPT_CFG_TYPE_SECURITY 0x20434553 /* "SEC " in ASCII (see 'net_ip.h Note #1f'). */
#define NET_IP_OPT_CFG_TYPE_SECURITY_EXTENDED 0x58434553 /* "SECX" in ASCII (see 'net_ip.h Note #1f'). */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -