mirror of
https://github.com/dimoniche/changer.git
synced 2026-01-30 01:03:30 +03:00
1045 lines
59 KiB
C
1045 lines
59 KiB
C
/*
|
||
*********************************************************************************************************
|
||
* uC/TCP-IP
|
||
* The Embedded TCP/IP Suite
|
||
*
|
||
* (c) Copyright 2003-2007; 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 IP LAYER
|
||
* (INTERNET PROTOCOL)
|
||
*
|
||
* Filename : net_ip.h
|
||
* Version : V1.89
|
||
* Programmer(s) : ITJ
|
||
*********************************************************************************************************
|
||
* Note(s) : (1) Supports Internet Protocol as described in RFC #791, also known as IPv4, with the
|
||
* following restrictions/constraints :
|
||
*
|
||
* (a) ONLY supports a single network interface/ RFC # 791, Section 2.3
|
||
* host IP address 'Addressing'
|
||
*
|
||
* (b) ONLY supports a single default gateway RFC #1122, Section 3.3.1
|
||
*
|
||
* (c) IP forwarding/routing NOT supported RFC #1122, Sections 3.3.1,
|
||
* 3.3.4 & 3.3.5
|
||
*
|
||
* (d) IP multicasting NOT supported RFC #1122, Section 3.3.7
|
||
*
|
||
* (e) Transmit fragmentation NOT currently supported RFC # 791, Section 2.3
|
||
* 'Fragmentation &
|
||
* Reassembly'
|
||
* (f) IP Security options NOT currently supported RFC #1108
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* EXTERNS
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#ifdef NET_IP_MODULE
|
||
#define NET_IP_EXT
|
||
#else
|
||
#define NET_IP_EXT extern
|
||
#endif
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* DEFINES
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* IP HEADER DEFINES
|
||
*
|
||
* Note(s) : (1) The following IP value MUST be pre-#define'd in 'net_def.h' PRIOR to 'net_buf.h' so that
|
||
* the Network Buffer Module can configure maximum buffer header size (see 'net_def.h IP
|
||
* LAYER DEFINES' & 'net_buf.h NETWORK BUFFER INDEX & SIZE DEFINES Note #1') :
|
||
*
|
||
* (a) NET_IP_HDR_SIZE_MAX 60 (NET_IP_HDR_LEN_MAX
|
||
* * NET_IP_HDR_LEN_WORD_SIZE)
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#define NET_IP_HDR_VER_MASK 0xF0
|
||
#define NET_IP_HDR_VER_SHIFT 4
|
||
#define NET_IP_HDR_VER 4 /* Supports IPv4 ONLY (see 'net_ip.h Note #1'). */
|
||
|
||
|
||
#define NET_IP_HDR_LEN_MASK 0x0F
|
||
#define NET_IP_HDR_LEN_MIN 5
|
||
#define NET_IP_HDR_LEN_MAX 15
|
||
#define NET_IP_HDR_LEN_WORD_SIZE CPU_WORD_SIZE_32
|
||
|
||
#define NET_IP_HDR_SIZE_MIN (NET_IP_HDR_LEN_MIN * NET_IP_HDR_LEN_WORD_SIZE)
|
||
#if 0 /* See Note #1a. */
|
||
#define NET_IP_HDR_SIZE_MAX (NET_IP_HDR_LEN_MAX * NET_IP_HDR_LEN_WORD_SIZE)
|
||
#endif
|
||
|
||
#define NET_IP_HDR_SIZE_TOT_MIN (NET_IF_HDR_SIZE_TOT_MIN + NET_IP_HDR_SIZE_MIN)
|
||
#define NET_IP_HDR_SIZE_TOT_MAX (NET_IF_HDR_SIZE_TOT_MAX + NET_IP_HDR_SIZE_MAX)
|
||
|
||
|
||
#define NET_IP_ID_NONE 0
|
||
#define NET_IP_ID_INIT NET_IP_ID_NONE
|
||
|
||
|
||
#define NET_IP_HDR_TTL_NONE 0 /* On IP Tx, subst _DFLT for _NONE. */
|
||
#define NET_IP_HDR_TTL_MIN 1
|
||
#define NET_IP_HDR_TTL_MAX 255
|
||
#define NET_IP_HDR_TTL_DFLT 128
|
||
|
||
#define NET_IP_TTL_NONE NET_IP_HDR_TTL_NONE
|
||
#define NET_IP_TTL_DFLT NET_IP_HDR_TTL_DFLT
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* IP HEADER TYPE OF SERVICE (TOS) DEFINES
|
||
*
|
||
* Note(s) : (1) See 'IP HEADER Note #3' for TOS fields.
|
||
*
|
||
* (2) See RFC #791, Section 3.1 'Type of Service' for TOS Precedence values.
|
||
*
|
||
* (3) See RFC #1349, Section 4 for TOS values.
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#define NET_IP_HDR_TOS_PRECEDNCE_ROUTINE 0x00
|
||
#define NET_IP_HDR_TOS_PRECEDNCE_PRIO 0x20
|
||
#define NET_IP_HDR_TOS_PRECEDNCE_IMMED 0x40
|
||
#define NET_IP_HDR_TOS_PRECEDNCE_FLASH 0x60
|
||
#define NET_IP_HDR_TOS_PRECEDNCE_FLASH_OVERRIDE 0x80
|
||
#define NET_IP_HDR_TOS_PRECEDNCE_CRITIC_ECP 0xA0
|
||
#define NET_IP_HDR_TOS_PRECEDNCE_INTERNET_CTRL 0xC0
|
||
#define NET_IP_HDR_TOS_PRECEDNCE_NET_CTRL 0xE0
|
||
|
||
#define NET_IP_HDR_TOS_PRECEDNCE_MASK 0xE0
|
||
#define NET_IP_HDR_TOS_PRECEDNCE_DFLT NET_IP_HDR_TOS_PRECEDNCE_ROUTINE
|
||
|
||
|
||
#define NET_IP_HDR_TOS_NONE 0x00
|
||
#define NET_IP_HDR_TOS_LO_DLY 0x10
|
||
#define NET_IP_HDR_TOS_HI_THRUPUT 0x08
|
||
#define NET_IP_HDR_TOS_HI_RELIABILITY 0x04
|
||
#define NET_IP_HDR_TOS_LO_COST 0x02
|
||
|
||
#define NET_IP_HDR_TOS_MASK 0x1E
|
||
#define NET_IP_HDR_TOS_DFLT NET_IP_HDR_TOS_NONE
|
||
|
||
|
||
#define NET_IP_HDR_TOS_MBZ_MASK 0x01
|
||
#define NET_IP_HDR_TOS_MBZ_DFLT 0x00
|
||
|
||
#define NET_IP_HDR_TOS_RESERVED NET_IP_HDR_TOS_MBZ_DFLT
|
||
|
||
|
||
#define NET_IP_TOS_DFLT (NET_IP_HDR_TOS_PRECEDNCE_DFLT | \
|
||
NET_IP_HDR_TOS_DFLT | \
|
||
NET_IP_HDR_TOS_MBZ_DFLT)
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* IP DATA/TOTAL LENGTH & MAXIMUM TRANSMISSION UNIT (MTU) DEFINES
|
||
*
|
||
* Note(s) : (1) (a) IP total length #define's (NET_IP_TOT_LEN) relate to the total size of a complete IP
|
||
* datagram, including the packet's IP header. Note that a complete IP datagram MAY be
|
||
* fragmented in multiple IP packets.
|
||
*
|
||
* (b) IP data length #define's (NET_IP_DATA_LEN) relate to the data size of a complete IP
|
||
* datagram, equal to the total IP datagram length minus its IP header size. Note that
|
||
* a complete IP datagram MAY be fragmented in multiple IP packets.
|
||
*
|
||
* (c) IP MTU #define's (NET_IP_MTU) relate to the data size for any single, non-fragmented
|
||
* IP packet, equal to a packet's Network Interface MTU minus its IP header size.
|
||
*
|
||
* (2) RFC #791, Section 3.1 'Total Length' "recommend[s] that hosts only send datagrams larger
|
||
* than 576 octets if ... the destination is prepared to accept the larger datagrams"; while
|
||
* RFC #879, Section 1 requires that "HOSTS MUST NOT SEND DATAGRAMS LARGER THAN 576 OCTETS
|
||
* UNLESS ... THE DESTINATION HOST IS PREPARED TO ACCEPT LARGER DATAGRAMS".
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/* See Notes #1a & #1b. */
|
||
#define NET_IP_DATA_LEN_MIN 0
|
||
|
||
#define NET_IP_TOT_LEN_MIN (NET_IP_HDR_SIZE_MIN + NET_IP_DATA_LEN_MIN)
|
||
#define NET_IP_TOT_LEN_MAX DEF_INT_16U_MAX_VAL
|
||
|
||
#define NET_IP_DATA_LEN_MAX (NET_IP_TOT_LEN_MAX - NET_IP_HDR_SIZE_MIN)
|
||
|
||
|
||
/* See Note #1c. */
|
||
#define NET_IP_MTU_MIN (NET_IF_MTU - NET_IP_HDR_SIZE_MAX)
|
||
#define NET_IP_MTU_MAX (NET_IF_MTU - NET_IP_HDR_SIZE_MIN)
|
||
#define NET_IP_MTU NET_IP_MTU_MIN
|
||
|
||
|
||
|
||
#define NET_IP_MAX_DATAGRAM_SIZE_DFLT 576 /* See Note #2. */
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* IP HEADER FLAG DEFINES
|
||
*
|
||
* Note(s) : (1) See 'IP HEADER Note #4' for flag fields.
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#define NET_IP_HDR_FLAG_MASK 0xE000
|
||
|
||
#define NET_IP_HDR_FLAG_NONE DEF_BIT_NONE
|
||
#define NET_IP_HDR_FLAG_RESERVED DEF_BIT_15 /* MUST be '0'. */
|
||
#define NET_IP_HDR_FLAG_FRAG_DONT DEF_BIT_14
|
||
#define NET_IP_HDR_FLAG_FRAG_MORE DEF_BIT_13
|
||
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* IP FRAGMENTATION DEFINES
|
||
*
|
||
* Note(s) : (1) (a) (1) RFC #791, Section 3.2 'Fragmentation and Reassembly' states that :
|
||
*
|
||
* (A) "Fragments are counted in units of 8 octets."
|
||
* (B) "The minimum fragment is 8 octets."
|
||
*
|
||
* (2) However, this CANNOT apply to the last fragment in a fragmented datagram :
|
||
*
|
||
* (A) Which may be of ANY size; ...
|
||
* (B) But SHOULD be at least one octet.
|
||
*
|
||
* (b) RFC #791, Section 3.2 'Fragmentation and Reassembly : An Example Reassembly Procedure'
|
||
* states that "the current recommendation for the [IP fragmentation reassembly] timer
|
||
* setting is 15 seconds ... [but] this may be changed ... with ... experience".
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#define NET_IP_HDR_FRAG_OFFSET_MASK 0x1FFF
|
||
#define NET_IP_HDR_FRAG_OFFSET_NONE 0
|
||
#define NET_IP_HDR_FRAG_OFFSET_MIN 0
|
||
#define NET_IP_HDR_FRAG_OFFSET_MAX 8191
|
||
|
||
|
||
#define NET_IP_FRAG_SIZE_UNIT 8 /* Frag size unit = 8 octets (see Note #1a1). */
|
||
|
||
#define NET_IP_FRAG_SIZE_NONE DEF_INT_16U_MAX_VAL
|
||
#define NET_IP_FRAG_SIZE_MIN_FRAG_MORE NET_IP_FRAG_SIZE_UNIT /* See Note #1a1B. */
|
||
#define NET_IP_FRAG_SIZE_MIN_FRAG_LAST 1 /* See Note #1a2B. */
|
||
#define NET_IP_FRAG_SIZE_MAX (((NET_IP_TOT_LEN_MAX - NET_IP_HDR_SIZE_MIN) / NET_IP_FRAG_SIZE_UNIT) \
|
||
* NET_IP_FRAG_SIZE_UNIT)
|
||
|
||
/* IP frag reasm timeout (see Note #1b) : */
|
||
#define NET_IP_FRAG_REASM_TIMEOUT_MIN_SEC 1 /* IP frag reasm timeout min = 1 seconds */
|
||
#define NET_IP_FRAG_REASM_TIMEOUT_MAX_SEC 15 /* IP frag reasm timeout max = 10 seconds */
|
||
#define NET_IP_FRAG_REASM_TIMEOUT_DFLT_SEC 5 /* IP frag reasm timeout dflt = 5 seconds */
|
||
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* IP HEADER PROTOCOL FIELD DEFINES
|
||
*
|
||
* Note(s) : (1) See 'IP HEADER Note #5'.
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#define NET_IP_HDR_PROTOCOL_ICMP 1
|
||
#define NET_IP_HDR_PROTOCOL_TCP 6
|
||
#define NET_IP_HDR_PROTOCOL_UDP 17
|
||
|
||
|
||
/*$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 displays 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'). */
|
||
|
||
#elif (CPU_CFG_DATA_SIZE == CPU_WORD_SIZE_16)
|
||
#define NET_IP_OPT_CFG_TYPE_NONE 0x4F4E454E /* "NONE" in ASCII. */
|
||
#define NET_IP_OPT_CFG_TYPE_ROUTE_STRICT 0x54525453 /* "RTST" in ASCII. */
|
||
#define NET_IP_OPT_CFG_TYPE_ROUTE_LOOSE 0x5452534C /* "RTLS" in ASCII. */
|
||
#define NET_IP_OPT_CFG_TYPE_ROUTE_REC 0x54524352 /* "RTRC" in ASCII. */
|
||
#define NET_IP_OPT_CFG_TYPE_TS_ONLY 0x53542020 /* "TS " in ASCII. */
|
||
#define NET_IP_OPT_CFG_TYPE_TS_ROUTE_REC 0x53544352 /* "TSRC" in ASCII. */
|
||
#define NET_IP_OPT_CFG_TYPE_TS_ROUTE_SPEC 0x53545452 /* "TSRT" in ASCII. */
|
||
#define NET_IP_OPT_CFG_TYPE_SECURITY 0x45532043 /* "SEC " in ASCII (see 'net_ip.h Note #1f'). */
|
||
#define NET_IP_OPT_CFG_TYPE_SECURITY_EXTENDED 0x45535843 /* "SECX" in ASCII (see 'net_ip.h Note #1f'). */
|
||
|
||
#else /* Dflt CPU_WORD_SIZE_08. */
|
||
#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'). */
|
||
|
||
#endif
|
||
#endif
|
||
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* IP FLAG DEFINES
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/* ------------------- NET IP FLAGS ------------------- */
|
||
#define NET_IP_FLAG_NONE DEF_BIT_NONE
|
||
|
||
/* IP tx flags copied from IP hdr flags. */
|
||
#define NET_IP_FLAG_TX_DONT_FRAG NET_IP_HDR_FLAG_FRAG_DONT
|
||
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* IP INTERNET TIMESTAMP DEFINES
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#define NET_IP_TS_NONE ((NET_TS)0)
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* DATA TYPES
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* IP TYPE OF SERVICE (TOS) DATA TYPE
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
typedef CPU_INT08U NET_IP_TOS;
|
||
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* IP TIME TO LIVE (TTL) DATA TYPE
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
typedef CPU_INT08U NET_IP_TTL;
|
||
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* IP ADDRESS DATA TYPE
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
typedef CPU_INT32U NET_IP_ADDR; /* Defines IPv4 IP addr size. */
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* IP HEADER
|
||
*
|
||
* Note(s) : (1) See RFC #791, Section 3.1 for IP datagram header format.
|
||
*
|
||
* (2) IP Version Number & Header Length are coded in the first octet of an IP header as follows :
|
||
*
|
||
* 7 6 5 4 3 2 1 0
|
||
* ---------------------
|
||
* | V E R | H L E N |
|
||
* ---------------------
|
||
*
|
||
* where
|
||
* VER IP version; currently 4 (see 'net_ip.h Note #1')
|
||
* HLEN IP Headers' length in 32-bit words; MUST be at least 5 (20-octet header)
|
||
* & MUST be less than or equal to 15 (60-octet header)
|
||
*
|
||
* (3) Type of Service (TOS) is coded in the second octet of an IP header as follows (see 'RFC #1349
|
||
* Type of Service in the Internet Protocol Suite' for required TOS implementation) :
|
||
*
|
||
* 7 6 5 4 3 2 1 0
|
||
* --------------------------------
|
||
* |PRECEDENCE| D | T | R | C | 0 |
|
||
* --------------------------------
|
||
*
|
||
* where
|
||
* PRECEDENCE Datagram Priority (see 'IP HEADER TYPE OF SERVICE (TOS) DEFINES') :
|
||
* '000' - Lowest "Routine" Priority (default)
|
||
* '111' - Highest "Network Control" Priority
|
||
* D Datagram Delay Request :
|
||
* '0' - Normal Delay requested (default)
|
||
* '1' - Low Delay requested
|
||
* T Datagram Throughput Request :
|
||
* '0' - Normal Throughput requested (default)
|
||
* '1' - High Throughput requested
|
||
* R Datagram Reliability Request :
|
||
* '0' - Normal Reliability requested (default)
|
||
* '1' - High Reliability requested
|
||
* C Datagram Cost Request :
|
||
* '0' - Normal Cost requested (default)
|
||
* '1' - Low Cost requested
|
||
* 0 MUST be zero; i.e. '0'
|
||
*
|
||
* (4) Flags & Fragment Offset are coded in the seventh & eighth octets of an IP header as follows :
|
||
*
|
||
* 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
|
||
* ----------------------------------------
|
||
* | 0 DF MF | FRAGMENT OFFSET |
|
||
* ----------------------------------------
|
||
*
|
||
* where
|
||
* 0 MUST be zero; i.e. '0'
|
||
* DF 'Do Not Fragment' Flag :
|
||
* '0' - Datagram fragmentation allowed
|
||
* '1' - Datagram fragmentation NOT allowed
|
||
* MF 'More Fragments' Flag :
|
||
* '0' - No more fragments for datagram; i.e. last fragment
|
||
* '1' - More fragments for datagram
|
||
* FRAGMENT OFFSET Offset of fragment in original datagram, measured in units of
|
||
* 8 octets (64 bits)
|
||
*
|
||
* (5) Supports ONLY a sub-set of allowed protocol numbers :
|
||
*
|
||
* (a) ICMP
|
||
* (b) UDP
|
||
* (c) TCP
|
||
*
|
||
* See also 'net.h Note #1a';
|
||
* & see 'RFC #1340 Assigned Numbers' for a complete list of protocol numbers.
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/* -------------------- NET IP HDR -------------------- */
|
||
typedef struct net_ip_hdr {
|
||
CPU_INT08U Ver_HdrLen; /* IP datagram ver nbr/hdr len (see Note #2). */
|
||
NET_IP_TOS TOS; /* IP datagram TOS (see Note #3). */
|
||
CPU_INT16U TotLen; /* IP datagram tot len. */
|
||
CPU_INT16U ID; /* IP datagram ID. */
|
||
CPU_INT16U Flags_FragOffset; /* IP datagram flags/frag offset (see Note #4). */
|
||
NET_IP_TTL TTL; /* IP datagram TTL. */
|
||
CPU_INT08U Protocol; /* IP datagram protocol (see Note #5). */
|
||
NET_CHK_SUM ChkSum; /* IP datagram chk sum. */
|
||
NET_IP_ADDR AddrSrc; /* IP datagram src addr. */
|
||
NET_IP_ADDR AddrDest; /* IP datagram dest addr. */
|
||
NET_IP_OPT_SIZE Opts[NET_IP_HDR_OPT_NBR_MAX]; /* IP datagram opts (if any). */
|
||
} NET_IP_HDR;
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* IP HEADER OPTION DATA TYPES
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* IP SOURCE ROUTE OPTION DATA TYPE
|
||
*
|
||
* Note(s) : (1) See the following RFC's for Source Route options summary :
|
||
*
|
||
* (a) RFC # 791, Section 3.1 'Options : Loose/Strict Source & Record Route'
|
||
* (b) RFC #1122, Section 3.2.1.8.(c)
|
||
*
|
||
* (2) Used for both Source Route options & Record Route options :
|
||
*
|
||
* (a) NET_IP_HDR_OPT_ROUTE_SRC_LOOSE
|
||
* (b) NET_IP_HDR_OPT_ROUTE_SRC_STRICT
|
||
* (c) NET_IP_HDR_OPT_ROUTE_REC
|
||
*
|
||
* (3) 'Route' declared with 1 entry; prevents removal by compiler optimization.
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
typedef struct net_ip_opt_src_route {
|
||
CPU_INT08U Type; /* Src route type (see Note #2). */
|
||
CPU_INT08U Len; /* Len of src route opt (in octets). */
|
||
CPU_INT08U Ptr; /* Ptr into src route opt (octet-ix'd). */
|
||
CPU_INT08U Pad; /* ???? Forced word-alignment pad octet. */
|
||
NET_IP_ADDR Route[1]; /* Src route IP addrs (see Note #3). */
|
||
} NET_IP_OPT_SRC_ROUTE;
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* IP INTERNET TIMESTAMP OPTION DATA TYPE
|
||
*
|
||
* Note(s) : (1) See the following RFC's for Internet Timestamp option summary :
|
||
*
|
||
* (a) RFC # 791, Section 3.1 'Options : Internet Timestamp'
|
||
* (b) RFC #1122, Section 3.2.1.8.(e)
|
||
*
|
||
* (2) 'TS'/'Route'/'Route_TS' declared with 1 entry; prevents removal by compiler optimization.
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
typedef struct net_ip_opt_ts {
|
||
CPU_INT08U Type; /* TS type. */
|
||
CPU_INT08U Len; /* Len of src route opt (in octets). */
|
||
CPU_INT08U Ptr; /* Ptr into src route opt (octet-ix'd). */
|
||
CPU_INT08U Ovf_Flags; /* Ovf/Flags. */
|
||
NET_TS TS[1]; /* Timestamps (see Note #2). */
|
||
} NET_IP_OPT_TS;
|
||
|
||
|
||
|
||
typedef struct net_ip_route_ts {
|
||
NET_IP_ADDR Route[1]; /* Route IP addrs (see Note #2). */
|
||
NET_TS TS[1]; /* Timestamps (see Note #2). */
|
||
} NET_IP_ROUTE_TS;
|
||
|
||
#define NET_IP_OPT_TS_ROUTE_SIZE (sizeof(NET_IP_ROUTE_TS))
|
||
|
||
|
||
typedef struct net_ip_opt_ts_route {
|
||
CPU_INT08U Type; /* TS type. */
|
||
CPU_INT08U Len; /* Len of src route opt (in octets). */
|
||
CPU_INT08U Ptr; /* Ptr into src route opt (octet-ix'd). */
|
||
CPU_INT08U Ovf_Flags; /* Ovf/Flags. */
|
||
NET_IP_ROUTE_TS Route_TS[1]; /* Route IP addrs / TS (see Note #2). */
|
||
} NET_IP_OPT_TS_ROUTE;
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* IP HEADER OPTION CONFIGURATION DATA TYPES
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* IP ROUTE & INTERNET TIMESTAMP OPTIONS CONFIGURATION DATA TYPE
|
||
*
|
||
* Note(s) : (1) 'NET_IP_OPT_CFG_ROUTE_TS' data type used to configure IP Route & Internet Timestamp transmit
|
||
* options :
|
||
*
|
||
* (a) Type specifies the desired IP option configuration type
|
||
* (b) Nbr specifies the desired number of option entries to allocate
|
||
* (c) Route specifies the desired IP addresses for Route or Internet Timestamp
|
||
* (d) TS specifies the desired Internet Timestamps
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
typedef struct net_ip_opt_cfg_route_ts {
|
||
NET_TYPE Type; /* IP opt type. */
|
||
CPU_INT08U Nbr; /* IP opt nbr. */
|
||
NET_IP_ADDR Route[NET_IP_OPT_PARAM_NBR_MAX]; /* IP route addrs. */
|
||
NET_TS TS[NET_IP_OPT_PARAM_NBR_MAX]; /* IP TS's. */
|
||
void *NextOptPtr; /* Ptr to next IP opt cfg. */
|
||
} NET_IP_OPT_CFG_ROUTE_TS;
|
||
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* IP SECURITY OPTIONS CONFIGURATION DATA TYPE
|
||
*
|
||
* Note(s) : (1) IP Security options NOT currently supported (see 'net_ip.h Note #1f').
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
typedef struct net_ip_opt_cfg_security {
|
||
NET_TYPE Type; /* IP opt type. */
|
||
|
||
void *NextOptPtr; /* Ptr to next IP cfg opt. */
|
||
} NET_IP_OPT_CFG_SECURITY;
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* GLOBAL VARIABLES
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
NET_IP_EXT NET_IP_ADDR NetIP_AddrThisHost; /* This host's IP addr (see 'net_ip.h Note #1a'). */
|
||
NET_IP_EXT NET_IP_ADDR NetIP_AddrThisHostNetOrder; /* This host's IP addr in net-order. */
|
||
NET_IP_EXT NET_IP_ADDR NetIP_AddrThisHostSubnetMask; /* This host's IP subnet net mask. */
|
||
NET_IP_EXT NET_IP_ADDR NetIP_AddrThisHostSubnetMaskHost; /* This host's IP subnet host mask. */
|
||
NET_IP_EXT NET_IP_ADDR NetIP_AddrThisHostSubnetNet; /* This host's IP subnet net. */
|
||
NET_IP_EXT NET_IP_ADDR NetIP_AddrDfltGateway; /* This host's dflt gateway (see 'net_ip.h Note #1c'). */
|
||
|
||
|
||
NET_IP_EXT NET_BUF *NetIP_FragReasmListsHead; /* Ptr to head of frag reasm lists. */
|
||
NET_IP_EXT NET_BUF *NetIP_FragReasmListsTail; /* Ptr to tail of frag reasm lists. */
|
||
|
||
NET_IP_EXT CPU_INT08U NetIP_FragReasmTimeout_sec; /* IP frag reasm timeout (in secs ). */
|
||
NET_IP_EXT NET_TMR_TICK NetIP_FragReasmTimeout_tick; /* IP frag reasm timeout (in ticks). */
|
||
|
||
|
||
NET_IP_EXT CPU_INT16U NetIP_TxIDCtr; /* Global tx ID field ctr. */
|
||
|
||
|
||
|
||
#if (NET_CTR_CFG_STAT_EN == DEF_ENABLED) /* ------------------- NET IP STATS ------------------- */
|
||
NET_IP_EXT NET_CTR NetIP_StatRxPktCtr; /* Nbr rx'd datagrams. */
|
||
NET_IP_EXT NET_CTR NetIP_StatRxDatagramProcessedCtr; /* Nbr rx'd datagrams delivered to supported protocols. */
|
||
|
||
NET_IP_EXT NET_CTR NetIP_StatRxDestLocalCtr; /* Nbr rx'd datagrams from localhost. */
|
||
NET_IP_EXT NET_CTR NetIP_StatRxDestBroadcastCtr; /* Nbr rx'd datagrams broadcast to this dest. */
|
||
|
||
NET_IP_EXT NET_CTR NetIP_StatRxFragCtr; /* Nbr rx'd frags. */
|
||
NET_IP_EXT NET_CTR NetIP_StatRxFragDatagramReasmCtr; /* Nbr rx'd frag'd datagrams reasm'd. */
|
||
|
||
|
||
NET_IP_EXT NET_CTR NetIP_StatTxDatagramCtr; /* Nbr tx'd datagrams. */
|
||
NET_IP_EXT NET_CTR NetIP_StatTxDestLocalCtr; /* Nbr tx'd datagrams to localhost. */
|
||
NET_IP_EXT NET_CTR NetIP_StatTxDestBroadcastCtr; /* Nbr tx'd datagrams broadcast to dest(s). */
|
||
#endif
|
||
|
||
|
||
/*$PAGE*/
|
||
#if (NET_CTR_CFG_ERR_EN == DEF_ENABLED) /* ------------------- NET IP ERRS -------------------- */
|
||
NET_IP_EXT NET_CTR NetIP_ErrNullPtrCtr; /* Nbr null IP ptr accesses. */
|
||
|
||
|
||
NET_IP_EXT NET_CTR NetIP_ErrCfgAddrThisHostCtr; /* Nbr cfg invalid host addr. */
|
||
NET_IP_EXT NET_CTR NetIP_ErrCfgAddrDfltGatewayCtr; /* Nbr cfg invalid dflt gateway addr. */
|
||
|
||
|
||
NET_IP_EXT NET_CTR NetIP_ErrRxHdrVerCtr; /* Nbr rx'd datagrams with invalid IP ver. */
|
||
NET_IP_EXT NET_CTR NetIP_ErrRxHdrLenCtr; /* Nbr rx'd datagrams with invalid hdr len. */
|
||
NET_IP_EXT NET_CTR NetIP_ErrRxHdrTotLenCtr; /* Nbr rx'd datagrams with invalid/inconsistent tot len.*/
|
||
NET_IP_EXT NET_CTR NetIP_ErrRxHdrFlagsCtr; /* Nbr rx'd datagrams with invalid flags. */
|
||
NET_IP_EXT NET_CTR NetIP_ErrRxHdrFragCtr; /* Nbr rx'd datagrams with invalid fragmentation. */
|
||
NET_IP_EXT NET_CTR NetIP_ErrRxHdrProtocolCtr; /* Nbr rx'd datagrams with unknown/unsupported protocol.*/
|
||
NET_IP_EXT NET_CTR NetIP_ErrRxHdrChkSumCtr; /* Nbr rx'd datagrams with invalid chk sum. */
|
||
NET_IP_EXT NET_CTR NetIP_ErrRxHdrAddrSrcCtr; /* Nbr rx'd datagrams with invalid src addr. */
|
||
NET_IP_EXT NET_CTR NetIP_ErrRxHdrOptsCtr; /* Nbr rx'd datagrams with unknown/invalid opts. */
|
||
NET_IP_EXT NET_CTR NetIP_ErrRxHdrOptsBufNoneAvailCtr; /* Nbr rx'd datagrams with no options buf avail. */
|
||
NET_IP_EXT NET_CTR NetIP_ErrRxHdrOptsBufWrCtr; /* Nbr rx'd datagrams with wr options buf err. */
|
||
|
||
NET_IP_EXT NET_CTR NetIP_ErrRxDestCtr; /* Nbr rx'd datagrams NOT for this IP dest. */
|
||
NET_IP_EXT NET_CTR NetIP_ErrRxDestBroadcastCtr; /* Nbr rx'd datagrams illegally broadcast to this dest. */
|
||
|
||
NET_IP_EXT NET_CTR NetIP_ErrRxFragSizeCtr; /* Nbr rx'd frags with invalid size. */
|
||
NET_IP_EXT NET_CTR NetIP_ErrRxFragDiscardedCtr; /* Nbr rx'd frags discarded. */
|
||
NET_IP_EXT NET_CTR NetIP_ErrRxFragDatagramDiscardedCtr; /* Nbr rx'd frag'd datagrams discarded. */
|
||
NET_IP_EXT NET_CTR NetIP_ErrRxFragDatagramTimeoutCtr; /* Nbr rx'd frag'd datagrams timed out. */
|
||
|
||
NET_IP_EXT NET_CTR NetIP_ErrRxPktDiscardedCtr; /* Nbr rx'd datagrams discarded. */
|
||
|
||
|
||
NET_IP_EXT NET_CTR NetIP_ErrTxProtocolCtr; /* Nbr tx pkts with unknown/unsupported protocol. */
|
||
NET_IP_EXT NET_CTR NetIP_ErrTxOptTypeCtr; /* Nbr tx pkts with invalid opt type. */
|
||
|
||
NET_IP_EXT NET_CTR NetIP_ErrTxDestCtr; /* Nbr tx datagrams with invalid dest addr. */
|
||
|
||
NET_IP_EXT NET_CTR NetIP_ErrTxPktDiscardedCtr; /* Nbr tx datagrams discarded. */
|
||
|
||
|
||
#if (NET_ERR_CFG_ARG_CHK_DBG_EN == DEF_ENABLED)
|
||
NET_IP_EXT NET_CTR NetIP_ErrRxInvalidBufIxCtr; /* Nbr rx pkts with invalid buf ix. */
|
||
|
||
NET_IP_EXT NET_CTR NetIP_ErrRxHdrDataLenCtr; /* Nbr rx'd datagrams with invalid data len. */
|
||
|
||
NET_IP_EXT NET_CTR NetIP_ErrRxFragFlagsCtr; /* Nbr rx'd frags with invalid flag(s). */
|
||
NET_IP_EXT NET_CTR NetIP_ErrRxFragOffsetCtr; /* Nbr rx'd frags with invalid offset. */
|
||
|
||
|
||
NET_IP_EXT NET_CTR NetIP_ErrTxInvalidBufIxCtr; /* Nbr tx pkts with invalid buf ix. */
|
||
|
||
NET_IP_EXT NET_CTR NetIP_ErrTxHdrTOS_Ctr; /* Nbr tx datagrams with invalid TOS. */
|
||
NET_IP_EXT NET_CTR NetIP_ErrTxHdrDataLenCtr; /* Nbr tx datagrams with invalid protocol/data len. */
|
||
NET_IP_EXT NET_CTR NetIP_ErrTxHdrAddrSrcCtr; /* Nbr tx datagrams with invalid src addr. */
|
||
NET_IP_EXT NET_CTR NetIP_ErrTxHdrAddrDestCtr; /* Nbr tx datagrams with invalid dest addr. */
|
||
NET_IP_EXT NET_CTR NetIP_ErrTxHdrFlagsCtr; /* Nbr tx datagrams with invalid flags. */
|
||
NET_IP_EXT NET_CTR NetIP_ErrTxHdrOptLenCtr; /* Nbr tx datagrams with invalid opt len. */
|
||
NET_IP_EXT NET_CTR NetIP_ErrTxHdrOptCfgCtr; /* Nbr tx datagrams with invalid opt cfg. */
|
||
#endif
|
||
|
||
#if 0 /* #### NOT currently implemented. */
|
||
/* See 'net_ip.h Note #1e' : */
|
||
NET_IP_EXT NET_CTR NetIP_ErrTxFragDiscardedCtr; /* Nbr tx pseudo-frags discarded (lack resources). */
|
||
NET_IP_EXT NET_CTR NetIP_ErrTxFragDiscardedDontFragCtr; /* Nbr tx pseudo-frags discarded ('Don't Frag' set). */
|
||
#endif
|
||
|
||
#endif
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* MACRO'S
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* NET_IP_TX_GET_ID()
|
||
*
|
||
* Description : Get next IP transmit identification number.
|
||
*
|
||
* Argument(s) : id Variable that will receive the returned IP transmit identification number.
|
||
*
|
||
* Return(s) : none.
|
||
*
|
||
* Caller(s) : NetIP_TxPktPrepareHdr(),
|
||
* NetIP_ReTxPktPrepareHdr().
|
||
*
|
||
* This macro is an INTERNAL network protocol suite macro & SHOULD NOT be called by
|
||
* application function(s).
|
||
*
|
||
* Note(s) : (1) Return IP identification number is NOT converted from host-order to network-order.
|
||
*
|
||
* (2) ALL functions which call NET_IP_TX_GET_ID() MUST declare local variable 'cpu_sr' if
|
||
* critical section method is configured as CPU_CRITICAL_METHOD_STATUS_LOCAL :
|
||
*
|
||
* #if (CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL)
|
||
* CPU_SR cpu_sr;
|
||
* #endif
|
||
*
|
||
* (a) #### Macro require critical section for exclusive access?
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#define NET_IP_TX_GET_ID(id) { CPU_CRITICAL_ENTER(); \
|
||
NET_UTIL_VAL_COPY_16(&(id), &NetIP_TxIDCtr); \
|
||
NetIP_TxIDCtr++; \
|
||
CPU_CRITICAL_EXIT(); }
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* FUNCTION PROTOTYPES
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
void NetIP_Init (void);
|
||
|
||
|
||
/* -------------- CFG FNCTS --------------- */
|
||
CPU_BOOLEAN NetIP_CfgAddrThisHost (NET_IP_ADDR addr_host,
|
||
NET_IP_ADDR addr_subnet_mask);
|
||
|
||
CPU_BOOLEAN NetIP_CfgAddrDfltGateway (NET_IP_ADDR addr_dflt_gateway);
|
||
|
||
CPU_BOOLEAN NetIP_CfgFragReasmTimeout (CPU_INT08U timeout_sec);
|
||
|
||
|
||
/* -------------- GET FNCTS --------------- */
|
||
NET_IP_ADDR NetIP_GetAddrThisHost (void);
|
||
|
||
NET_IP_ADDR NetIP_GetAddrDfltGateway (void);
|
||
|
||
CPU_CHAR *NetIP_GetAddrStrThisHost (CPU_CHAR *paddr);
|
||
|
||
CPU_CHAR *NetIP_GetAddrStrDfltGateway(CPU_CHAR *paddr);
|
||
|
||
|
||
/* ------------- STATUS FNCTS ------------- */
|
||
CPU_BOOLEAN NetIP_IsValidAddrHost (NET_IP_ADDR addr_host); /* Validate an IP host addr. */
|
||
|
||
CPU_BOOLEAN NetIP_IsValidAddrThisHost (NET_IP_ADDR addr_host, /* Validate this host's IP addr. */
|
||
NET_IP_ADDR addr_subnet_mask);
|
||
/* Validate an IP addr subnet mask. */
|
||
CPU_BOOLEAN NetIP_IsValidAddrSubnetMask(NET_IP_ADDR addr_subnet_mask);
|
||
|
||
|
||
|
||
/* --------------- RX FNCTS --------------- */
|
||
void NetIP_Rx (NET_BUF *pbuf,
|
||
NET_ERR *perr);
|
||
|
||
|
||
/* --------------- TX FNCTS --------------- */
|
||
void NetIP_Tx (NET_BUF *pbuf, /* Prepare & tx IP pkts. */
|
||
NET_IP_ADDR addr_src,
|
||
NET_IP_ADDR addr_dest,
|
||
NET_IP_TOS TOS,
|
||
NET_IP_TTL TTL,
|
||
CPU_INT16U flags,
|
||
void *popts,
|
||
NET_ERR *perr);
|
||
|
||
void NetIP_ReTx (NET_BUF *pbuf, /* Prepare & re-tx IP pkts. */
|
||
NET_ERR *perr);
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* CONFIGURATION ERRORS
|
||
*********************************************************************************************************
|
||
*/
|
||
|