📄 net_if.h
字号:
* codes to enforce ANSI-compliance of 31-character symbol length uniqueness.
*
* (2) Default SNAP 'Organizational Unique Identifier' (OUI) IEEE 802.2 frame type is ALWAYS
* Ethernet frame type (see 'IEEE 802 HEADER / FRAME Note #1').
*********************************************************************************************************
*/
#define NET_IF_IEEE_802_FRAME_LEN_MAX (NET_IF_MTU_IEEE_802 + NET_IF_HDR_SIZE_BASE_IEEE_802)
/* ------- IEEE 802.2 LOGICAL LINK CONTROL (LLC) ------ */
#define NET_IF_IEEE_802_LLC_DSAP 0xAA
#define NET_IF_IEEE_802_LLC_SSAP 0xAA
#define NET_IF_IEEE_802_LLC_CTRL 0x03
/* --- IEEE 802.2 SUB-NETWORK ACCESS PROTOCOL (SNAP) -- */
#define NET_IF_IEEE_802_SNAP_CODE_SIZE 3 /* 3-octet SNAP org code (see Note #1). */
#define NET_IF_IEEE_802_SNAP_CODE_ETHER 0x000000 /* Dflt SNAP org code (Ether) [see Note #2]. */
#define NET_IF_IEEE_802_SNAP_CODE_00 0x00 /* Dflt SNAP org code, Octet #00. */
#define NET_IF_IEEE_802_SNAP_CODE_01 0x00 /* Dflt SNAP org code, Octet #01. */
#define NET_IF_IEEE_802_SNAP_CODE_02 0x00 /* Dflt SNAP org code, Octet #02. */
#define NET_IF_IEEE_802_SNAP_TYPE_IP NET_IF_FRAME_ETHER_TYPE_IP
#define NET_IF_IEEE_802_SNAP_TYPE_ARP NET_IF_FRAME_ETHER_TYPE_ARP
/*$PAGE*/
/*
*********************************************************************************************************
* DATA TYPES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* NETWORK INTERFACE HEADER / FRAME DATA TYPES
*********************************************************************************************************
*/
/* ---------------------- NET IF HDR ---------------------- */
typedef struct net_if_hdr {
CPU_INT08U AddrDest[NET_IF_HDR_SIZE_ADDR]; /* Ethernet dest addr. */
CPU_INT08U AddrSrc[NET_IF_HDR_SIZE_ADDR]; /* Ethernet src addr. */
CPU_INT16U FrameType_Len; /* Demux Ethernet frame type vs. IEEE 802.3 frame len. */
} NET_IF_HDR;
/*
*********************************************************************************************************
* ETHERNET HEADER / FRAME DATA TYPES
*
* Note(s) : (1) Frame 'Data' buffer CANNOT be declared to force word-alignment. 'Data' buffer MUST immediately
* follow frame 'Hdr' since Ethernet frames are contiguous, non-aligned data packets.
*
* (2) 'Data' declared with 1 entry; prevents removal by compiler optimization.
*
* (3) Frame CRC's are computed/validated by NIC. NO software CRC is handled for receive or transmit.
*********************************************************************************************************
*/
/* ------------------ NET IF ETHER HDR -------------------- */
typedef struct net_if_hdr_ether {
CPU_INT08U AddrDest[NET_IF_HDR_SIZE_ADDR]; /* Ethernet dest addr. */
CPU_INT08U AddrSrc[NET_IF_HDR_SIZE_ADDR]; /* Ethernet src addr. */
CPU_INT16U FrameType; /* Ethernet frame type. */
} NET_IF_HDR_ETHER;
/* ------------------ NET IF ETHER FRAME ------------------ */
typedef struct net_if_frame_ether {
NET_IF_HDR_ETHER Hdr;
CPU_INT08U Data[1]; /* See Note #2. */
} NET_IF_FRAME_ETHER;
/*$PAGE*/
/*
*********************************************************************************************************
* IEEE 802 HEADER / FRAME DATA TYPES
*
* Note(s) : (1) Header 'SNAP_OrgCode' defines the SNAP 'Organizational Unique Identifier' (OUI). The OUI
* indicates the various organization/vendor/manufacturer with each organization then defining
* their respective frame types.
*
* However, the default SNAP OUI indicates Ethernet frame types & is ALWAYS used. ALL other
* OUI's are discarded as invalid.
*
* See also 'IEEE 802 DEFINES Notes #1 & #2'.
*
* (2) Frame 'Data' buffer CANNOT be declared to force word-alignment. 'Data' buffer MUST immediately
* follow frame 'Hdr' since Ethernet frames are contiguous, non-aligned data packets.
*
* (3) 'Data' declared with 1 entry; prevents removal by compiler optimization.
*
* (4) Frame CRC's are computed/validated by NIC. NO software CRC is handled for receive or transmit.
*********************************************************************************************************
*/
/* ------------------ NET IF IEEE 802 HDR ----------------- */
typedef struct net_if_hdr_ieee_802 {
CPU_INT08U AddrDest[NET_IF_HDR_SIZE_ADDR]; /* IEEE 802.3 dest addr. */
CPU_INT08U AddrSrc[NET_IF_HDR_SIZE_ADDR]; /* IEEE 802.3 src addr. */
CPU_INT16U FrameLen; /* IEEE 802.3 frame len. */
/* --------- IEEE 802.2 LOGICAL LINK CONTROL (LLC) -------- */
CPU_INT08U LLC_DSAP; /* Dest Serv Access Pt. */
CPU_INT08U LLC_SSAP; /* Src Serv Access Pt. */
CPU_INT08U LLC_Ctrl; /* Ctrl Field. */
/* ----- IEEE 802.2 SUB-NETWORK ACCESS PROTOCOL (SNAP) ---- */
CPU_INT08U SNAP_OrgCode[NET_IF_IEEE_802_SNAP_CODE_SIZE]; /* Org code (see Note #1). */
CPU_INT16U SNAP_FrameType; /* IEEE 802.2 frame type. */
} NET_IF_HDR_IEEE_802;
/* ----------------- NET IF IEEE 802 FRAME ---------------- */
typedef struct net_if_frame_ieee_802 {
NET_IF_HDR_IEEE_802 Hdr;
CPU_INT08U Data[1]; /* See Note #3. */
} NET_IF_FRAME_IEEE_802;
/*$PAGE*/
/*
*********************************************************************************************************
* GLOBAL VARIABLES
*********************************************************************************************************
*/
NET_IF_EXT CPU_INT08U NetIF_MAC_Addr[NET_IF_ADDR_SIZE]; /* NIC's MAC addr. */
NET_IF_EXT CPU_BOOLEAN NetIF_MAC_AddrValid; /* Indicates if valid NIC MAC addr avail. */
#if (NET_CTR_CFG_STAT_EN == DEF_ENABLED) /* ------------------- NET IF STATS ------------------- */
NET_IF_EXT NET_CTR NetIF_StatRxPktCtr; /* Nbr rx'd pkts. */
NET_IF_EXT NET_CTR NetIF_StatRxPktProcessedCtr; /* Nbr rx'd pkts delivered to supported protocols. */
NET_IF_EXT NET_CTR NetIF_StatRxPktBroadcastCtr; /* Nbr rx'd pkts broadcast to this dest. */
NET_IF_EXT NET_CTR NetIF_StatTxPktCtr; /* Nbr tx'd pkts. */
NET_IF_EXT NET_CTR NetIF_StatTxPktBroadcastCtr; /* Nbr rx'd pkts broadcast to multiple dest(s). */
#endif
#if (NET_CTR_CFG_ERR_EN == DEF_ENABLED) /* ------------------- NET IF ERRS -------------------- */
NET_IF_EXT NET_CTR NetIF_ErrNullPtrCtr; /* Nbr null IF ptr accesses. */
NET_IF_EXT NET_CTR NetIF_ErrInvalidProtocolCtr;
NET_IF_EXT NET_CTR NetIF_ErrRxInvalidFrameCtr; /* Nbr rx'd pkts with invalid frame. */
NET_IF_EXT NET_CTR NetIF_ErrRxInvalidAddrDestCtr; /* Nbr rx'd pkts with invalid dest addr. */
NET_IF_EXT NET_CTR NetIF_ErrRxInvalidAddrSrcCtr; /* Nbr rx'd pkts with invalid src addr. */
NET_IF_EXT NET_CTR NetIF_ErrRxPktDiscardedCtr; /* Nbr rx'd pkts discarded. */
NET_IF_EXT NET_CTR NetIF_ErrTxInvalidBufLenCtr;
NET_IF_EXT NET_CTR NetIF_ErrTxPktDiscardedCtr; /* Nbr tx pkts discarded. */
#if (NET_ERR_CFG_ARG_CHK_DBG_EN == DEF_ENABLED)
NET_IF_EXT NET_CTR NetIF_ErrRxInvalidBufIxCtr; /* Nbr rx pkts with invalid buf ix. */
NET_IF_EXT NET_CTR NetIF_ErrTxProtocolCtr;
NET_IF_EXT NET_CTR NetIF_ErrTxInvalidBufIxCtr; /* Nbr tx pkts with invalid buf ix. */
NET_IF_EXT NET_CTR NetIF_ErrTxHdrDataLenCtr;
#endif
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* FUNCTION PROTOTYPES
*********************************************************************************************************
*/
void NetIF_Init (NET_ERR *perr);
/* ------------------- STATUS FNCTS ------------------- */
void NetIF_MAC_AddrGet (CPU_INT08U *paddr,
NET_ERR *perr);
void NetIF_MAC_AddrSet (CPU_INT08U *paddr,
NET_ERR *perr);
CPU_BOOLEAN NetIF_IsValidPktSize(CPU_INT16U size); /* Validate an IF pkt size. */
CPU_BOOLEAN NetIF_IsValidAddrSrc(CPU_INT08U *paddr_src); /* Validate an IF src addr. */
/* --------------------- RX FNCTS --------------------- */
void NetIF_Rx (NET_BUF *pbuf,
NET_ERR *perr);
/* --------------------- TX FNCTS --------------------- */
void NetIF_Tx (NET_BUF *pbuf,
NET_ERR *perr);
void NetIF_TxPkt (NET_BUF *pbuf,
NET_ERR *perr);
void NetIF_TxPktDiscard (NET_BUF *pbuf,
NET_ERR *perr);
/*$PAGE*/
/*
*********************************************************************************************************
* CONFIGURATION ERRORS
*********************************************************************************************************
*/
#ifndef NET_IF_CFG_TYPE
#error "NET_IF_CFG_TYPE not #define'd in 'net_cfg.h'"
#error " [MUST be NET_IF_TYPE_ETHER] "
#elif (NET_IF_CFG_TYPE != NET_IF_TYPE_ETHER)
#error "NET_IF_CFG_TYPE illegally #define'd in 'net_cfg.h'"
#error " [MUST be NET_IF_TYPE_ETHER] "
#else
/* Correctly configured in 'net_cfg_net.h'; DO NOT MODIFY. */
#ifndef NET_IF_HDR_SIZE_MAX
#error "NET_IF_HDR_SIZE_MAX not #define'd in 'net_cfg_net.h' "
#error " [NET_IF_HDR_SIZE_MAX MUST be > 0]"
#elif (NET_IF_HDR_SIZE_MAX < 1)
#error "NET_IF_HDR_SIZE_MAX illegally #define'd in 'net_cfg_net.h' "
#error " [NET_IF_HDR_SIZE_MAX MUST be > 0]"
#endif
#endif
/* Correctly configured in this 'net_if.h'; DO NOT MODIFY. */
#ifndef NET_IF_FRAME_MIN_SIZE
#error "NET_IF_FRAME_MIN_SIZE not #define'd in 'net_if.h' "
#error " [NET_IF_FRAME_MIN_SIZE MUST be > ]"
#error " [NET_IF_HDR_SIZE_MAX ]"
#elif (NET_IF_FRAME_MIN_SIZE < NET_IF_HDR_SIZE_MAX)
#error "NET_IF_FRAME_MIN_SIZE illegally #define'd in 'net_if.h' "
#error " [NET_IF_FRAME_MIN_SIZE MUST be > ]"
#error " [NET_IF_HDR_SIZE_MAX ]"
#endif
#ifndef NET_IF_CFG_ADDR_FLTR_EN
#error "NET_IF_CFG_ADDR_FLTR_EN not #define'd in 'net_cfg.h'"
#error " [MUST be DEF_DISABLED] "
#error " [ || DEF_ENABLED ] "
#elif ((NET_IF_CFG_ADDR_FLTR_EN != DEF_DISABLED) && \
(NET_IF_CFG_ADDR_FLTR_EN != DEF_ENABLED ))
#error "NET_IF_CFG_ADDR_FLTR_EN illegally #define'd in 'net_cfg.h'"
#error " [MUST be DEF_DISABLED] "
#error " [ || DEF_ENABLED ] "
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -