⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arp.h

📁 linux下基于c++的处理器仿真平台。具有处理器流水线
💻 H
字号:
/* * arp.h *  * Address Resolution Protocol. * RFC 826 * * Copyright (c) 2000 Dug Song <dugsong@monkey.org> * * $Id: arp.h,v 1.12 2003/03/16 17:39:17 dugsong Exp $ */#ifndef DNET_ARP_H#define DNET_ARP_H#define ARP_HDR_LEN	8	/* base ARP header length */#define ARP_ETHIP_LEN	20	/* base ARP message length */#ifndef __GNUC__# define __attribute__(x)# pragma pack(1)#endif/* * ARP header */struct arp_hdr {	uint16_t	ar_hrd;	/* format of hardware address */	uint16_t	ar_pro;	/* format of protocol address */	uint8_t		ar_hln;	/* length of hardware address (ETH_ADDR_LEN) */	uint8_t		ar_pln;	/* length of protocol address (IP_ADDR_LEN) */	uint16_t	ar_op;	/* operation */};/* * Hardware address format */#define ARP_HRD_ETH 	0x0001	/* ethernet hardware */#define ARP_HRD_IEEE802	0x0006	/* IEEE 802 hardware *//* * Protocol address format */#define ARP_PRO_IP	0x0800	/* IP protocol *//* * ARP operation */#define	ARP_OP_REQUEST		1	/* request to resolve ha given pa */#define	ARP_OP_REPLY		2	/* response giving hardware address */#define	ARP_OP_REVREQUEST	3	/* request to resolve pa given ha */#define	ARP_OP_REVREPLY		4	/* response giving protocol address *//* * Ethernet/IP ARP message */struct arp_ethip {	uint8_t		ar_sha[ETH_ADDR_LEN];	/* sender hardware address */	uint8_t		ar_spa[IP_ADDR_LEN];	/* sender protocol address */	uint8_t		ar_tha[ETH_ADDR_LEN];	/* target hardware address */	uint8_t		ar_tpa[IP_ADDR_LEN];	/* target protocol address */};/* * ARP cache entry */struct arp_entry {	struct addr	arp_pa;			/* protocol address */	struct addr	arp_ha;			/* hardware address */};#ifndef __GNUC__# pragma pack()#endif#define arp_pack_hdr_ethip(hdr, op, sha, spa, tha, tpa) do {	\	struct arp_hdr *pack_arp_p = (struct arp_hdr *)(hdr);	\	struct arp_ethip *pack_ethip_p = (struct arp_ethip *)	\		((uint8_t *)(hdr) + ARP_HDR_LEN);		\	pack_arp_p->ar_hrd = htons(ARP_HRD_ETH);		\	pack_arp_p->ar_pro = htons(ARP_PRO_IP);			\	pack_arp_p->ar_hln = ETH_ADDR_LEN;			\	pack_arp_p->ar_pln = IP_ADDR_LEN;			\	pack_arp_p->ar_op = htons(op);				\	memmove(pack_ethip_p->ar_sha, &(sha), ETH_ADDR_LEN);	\	memmove(pack_ethip_p->ar_spa, &(spa), IP_ADDR_LEN);	\	memmove(pack_ethip_p->ar_tha, &(tha), ETH_ADDR_LEN);	\	memmove(pack_ethip_p->ar_tpa, &(tpa), IP_ADDR_LEN);	\} while (0)typedef struct arp_handle arp_t;typedef int (*arp_handler)(const struct arp_entry *entry, void *arg);__BEGIN_DECLSarp_t	*arp_open(void);int	 arp_add(arp_t *arp, const struct arp_entry *entry);int	 arp_delete(arp_t *arp, const struct arp_entry *entry);int	 arp_get(arp_t *arp, struct arp_entry *entry);int	 arp_loop(arp_t *arp, arp_handler callback, void *arg);arp_t	*arp_close(arp_t *arp);__END_DECLS#endif /* DNET_ARP_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -