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

📄 if_ether.h

📁 Details description of Free BSD network source code.Those documents have explained each line of code
💻 H
字号:
/* *  略过BSD版权 * *	@(#)if_ether.h	8.3 (Berkeley) 5/2/95 * $FreeBSD: src/sys/netinet/if_ether.h,v 1.24 1999/12/29 04:40:58 peter Exp $ */#ifndef _NETINET_IF_ETHER_H_#define _NETINET_IF_ETHER_H_#include <net/ethernet.h>#include <net/if_arp.h>/* 映射一以太网络地址到IP多播地址的宏,以太网地址高25位是静态分配的,低23位是来之于IP地址的低位 */#define ETHER_MAP_IP_MULTICAST(ipaddr, enaddr) \	/* struct in_addr *ipaddr; 是一IP地址结构*/ \	/* u_char enaddr[ETHER_ADDR_LEN];	 以太网的硬件地址  */ \{ \	(enaddr)[0] = 0x01; \	(enaddr)[1] = 0x00; \	(enaddr)[2] = 0x5e; \	(enaddr)[3] = ((u_char *)ipaddr)[1] & 0x7f; \	(enaddr)[4] = ((u_char *)ipaddr)[2]; \	(enaddr)[5] = ((u_char *)ipaddr)[3]; \}/* * IPV6的映射方法 */#define ETHER_MAP_IPV6_MULTICAST(ip6addr, enaddr)			\/* struct	in6_addr *ip6addr; */					\/* u_char	enaddr[ETHER_ADDR_LEN]; */				\{                                                                       \	(enaddr)[0] = 0x33;						\	(enaddr)[1] = 0x33;						\	(enaddr)[2] = ((u_char *)ip6addr)[12];				\	(enaddr)[3] = ((u_char *)ip6addr)[13];				\	(enaddr)[4] = ((u_char *)ip6addr)[14];				\	(enaddr)[5] = ((u_char *)ip6addr)[15];				\}/* 以太网地址解析协议(ARP) * RFC 826有该协议的描述 */struct	ether_arp {	struct	arphdr ea_hdr;	/* 固定大小的头 *//*以下是对arphdr结构的描述struct	arphdr {	u_short	ar_hrd;		 格式化的硬件地址 #define ARPHRD_ETHER 	1	以太网硬件地址格式 #define ARPHRD_IEEE802	6	令牌环硬件地址格式 #define ARPHRD_FRELAY 	15	帧中继硬件地址格式 	u_short	ar_pro;		    格式化的协议地址 	u_char	ar_hln;		    硬件地址长度 	u_char	ar_pln;		    协议地址长度 	u_short	ar_op;		    以下几种之一(即该包的目的是用于请求或应答等)#define	ARPOP_REQUEST	1	请求解析地址 #define	ARPOP_REPLY	2	    回应前一个请求 #define	ARPOP_REVREQUEST 3	请求协议地址给硬件 #define	ARPOP_REVREPLY	4	回应给协议地址 #define ARPOP_INVREQUEST 8 	请求等同的标识 #define ARPOP_INVREPLY	9	回应等同的标识   保留域的大小是可变的,依照上面的大小. #ifdef COMMENT_ONLY	u_char	ar_sha[];	/* 发送者的硬件地址 	u_char	ar_spa[];	/* 发送者的协议地址 	u_char	ar_tha[];	/* 目的地的硬件地址	u_char	ar_tpa[];	/* 目的地的协议地址 #endif};*/	u_char	arp_sha[ETHER_ADDR_LEN];	/* 发送者的硬件地址 */	u_char	arp_spa[4];	/* 发送者的协议地址 */	u_char	arp_tha[ETHER_ADDR_LEN];	/* 目的地的硬件地址 */	u_char	arp_tpa[4];	/* 目的地的协议地址 */};#define	arp_hrd	ea_hdr.ar_hrd#define	arp_pro	ea_hdr.ar_pro#define	arp_hln	ea_hdr.ar_hln#define	arp_pln	ea_hdr.ar_pln#define	arp_op	ea_hdr.ar_opstruct sockaddr_inarp {	u_char	sin_len;	u_char	sin_family;	u_short sin_port;	struct	in_addr sin_addr;	struct	in_addr sin_srcaddr;	u_short	sin_tos;	u_short	sin_other;#define SIN_PROXY 1};/* * IP 和 ethernet 特定的路由的标记 */#define	RTF_USETRAILERS	RTF_PROTO1	/* 使用追踪者 */#define RTF_ANNOUNCE	RTF_PROTO2	/* 宣布一新的ARP更新 */#ifdef	_KERNELextern u_char	ether_ipmulticast_min[ETHER_ADDR_LEN];extern u_char	ether_ipmulticast_max[ETHER_ADDR_LEN];extern struct	ifqueue arpintrq; /*arp的对列,对列的成员是mbuf链*/int	arpresolve __P((struct arpcom *, struct rtentry *, struct mbuf *,			struct sockaddr *, u_char *, struct rtentry *));/*arp地址解释函数*/void	arp_ifinit __P((struct arpcom *, struct ifaddr *));/*初始化函数*/#endif#endif

⌨️ 快捷键说明

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