📄 arp.h
字号:
/*
* Copyright (c) 2003 Electric Application Laboratory of NAN KAI University
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
*
* Author: Li Zhanglin <wzzlin@nankai.edu.cn>
*
*/
/* arp */
//以太网目的地址 以太网源地址 帧类型 硬件类型 协议类型 硬件地址长度 协议地址长度
//操作方式 发送端以太网地址 发送端IP地址 目的以太网地址 目的IP地址
// 以太网首部28字节ARP请求/应答
/* arppacket->HardwareType */
#define ARP_HARDWARE_TYPE_ETHER 0x0001 //硬件类型
/* arppacket->ProtocolType */
#define ARP_PROTOCOL_TYPE_IP 0x0800 //协议类型
#define ARP_HARDWARE_ADDR_LEN_ETHER ETHER_ADDR_LEN //硬件地址长度
#define ARP_PROTOCOL_ADDR_LEN_IP sizeof(IP_ADDR) //协议地址长度
/* arppacket->type */ //操作方式
#define ARP_TYPE_ARP_REQUEST 0x0001 //请求ARP
#define ARP_TYPE_ARP_REPLY 0x0002 //回应ARP
#define ARP_TYPE_RARP_REQUEST 0x0003 //请求RARP
#define ARP_TYPE_RARP_REPLY 0x0004 //回应RARP
#define ARP_ENTRY_MAX_NUM 4 /* must <= 255 */
#define ARP_ENTRY_TIME_OUT 0xFFFF /* the time for refresh a entry */
/* arp entry */
struct SARPEntry
{
IP_ADDR IPAddr;
BYTE EtherAddr[ETHER_ADDR_LEN];
/* decrease every time trick. when it hit to 0,
remove it from arp entry tabel. if time = 0 indicate
this entry is invalid*/
WORD time;
};
/* arp packet struct */
struct SARPPacket
{
/* header */
WORD HardwareType;
WORD ProtocolType;
BYTE HardWareAddrLen;
BYTE ProtocolAddrLen;
WORD type; /* refer to arp type */
/* arp content */
BYTE EtherScrAddr[ETHER_ADDR_LEN];
IP_ADDR IPScrAddr;
BYTE EtherDestAddr[ETHER_ADDR_LEN];
IP_ADDR IPDestAddr;
};
void ARPInit() REENTRANT_MUL;
struct SMemHead DT_XDATA * ARPQuery(struct SNetIf DT_XDATA *NetIf,IP_ADDR DestIP) REENTRANT_SIG;
struct SMemHead DT_XDATA *ARPInput(struct SMemHead DT_XDATA *MemHead, struct SNetIf DT_XDATA *NetIf) REENTRANT_MUL;
void ARPAddEntry(struct SARPPacket DT_XDATA *ARPPacket) REENTRANT_MUL;
BOOL ARPFind(BYTE EtherAddr[],IP_ADDR IPAddr) REENTRANT_SIG;
void ARPTimer() REENTRANT_MUL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -