ARp頭的解釋

/*        註釋:xie_minix   */
/*        要了解ARP包,他的結構和一些常量你必須知道是什麼意思*/                               
#ifndef _NET_IF_ARP_H_
#define _NET_IF_ARP_H_

/*
 * 地址解釋協議.
 *
 * 查看 RFC 826 對該協議的描述.  ARP 包長度是變化的
 * 頭部(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 /* 發出請求解釋一IP地址 */
#define ARPOP_REPLY 2 /* 迴應上一個請求 */
#define ARPOP_REVREQUEST 3 /* 請求一IP地址(給出硬件地址,實際上是逆向地址解釋) */
#define ARPOP_REVREPLY 4 /* 迴應逆向地址解釋 */
#define ARPOP_INVREQUEST 8  /* 請求對方的ID */
#define ARPOP_INVREPLY 9 /* 迴應對方的ID */
/*
 * 下面的字段是可變長的,
 * 主要是依照上面給出的定義.
 */
#ifdef COMMENT_ONLY
u_char ar_sha[]; /* 發送者硬件地址 */
u_char ar_spa[]; /* 發送者協議地址 */
u_char ar_tha[]; /* 目的方硬件地址 */
u_char ar_tpa[]; /* 目的方協議地址*/
#endif
};

/*
 * ARP ioctl 請求
 */
struct arpreq {
struct sockaddr arp_pa; /* 協議地址 */
struct sockaddr arp_ha; /* 硬件地址 */
int arp_flags; /* 標識 */
};
/*  arp_flags 和 at_flags 域的值 */
#define ATF_INUSE 0x01 /* 入口在使用 */
#define ATF_COM 0x02 /* 完整的入口 (enaddr 有效) */
#define ATF_PERM 0x04 /* 持久的入口 */
#define ATF_PUBL 0x08 /* 發佈一入口 (迴應其他主機) */
#define ATF_USETRAILERS 0x10 /* 有追蹤請求 */

#ifdef _KERNEL
/*
 * 該結構是以太網設備驅動程序和ARP程序所共享. 
 */
struct arpcom {
/*
 *  ifnet 結構必須在此結構的第一個位置.
 */
struct  ifnet ac_if;
u_char ac_enaddr[6]; /* 以太網硬件地址*/
int ac_multicnt; /* 多播地址列表數 */
void *ac_netgraph; /* PPPoE(ADSL)的指針 */
};

extern u_char etherbroadcastaddr[6];
#endif

#endif /* !_NET_IF_ARP_H_ */
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章