?? net_icmp.h
字號:
/*$PAGE*/
/*
*********************************************************************************************************
* ICMP POINTER DEFINES
*
* Note(s) : (1) RFC #791 & RFC #792 define a pointer (PTR) as an index (IX) into an option or message :
*
* (a) RFC #791, Section 3.1 'Options : Loose/Strict Source & Record Route'
* (b) RFC #791, Section 3.1 'Options : Internet Timestamp'
* (c) RFC #792, 'Parameter Problem Message'
*
* (2) ICMP Parameter Problem Message pointer validation currently ONLY supports the following
* protocols :
*
* (a) IP
*********************************************************************************************************
*/
#define NET_ICMP_PTR_IX_BASE 0
/* ---------- IP HDR PTR IXs ---------- */
#define NET_ICMP_PTR_IX_IP_HDR_BASE NET_ICMP_PTR_IX_BASE
#define NET_ICMP_PTR_IX_IP_HDR_VER (NET_ICMP_PTR_IX_IP_HDR_BASE + 0)
#define NET_ICMP_PTR_IX_IP_HDR_HDR_LEN (NET_ICMP_PTR_IX_IP_HDR_BASE + 0)
#define NET_ICMP_PTR_IX_IP_HDR_TOS (NET_ICMP_PTR_IX_IP_HDR_BASE + 1)
#define NET_ICMP_PTR_IX_IP_HDR_TOT_LEN (NET_ICMP_PTR_IX_IP_HDR_BASE + 2)
#define NET_ICMP_PTR_IX_IP_HDR_ID (NET_ICMP_PTR_IX_IP_HDR_BASE + 4)
#define NET_ICMP_PTR_IX_IP_HDR_FLAGS (NET_ICMP_PTR_IX_IP_HDR_BASE + 6)
#define NET_ICMP_PTR_IX_IP_HDR_FRAG_OFFSET (NET_ICMP_PTR_IX_IP_HDR_BASE + 6)
#define NET_ICMP_PTR_IX_IP_HDR_TTL (NET_ICMP_PTR_IX_IP_HDR_BASE + 8)
#define NET_ICMP_PTR_IX_IP_HDR_PROTOCOL (NET_ICMP_PTR_IX_IP_HDR_BASE + 9)
#define NET_ICMP_PTR_IX_IP_HDR_CHK_SUM (NET_ICMP_PTR_IX_IP_HDR_BASE + 10)
#define NET_ICMP_PTR_IX_IP_HDR_ADDR_SRC (NET_ICMP_PTR_IX_IP_HDR_BASE + 12)
#define NET_ICMP_PTR_IX_IP_HDR_ADDR_DEST (NET_ICMP_PTR_IX_IP_HDR_BASE + 16)
#define NET_ICMP_PTR_IX_IP_HDR_OPTS (NET_ICMP_PTR_IX_IP_HDR_BASE + 20)
/* --------- ICMP MSG PTR IXs --------- */
#define NET_ICMP_PTR_IX_ICMP_MSG_BASE 0
#define NET_ICMP_PTR_IX_ICMP_MSG_TYPE 0
#define NET_ICMP_PTR_IX_ICMP_MSG_CODE 1
#define NET_ICMP_PTR_IX_ICMP_MSG_CHK_SUM 2
#define NET_ICMP_PTR_IX_ICMP_MSG_PTR 4
#define NET_ICMP_PTR_IX_ICMP_MSG_UNUSED 4
#define NET_ICMP_PTR_IX_ICMP_MSG_UNUSED_PARAM_PROB 5
/*$PAGE*/
/*
*********************************************************************************************************
* DATA TYPES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* ICMP TRANSMIT SOURCE QUENCH QUANTITY DATA TYPE
*********************************************************************************************************
*/
typedef CPU_INT16U NET_ICMP_SRC_QUENCH_QTY; /* Defines max qty of src quench entries to support. */
/*$PAGE*/
/*
*********************************************************************************************************
* ICMP HEADER
*
* Note(s) : (1) See RFC #792 for ICMP message header formats.
*
* (2) ICMP 'Redirect' & 'Router' messages are NOT supported (see 'net_icmp.h Note #1').
*********************************************************************************************************
*/
/* --------------- NET ICMP HDR --------------- */
typedef struct net_icmp_hdr {
CPU_INT08U Type; /* ICMP msg type. */
CPU_INT08U Code; /* ICMP msg code. */
CPU_INT16U ChkSum; /* ICMP msg chk sum. */
} NET_ICMP_HDR;
/*
*********************************************************************************************************
* ICMP ERROR HEADER
*
* Note(s) : (1) See RFC #792, Sections 'Destination Unreachable Message', 'Source Quench Message', 'Time
* Exceeded Message' for ICMP 'Error Message' header format.
*
* (2) 'Unused' field MUST be cleared (i.e. ALL 'Unused' field octets MUST be set to 0x00).
*********************************************************************************************************
*/
/* ------------- NET ICMP ERR HDR ------------- */
typedef struct net_icmp_hdr_err {
CPU_INT08U Type; /* ICMP msg type. */
CPU_INT08U Code; /* ICMP msg code. */
CPU_INT16U ChkSum; /* ICMP msg chk sum. */
CPU_INT08U Unused[NET_ICMP_HDR_NBR_OCTETS_UNUSED]; /* See Note #2. */
CPU_INT08U Data[NET_ICMP_MSG_ERR_LEN_MAX];
} NET_ICMP_HDR_ERR;
/*
*********************************************************************************************************
* ICMP PARAMETER PROBLEM HEADER
*
* Note(s) : (1) See RFC #792, Section 'Parameter Problem Message' for ICMP 'Parameter Problem Message'
* header format.
*
* (2) 'Unused' field MUST be cleared (i.e. ALL 'Unused' field octets MUST be set to 0x00).
*********************************************************************************************************
*/
/* ---------- NET ICMP PARAM PROB HDR --------- */
typedef struct net_icmp_hdr_param_prob {
CPU_INT08U Type; /* ICMP msg type. */
CPU_INT08U Code; /* ICMP msg code. */
CPU_INT16U ChkSum; /* ICMP msg chk sum. */
CPU_INT08U Ptr; /* Ptr into ICMP err msg. */
CPU_INT08U Unused[NET_ICMP_HDR_NBR_OCTETS_UNUSED_PARAM_PROB]; /* See Note #2. */
CPU_INT08U Data[NET_ICMP_MSG_ERR_LEN_MAX];
} NET_ICMP_HDR_PARAM_PROB;
/*$PAGE*/
/*
*********************************************************************************************************
* ICMP ECHO REQUEST/REPLY HEADER
*
* Note(s) : (1) See RFC #792, Section 'Echo or Echo Reply Message' for ICMP 'Echo Request/Reply Message'
* header format.
*
* (2) 'Data' declared with 1 entry; prevents removal by compiler optimization.
*********************************************************************************************************
*/
/* ------- NET ICMP ECHO REQ/REPLY HDR -------- */
typedef struct net_icmp_hdr_echo {
CPU_INT08U Type; /* ICMP msg type. */
CPU_INT08U Code; /* ICMP msg code. */
CPU_INT16U ChkSum; /* ICMP msg chk sum. */
CPU_INT16U ID; /* ICMP msg ID. */
CPU_INT16U SeqNbr; /* ICMP seq nbr. */
CPU_INT08U Data[1]; /* ICMP msg data (see Note #2). */
} NET_ICMP_HDR_ECHO;
/*
*********************************************************************************************************
* ICMP INTERNET TIMESTAMP HEADER
*
* Note(s) : (1) See RFC #792, Section 'Timestamp or Timestamp Reply Message' for ICMP 'Internet Timestamp
* Message' header format.
*********************************************************************************************************
*/
/* -------- NET ICMP TS REQ/REPLY HDR --------- */
typedef struct net_icmp_hdr_ts {
CPU_INT08U Type; /* ICMP msg type. */
CPU_INT08U Code; /* ICMP msg code. */
CPU_INT16U ChkSum; /* ICMP msg chk sum. */
CPU_INT16U ID; /* ICMP msg ID. */
CPU_INT16U SeqNbr; /* ICMP seq nbr. */
NET_TS TS_Originate; /* TS @ req tx. */
NET_TS TS_Rx; /* TS @ target rx. */
NET_TS TS_Tx; /* TS @ target tx. */
} NET_ICMP_HDR_TS;
/*
*********************************************************************************************************
* ICMP ADDRESS MASK REQUEST/REPLY HEADER
*
* Note(s) : (1) See RFC #950, Appendix I 'Address Mask ICMP' for ICMP 'Address Mask Request/Reply Message'
* header format.
*********************************************************************************************************
*/
/* ----- NET ICMP ADDR MASK REQ/REPLY HDR ----- */
typedef struct net_icmp_hdr_addr_mask {
CPU_INT08U Type; /* ICMP msg type. */
CPU_INT08U Code; /* ICMP msg code. */
CPU_INT16U ChkSum; /* ICMP msg chk sum. */
CPU_INT16U ID; /* ICMP msg ID. */
CPU_INT16U SeqNbr; /* ICMP seq nbr. */
NET_IP_ADDR AddrMask; /* Addr mask. */
} NET_ICMP_HDR_ADDR_MASK;
/*$PAGE*/
/*
*********************************************************************************************************
* ICMP REQUEST MESSAGE IDENTIFICATION & SEQUENCE NUMBER DATA TYPE
*********************************************************************************************************
*/
/* ----------- NET ICMP REQ MSG ID/SEQ NBR ------------ */
typedef struct net_icmp_req_id_seq {
CPU_INT16U ID; /* ICMP Req Msg ID. */
CPU_INT16U SeqNbr; /* ICMP Req Msg Seq Nbr. */
} NET_ICMP_REQ_ID_SEQ;
/*
*********************************************************************************************************
* ICMP TRANSMIT SOURCE QUENCH LIST DATA TYPE
*
* NET_ICMP_TX_SRC_QUENCH
* |-------------|
* | ICMP Type |
* Previous |-------------|
* ICMP <----------O |
* entry |-------------| Next
* | O----------> ICMP
* |-------------| entry
* | IP Address |
* |-------------|
* | Transmit |
* | Counter |
* |-------------|
*
*
* Note(s) : (1) Forced word-alignment at start of ICMP entry NOT required since first data member 'Type'
* is declared as 'CPU_INT32U'.
*
* (2) 'PrevPtr'/'NextPtr' ideally declared as 'NET_ICMP_TX_SRC_QUENCH' pointers; declared as
* 'void' pointers because 'NET_ICMP_TX_SRC_QUENCH' NOT fully defined at time of declaration.
*********************************************************************************************************
*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -