mirror of
https://github.com/dimoniche/Moyka.git
synced 2026-01-30 18:03:31 +03:00
659 lines
35 KiB
C
659 lines
35 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 ARP LAYER
|
||
* (ADDRESS RESOLUTION PROTOCOL)
|
||
*
|
||
* Filename : net_arp.h
|
||
* Version : V1.89
|
||
* Programmer(s) : ITJ
|
||
*********************************************************************************************************
|
||
* Note(s) : (1) Address Resolution Protocol ONLY required for network interfaces that require
|
||
* network-address-to-hardware-address bindings (see RFC #826 'Abstract').
|
||
*
|
||
* (2) Supports Address Resolution Protocol as described in RFC #826 with the following
|
||
* restrictions/constraints :
|
||
*
|
||
* (a) ONLY supports the following hardware types :
|
||
* (1) 48-bit Ethernet
|
||
*
|
||
* (b) ONLY supports the following protocol types :
|
||
* (1) 32-bit IP
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* MODULE
|
||
*
|
||
* Note(s) : (1) ARP Layer is required for some network interfaces (see 'net_arp.h Note #1).
|
||
*
|
||
* (2) The following ARP-module-present configuration value MUST be pre-#define'd in 'net_cfg_net.h'
|
||
* PRIOR to all other network modules that require ARP Layer Configuration (see 'net_cfg_net.h
|
||
* ARP LAYER CONFIGURATION Note #2b' & 'net_cfg_net.h NETWORK INTERFACE LAYER CONFIGURATION
|
||
* Note #4') :
|
||
*
|
||
* NET_ARP_MODULE_PRESENT
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#ifdef NET_ARP_MODULE_PRESENT /* See Note #2. */
|
||
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* EXTERNS
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#ifdef NET_ARP_MODULE
|
||
#define NET_ARP_EXT
|
||
#else
|
||
#define NET_ARP_EXT extern
|
||
#endif
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* DEFINES
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* ARP CACHE DEFINES
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#define NET_ARP_CACHE_TIMEOUT_MIN_SEC ( 1L * 60L) /* Cache timeout min = 60 seconds */
|
||
#define NET_ARP_CACHE_TIMEOUT_MAX_SEC (10L * 60L) /* Cache timeout max = 600 seconds */
|
||
#define NET_ARP_CACHE_TIMEOUT_DFLT_SEC (10L * 60L) /* Cache timeout dflt = 600 seconds */
|
||
|
||
#define NET_ARP_CACHE_ACCESSED_TH_MIN 10u
|
||
#define NET_ARP_CACHE_ACCESSED_TH_MAX 65000u
|
||
#define NET_ARP_CACHE_ACCESSED_TH_DFLT 100u
|
||
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* ARP REQUEST DEFINES
|
||
*
|
||
* Note(s) : (1) RFC #1122, Section 2.3.2.1 states that "a mechanism to prevent ARP flooding (repeatedly
|
||
* sending an ARP Request for the same IP address, at a high rate) MUST be included. The
|
||
* recommended maximum rate is 1 per second per destination".
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#define NET_ARP_REQ_RETRY_MIN 0
|
||
#define NET_ARP_REQ_RETRY_MAX 5
|
||
#define NET_ARP_REQ_RETRY_DFLT 3
|
||
/* ARP req retry timeouts (see Note #1). */
|
||
#define NET_ARP_REQ_RETRY_TIMEOUT_MIN_SEC 1L /* ARP req retry timeout min = 1 seconds */
|
||
#define NET_ARP_REQ_RETRY_TIMEOUT_MAX_SEC 10L /* ARP req retry timeout max = 10 seconds */
|
||
#define NET_ARP_REQ_RETRY_TIMEOUT_DFLT_SEC 5L /* ARP req retry timeout dflt = 5 seconds */
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* ARP FLAG DEFINES
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/* ------------------ NET ARP FLAGS ------------------- */
|
||
#define NET_ARP_FLAG_NONE DEF_BIT_NONE
|
||
#define NET_ARP_FLAG_USED DEF_BIT_00 /* ARP cache cur used; i.e. NOT in free cache pool. */
|
||
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* ARP TYPE DEFINES
|
||
*
|
||
* Note(s) : (1) NET_ARP_TYPE_??? #define values specifically chosen as ASCII representations of the ARP
|
||
* types. Memory displays of ARP types will display the ARP TYPE with the chosen ASCII name.
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/* ------------------ NET ARP TYPES ------------------- */
|
||
#if (CPU_CFG_ENDIAN_TYPE == CPU_ENDIAN_TYPE_BIG)
|
||
#define NET_ARP_TYPE_NONE 0x4E4F4E45 /* "NONE" in ASCII. */
|
||
#define NET_ARP_TYPE_CACHE 0x41525020 /* "ARP " in ASCII. */
|
||
|
||
#else
|
||
|
||
#if (CPU_CFG_DATA_SIZE == CPU_WORD_SIZE_32)
|
||
#define NET_ARP_TYPE_NONE 0x454E4F4E /* "NONE" in ASCII. */
|
||
#define NET_ARP_TYPE_CACHE 0x20505241 /* "ARP " in ASCII. */
|
||
|
||
#elif (CPU_CFG_DATA_SIZE == CPU_WORD_SIZE_16)
|
||
#define NET_ARP_TYPE_NONE 0x4F4E454E /* "NONE" in ASCII. */
|
||
#define NET_ARP_TYPE_CACHE 0x52412050 /* "ARP " in ASCII. */
|
||
|
||
#else /* Dflt CPU_WORD_SIZE_08. */
|
||
#define NET_ARP_TYPE_NONE 0x4E4F4E45 /* "NONE" in ASCII. */
|
||
#define NET_ARP_TYPE_CACHE 0x41525020 /* "ARP " in ASCII. */
|
||
|
||
#endif
|
||
#endif
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* ARP HARDWARE & PROTOCOL DEFINES
|
||
*
|
||
* Note(s) : (1) The following ARP values MUST be pre-#define'd in 'net_def.h' PRIOR to 'net_cfg.h' so
|
||
* that the developer can configure ARP for the correct network interface link layer &
|
||
* network protocol layer (see 'net_def.h ARP LAYER DEFINES' & 'net_cfg_net.h ARP LAYER
|
||
* CONFIGURATION') :
|
||
*
|
||
* ---- SUPPORTED ARP HW TYPES ----
|
||
* NET_ARP_HW_TYPE_NONE 0x0000
|
||
*
|
||
* NET_ARP_HW_TYPE_ETHER 0x0001
|
||
* NET_ARP_HW_ADDR_LEN_ETHER 6
|
||
*
|
||
*
|
||
* - SUPPORTED ARP PROTOCOL TYPES -
|
||
* NET_ARP_PROTOCOL_TYPE_NONE 0x0000
|
||
*
|
||
* NET_ARP_PROTOCOL_TYPE_IP_V4 0x0800
|
||
* NET_ARP_PROTOCOL_ADDR_LEN_IP_V4 4
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* ARP HEADER / MESSAGE DEFINES
|
||
*
|
||
* Note(s) : (1) See RFC #826, Section 'Packet Format' for ARP packet header format.
|
||
*
|
||
* (a) ARP header includes two pairs of hardware & protocol type addresses--one each for the
|
||
* sender & the target.
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#define NET_ARP_HDR_SIZE_MIN 12
|
||
#define NET_ARP_HDR_SIZE_MAX 68
|
||
#define NET_ARP_HDR_SIZE_OVRHD 8
|
||
/* See Note #1a. */
|
||
#define NET_ARP_HDR_SIZE (NET_ARP_HDR_SIZE_OVRHD + \
|
||
(NET_ARP_CFG_HW_ADDR_LEN * 2) + \
|
||
(NET_ARP_CFG_PROTOCOL_ADDR_LEN * 2))
|
||
|
||
|
||
#define NET_ARP_HDR_OP_REQ 0x0001
|
||
#define NET_ARP_HDR_OP_REPLY 0x0002
|
||
|
||
|
||
#define NET_ARP_MSG_LEN NET_ARP_HDR_SIZE
|
||
#define NET_ARP_MSG_LEN_DATA 0
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* ARP CACHE STATES
|
||
*
|
||
* (1) (2)
|
||
* ARP REQUEST ARP REPLY
|
||
* ---------- FETCHES NEW ----------- RESOLVES ------------
|
||
* | | ARP CACHE | | ARP CACHE | |
|
||
* | FREE | -----------------> | PENDING | -----------------> | RESOLVED |
|
||
* | | | | | |
|
||
* ---------- (3) ----------- ------------
|
||
* ^ ^ ARP REQUEST | |
|
||
* | | TIMES OUT | |
|
||
* | | AFTER RETRIES | (4) |
|
||
* | ------------------------------ ARP CACHE |
|
||
* | TIMES OUT |
|
||
* -----------------------------------------------------------------
|
||
*
|
||
*
|
||
* Note(s) : (1) ARP cache lookup fails to find the ARP cache with corresponding protocol address. A new
|
||
* ARP cache is allocated from the ARP cache pool & inserted into the ARP Cache List in the
|
||
* 'PENDING' state. An ARP Request is generated & transmitted to resolve the pending ARP cache.
|
||
*
|
||
* (2) An ARP Reply resolves the pending ARP cache's hardware address.
|
||
*
|
||
* (3) Alternatively, no corresponding ARP Reply is received after the maximum number of ARP
|
||
* Request retries & the ARP cache is freed.
|
||
*
|
||
* (4) ARP cache times out & is freed.
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#define NET_ARP_CACHE_STATE_NONE 0
|
||
#define NET_ARP_CACHE_STATE_FREE 1
|
||
#define NET_ARP_CACHE_STATE_PEND 2
|
||
#define NET_ARP_CACHE_STATE_RESOLVED 3
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* DATA TYPES
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* ARP CACHE QUANTITY DATA TYPE
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
typedef CPU_INT16U NET_ARP_CACHE_QTY; /* Defines max qty of ARP caches to support. */
|
||
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* ARP CACHE STATE DATA TYPE
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
typedef CPU_INT08U NET_ARP_CACHE_STATE;
|
||
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* ARP ADDRESS LENGTH DATA TYPE
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
typedef CPU_INT08U NET_ARP_ADDR_LEN;
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* ARP HEADER
|
||
*
|
||
* Note(s) : (1) See RFC #826, Section 'Packet Format' for ARP packet header format.
|
||
*
|
||
* (2) See 'ARP HEADER / MESSAGE DEFINES'.
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/* --------------- NET ARP HDR ---------------- */
|
||
typedef struct net_arp_hdr {
|
||
CPU_INT16U HW_Type; /* ARP pkt hw type. */
|
||
CPU_INT16U ProtocolType; /* ARP pkt protocol type. */
|
||
|
||
CPU_INT08U HW_AddrLen; /* ARP pkt hw addr len (in octets). */
|
||
CPU_INT08U ProtocolAddrLen; /* ARP pkt protocol addr len (in octets). */
|
||
|
||
CPU_INT16U OpCode; /* ARP op code (see Note #2). */
|
||
|
||
CPU_INT08U HW_AddrSender[NET_ARP_CFG_HW_ADDR_LEN]; /* Sender hw addr. */
|
||
CPU_INT08U ProtocolAddrSender[NET_ARP_CFG_PROTOCOL_ADDR_LEN]; /* Sender protocol addr. */
|
||
|
||
CPU_INT08U HW_AddrTarget[NET_ARP_CFG_HW_ADDR_LEN]; /* Target hw addr. */
|
||
CPU_INT08U ProtocolAddrTarget[NET_ARP_CFG_PROTOCOL_ADDR_LEN]; /* Target protocol addr. */
|
||
} NET_ARP_HDR;
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* ARP CACHE ENTRY DATA TYPE
|
||
*
|
||
* NET_ARP_CACHE
|
||
* |-------------|
|
||
* | Cache Type |
|
||
* Previous |-------------|
|
||
* Cache <----------O |
|
||
* |-------------| Next
|
||
* | O----------> Cache Buffer Queue
|
||
* |-------------| Head -------
|
||
* | O------------------------------------> | |
|
||
* |-------------| | |
|
||
* | O---------------------- -------
|
||
* |-------------| | | ^
|
||
* | O----------> Cache | v |
|
||
* |-------------| Timer | -------
|
||
* | Hardware: | | | |
|
||
* | Type | | | |
|
||
* | Length | | -------
|
||
* | Address | | | ^
|
||
* |-------------| | Buffer Queue v |
|
||
* | Protocol: | | Tail -------
|
||
* | Type | ---------------> | |
|
||
* | Length | | |
|
||
* | Address | -------
|
||
* |-------------|
|
||
* | Flags |
|
||
* |-------------|
|
||
* | Accessed |
|
||
* | Counter |
|
||
* |-------------|
|
||
* | Request |
|
||
* | Counter |
|
||
* |-------------|
|
||
* | State |
|
||
* |-------------|
|
||
*
|
||
*
|
||
* Note(s) : (1) Forced word-alignment at start of ARP cache NOT required since first data member
|
||
* 'Type' is declared as 'CPU_INT32U'.
|
||
*
|
||
* (2) 'PrevPtr'/'NextPtr' ideally declared as 'NET_ARP_CACHE' pointers; declared as 'void'
|
||
* pointers because 'NET_ARP_CACHE' NOT fully defined at time of declaration.
|
||
*
|
||
* (3) These fields are configured by the developer via 'net_cfg_net.h' at compile time.
|
||
*
|
||
* See 'net_arp.h Note #2' & 'ARP HARDWARE & PROTOCOL DEFINES Note #1' for supported
|
||
* hardware & protocol types.
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/* --------------- NET ARP CACHE -------------- */
|
||
typedef struct net_arp_cache {
|
||
NET_TYPE Type; /* Type cfg'd @ init : NET_ARP_TYPE_CACHE. */
|
||
|
||
void *PrevPtr; /* Ptr to PREV ARP cache. */
|
||
void *NextPtr; /* Ptr to NEXT ARP cache. */
|
||
|
||
NET_BUF *BufQ_Head; /* Ptr to head of cache's buf Q. */
|
||
NET_BUF *BufQ_Tail; /* Ptr to tail of cache's buf Q. */
|
||
|
||
NET_TMR *TmrPtr; /* Ptr to cache TMR. */
|
||
|
||
|
||
CPU_INT16U HW_Type; /* HW type (see Note #3). */
|
||
CPU_INT08U HW_AddrLen; /* HW addr len (see Note #3). */
|
||
CPU_INT08U HW_Addr[NET_ARP_CFG_HW_ADDR_LEN]; /* HW addr. */
|
||
|
||
CPU_INT16U ProtocolType; /* Protocol type (see Note #3). */
|
||
CPU_INT08U ProtocolAddrLen; /* Protocol addr len (see Note #3). */
|
||
CPU_INT08U ProtocolAddr[NET_ARP_CFG_PROTOCOL_ADDR_LEN]; /* Protocol addr. */
|
||
|
||
|
||
CPU_INT16U Flags; /* ARP cache flags. */
|
||
|
||
|
||
CPU_INT16U AccessedCtr; /* Nbr successful srchs. */
|
||
CPU_INT08U ReqAttemptsCtr; /* ARP req attempts ctr. */
|
||
|
||
|
||
NET_ARP_CACHE_STATE State; /* Cur cache state. */
|
||
} NET_ARP_CACHE;
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* GLOBAL VARIABLES
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
NET_ARP_EXT CPU_INT08U *NetARP_HostAddrPtrHW; /* Ptr to host's hw addr. */
|
||
NET_ARP_EXT CPU_INT08U *NetARP_HostAddrPtrProtocol; /* Ptr to host's protocol addr. */
|
||
|
||
|
||
NET_ARP_EXT NET_ARP_CACHE NetARP_CacheTbl[NET_ARP_CFG_NBR_CACHE];
|
||
NET_ARP_EXT NET_ARP_CACHE *NetARP_CachePoolPtr; /* Ptr to pool of free ARP caches. */
|
||
NET_ARP_EXT NET_STAT_POOL NetARP_CachePoolStat;
|
||
|
||
#if (NET_CTR_CFG_STAT_EN == DEF_ENABLED)
|
||
NET_ARP_EXT NET_CTR NetARP_CacheSrchCtr_lo; /* Inc'd for EVERY cache lookup (lo ctr). */
|
||
NET_ARP_EXT NET_CTR NetARP_CacheSrchCtr_hi; /* Cache lookup hi ctr. */
|
||
NET_ARP_EXT NET_CTR NetARP_CacheFoundCtr_lo; /* Inc'd for EVERY cache found (lo ctr). */
|
||
NET_ARP_EXT NET_CTR NetARP_CacheFoundCtr_hi; /* Cache found hi ctr. */
|
||
NET_ARP_EXT CPU_INT08U NetARP_CacheFoundPct; /* Found % = (FoundCtr / SrchCtr) * 100% */
|
||
#endif
|
||
|
||
NET_ARP_EXT NET_ARP_CACHE *NetARP_CacheListHead; /* Ptr to head of ARP Cache List. */
|
||
NET_ARP_EXT NET_ARP_CACHE *NetARP_CacheListTail; /* Ptr to tail of ARP Cache List. */
|
||
|
||
|
||
NET_ARP_EXT CPU_INT16U NetARP_CacheTimeout_sec; /* ARP cache timeout (in secs ). */
|
||
NET_ARP_EXT NET_TMR_TICK NetARP_CacheTimeout_tick; /* ARP cache timeout (in ticks). */
|
||
|
||
NET_ARP_EXT CPU_INT16U NetARP_CacheAccessedTh_nbr; /* Nbr successful srch's to promote ARP cache. */
|
||
|
||
NET_ARP_EXT CPU_INT08U NetARP_ReqMaxAttempts_nbr; /* ARP req max nbr of attempts. */
|
||
NET_ARP_EXT CPU_INT08U NetARP_ReqTimeout_sec; /* ARP req wait-for-reply timeout (in secs ). */
|
||
NET_ARP_EXT NET_TMR_TICK NetARP_ReqTimeout_tick; /* ARP req wait-for-reply timeout (in ticks). */
|
||
|
||
|
||
#if (NET_CTR_CFG_STAT_EN == DEF_ENABLED) /* --------------- NET ARP STATS -------------- */
|
||
NET_ARP_EXT NET_CTR NetARP_StatRxPktCtr; /* Nbr rx'd pkts. */
|
||
NET_ARP_EXT NET_CTR NetARP_StatRxMsgProcessedCtr; /* Nbr rx'd msgs successfully processed. */
|
||
NET_ARP_EXT NET_CTR NetARP_StatRxMsgReqProcessedCtr; /* Nbr rx'd req msgs successfully processed. */
|
||
NET_ARP_EXT NET_CTR NetARP_StatRxMsgReplyProcessedCtr; /* Nbr rx'd reply msgs successfully processed. */
|
||
|
||
NET_ARP_EXT NET_CTR NetARP_StatTxMsgCtr; /* Nbr tx'd msgs. */
|
||
NET_ARP_EXT NET_CTR NetARP_StatTxMsgReqCtr; /* Nbr tx'd req msgs. */
|
||
NET_ARP_EXT NET_CTR NetARP_StatTxMsgReplyCtr; /* Nbr tx'd reply msgs. */
|
||
#endif
|
||
|
||
|
||
#if (NET_CTR_CFG_ERR_EN == DEF_ENABLED) /* --------------- NET ARP ERRS --------------- */
|
||
NET_ARP_EXT NET_CTR NetARP_ErrNoneAvailCtr; /* Nbr ARP cache unavail accesses. */
|
||
|
||
|
||
NET_ARP_EXT NET_CTR NetARP_ErrRxHdrHW_TypeCtr; /* Nbr rx'd msgs with invalid hw type. */
|
||
NET_ARP_EXT NET_CTR NetARP_ErrRxHdrHW_AddrLenCtr; /* Nbr rx'd msgs with invalid hw addr len.*/
|
||
NET_ARP_EXT NET_CTR NetARP_ErrRxHdrHW_AddrCtr; /* Nbr rx'd msgs with invalid hw addr. */
|
||
NET_ARP_EXT NET_CTR NetARP_ErrRxHdrProtocolTypeCtr; /* Nbr rx'd msgs with invalid protocol type. */
|
||
NET_ARP_EXT NET_CTR NetARP_ErrRxHdrProtocolAddrLenCtr; /* Nbr rx'd msgs with invalid protocol addr len.*/
|
||
NET_ARP_EXT NET_CTR NetARP_ErrRxHdrProtocolAddrCtr; /* Nbr rx'd msgs with invalid protocol addr. */
|
||
NET_ARP_EXT NET_CTR NetARP_ErrRxHdrOpCodeCtr; /* Nbr rx'd msgs with invalid op code. */
|
||
NET_ARP_EXT NET_CTR NetARP_ErrRxHdrOpAddrCtr; /* Nbr rx'd msgs with invalid op code/addr. */
|
||
NET_ARP_EXT NET_CTR NetARP_ErrRxHdrMsgLenCtr; /* Nbr rx'd msgs with invalid msg len. */
|
||
|
||
NET_ARP_EXT NET_CTR NetARP_ErrRxPktTargetReplyCtr; /* Nbr rx'd msgs for invalid reply msg dest. */
|
||
NET_ARP_EXT NET_CTR NetARP_ErrRxPktTargetNotThisHostCtr; /* Nbr rx'd msgs for invalid dest. */
|
||
|
||
NET_ARP_EXT NET_CTR NetARP_ErrRxPktDiscardedCtr; /* Nbr rx'd msgs discarded. */
|
||
|
||
|
||
NET_ARP_EXT NET_CTR NetARP_ErrTxPktDiscardedCtr; /* Nbr tx msgs discarded. */
|
||
|
||
|
||
#if ((NET_ERR_CFG_ARG_CHK_EXT_EN == DEF_ENABLED) || \
|
||
(NET_ERR_CFG_ARG_CHK_DBG_EN == DEF_ENABLED))
|
||
NET_ARP_EXT NET_CTR NetARP_ErrNullPtrCtr; /* Nbr null ARP ptr accesses. */
|
||
#endif
|
||
|
||
#if (NET_ERR_CFG_ARG_CHK_EXT_EN == DEF_ENABLED)
|
||
NET_ARP_EXT NET_CTR NetARP_ErrInvalidAddrLenHW_Ctr; /* Nbr accesses with invalid hw addr len. */
|
||
NET_ARP_EXT NET_CTR NetARP_ErrInvalidAddrLenProtocolCtr; /* Nbr accesses with invalid protocol addr len. */
|
||
#endif
|
||
|
||
#if (NET_ERR_CFG_ARG_CHK_DBG_EN == DEF_ENABLED)
|
||
NET_ARP_EXT NET_CTR NetARP_ErrNotUsedCtr; /* Nbr unused ARP cache accesses. */
|
||
|
||
NET_ARP_EXT NET_CTR NetARP_ErrInvalidTypeCtr; /* Nbr ARP cache invalid type accesses. */
|
||
|
||
|
||
NET_ARP_EXT NET_CTR NetARP_ErrRxInvalidBufIxCtr; /* Nbr rx pkts with invalid buf ix. */
|
||
|
||
NET_ARP_EXT NET_CTR NetARP_ErrTxHdrOpCodeCtr; /* Nbr tx msgs with invalid op code. */
|
||
#endif
|
||
|
||
#endif
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* FUNCTION PROTOTYPES
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
void NetARP_Init (void);
|
||
|
||
|
||
/* ---------- CFG FNCTS ----------- */
|
||
CPU_BOOLEAN NetARP_CfgCacheTimeout (CPU_INT16U timeout_sec);
|
||
|
||
CPU_BOOLEAN NetARP_CfgCacheAccessedTh (CPU_INT16U nbr_access);
|
||
|
||
CPU_BOOLEAN NetARP_CfgReqTimeout (CPU_INT08U timeout_sec);
|
||
|
||
CPU_BOOLEAN NetARP_CfgReqMaxRetries (CPU_INT08U max_nbr_retries);
|
||
|
||
|
||
/* --------- STATUS FNCTS --------- */
|
||
void NetARP_ProbeAddrOnNet (CPU_INT08U *paddr_protocol,
|
||
NET_ARP_ADDR_LEN addr_protocol_len,
|
||
NET_ERR *perr);
|
||
|
||
|
||
/* ----------- RX FNCTS ----------- */
|
||
void NetARP_Rx (NET_BUF *pbuf,
|
||
NET_ERR *perr);
|
||
|
||
|
||
/* ------- ARP CACHE FNCTS -------- */
|
||
void NetARP_CacheHandler (NET_BUF *pbuf,
|
||
NET_ERR *perr);
|
||
|
||
/* ---- ARP CACHE STATUS FNCTS ---- */
|
||
CPU_INT08U NetARP_CacheCalcStat (void);
|
||
|
||
|
||
NET_ARP_ADDR_LEN NetARP_CacheGetAddrHW (CPU_INT08U *paddr_hw,
|
||
NET_ARP_ADDR_LEN addr_hw_len_buf,
|
||
CPU_INT08U *paddr_protocol,
|
||
NET_ARP_ADDR_LEN addr_protocol_len,
|
||
NET_ERR *perr);
|
||
|
||
|
||
NET_STAT_POOL NetARP_CachePoolStatGet (void);
|
||
|
||
void NetARP_CachePoolStatResetMaxUsed(void);
|
||
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* FUNCTION PROTOTYPES
|
||
* DEFINED IN NETWORK INTERFACE LAYER & NETWORK PROTOCOL LAYER
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
CPU_INT08U *NetARP_GetHostAddrPtrHW (void);
|
||
|
||
CPU_INT08U *NetARP_GetHostAddrPtrProtocol (void);
|
||
|
||
|
||
CPU_BOOLEAN NetARP_IsValidAddrHW (CPU_INT08U *paddr_hw);
|
||
|
||
CPU_BOOLEAN NetARP_IsValidAddrProtocol (CPU_INT08U *paddr_protocol);
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* CONFIGURATION ERRORS
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#ifndef NET_ARP_CFG_HW_TYPE
|
||
#error "NET_ARP_CFG_HW_TYPE not #define'd in 'net_cfg.h'"
|
||
#error " [MUST be NET_ARP_HW_TYPE_ETHER] "
|
||
#elif (NET_ARP_CFG_HW_TYPE != NET_ARP_HW_TYPE_ETHER)
|
||
#error "NET_ARP_CFG_HW_TYPE illegally #define'd in 'net_cfg.h'"
|
||
#error " [MUST be NET_ARP_HW_TYPE_ETHER] "
|
||
|
||
#else
|
||
/* Correctly configured in 'net_cfg_net.h'; DO NOT MODIFY. */
|
||
#ifndef NET_ARP_CFG_HW_ADDR_LEN
|
||
#error "NET_ARP_CFG_HW_ADDR_LEN not #define'd in 'net_cfg_net.h'"
|
||
#error " [MUST be NET_ARP_HW_ADDR_LEN_ETHER] "
|
||
#elif (NET_ARP_CFG_HW_ADDR_LEN != NET_ARP_HW_ADDR_LEN_ETHER)
|
||
#error "NET_ARP_CFG_HW_ADDR_LEN illegally #define'd in 'net_cfg_net.h'"
|
||
#error " [MUST be NET_ARP_HW_ADDR_LEN_ETHER] "
|
||
#endif
|
||
|
||
#endif
|
||
|
||
|
||
|
||
#ifndef NET_ARP_CFG_PROTOCOL_TYPE
|
||
#error "NET_ARP_CFG_PROTOCOL_TYPE not #define'd in 'net_cfg.h' "
|
||
#error " [MUST be NET_ARP_PROTOCOL_TYPE_IP_V4]"
|
||
#elif (NET_ARP_CFG_PROTOCOL_TYPE != NET_ARP_PROTOCOL_TYPE_IP_V4)
|
||
#error "NET_ARP_CFG_PROTOCOL_TYPE illegally #define'd in 'net_cfg.h' "
|
||
#error " [MUST be NET_ARP_PROTOCOL_TYPE_IP_V4]"
|
||
|
||
#else
|
||
/* Correctly configured in 'net_cfg_net.h'; DO NOT MODIFY. */
|
||
#ifndef NET_ARP_CFG_PROTOCOL_ADDR_LEN
|
||
#error "NET_ARP_CFG_PROTOCOL_ADDR_LEN not #define'd in 'net_cfg_net.h' "
|
||
#error " [MUST be NET_ARP_PROTOCOL_ADDR_LEN_IP_V4]"
|
||
#elif (NET_ARP_CFG_PROTOCOL_ADDR_LEN != NET_ARP_PROTOCOL_ADDR_LEN_IP_V4)
|
||
#error "NET_ARP_CFG_PROTOCOL_ADDR_LEN illegally #define'd in 'net_cfg_net.h' "
|
||
#error " [MUST be NET_ARP_PROTOCOL_ADDR_LEN_IP_V4]"
|
||
#endif
|
||
|
||
#endif
|
||
|
||
|
||
|
||
|
||
#ifndef NET_ARP_CFG_NBR_CACHE
|
||
#error "NET_ARP_CFG_NBR_CACHE not #define'd in 'net_cfg.h'"
|
||
#error " [MUST be > 0] "
|
||
#error " [ && < 65536] "
|
||
/* See 'ARP CACHE QUANTITY DATA TYPE'. */
|
||
#elif ((NET_ARP_CFG_NBR_CACHE < 1) || \
|
||
(NET_ARP_CFG_NBR_CACHE > DEF_INT_16U_MAX_VAL))
|
||
#error "NET_ARP_CFG_NBR_CACHE illegally #define'd in 'net_cfg.h'"
|
||
#error " [MUST be > 0] "
|
||
#error " [ && < 65536] "
|
||
#endif
|
||
|
||
|
||
|
||
|
||
#ifndef NET_ARP_CFG_ADDR_FLTR_EN
|
||
#error "NET_ARP_CFG_ADDR_FLTR_EN not #define'd in 'net_cfg.h'"
|
||
#error " [MUST be DEF_DISABLED] "
|
||
#error " [ || DEF_ENABLED ] "
|
||
#elif ((NET_ARP_CFG_ADDR_FLTR_EN != DEF_DISABLED) && \
|
||
(NET_ARP_CFG_ADDR_FLTR_EN != DEF_ENABLED ))
|
||
#error "NET_ARP_CFG_ADDR_FLTR_EN illegally #define'd in 'net_cfg.h'"
|
||
#error " [MUST be DEF_DISABLED] "
|
||
#error " [ || DEF_ENABLED ] "
|
||
#endif
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* MODULE END
|
||
*
|
||
* Note(s) : (1) See 'MODULE Note #1'.
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#endif /* End of ARP module include (see Note #1). */
|
||
|