どこを参照したか
FreeBSDソースの以下のファイル
ファイル名 |
概要 |
sys/net/if_arp.h |
arphdr構造体とかその辺がある |
sys/net/if_ethersubr.c |
Ethernetに関する処理がある |
sys/netinet/if_ether.c |
Ether,ARPに関する大事な実装 |
ARP処理部分の流れ
- init
- arpresolve
- arprequest
ARPでの代表的関数
関数名 |
概要 |
arprequest |
arpリクエストをブロードキャスト |
arpresolve |
名前解決を行う |
arpintr |
パケットがarpかを確認前 |
Glossary
よく使われる構造体
struct arphdr {
u_short ar_hrd; /* format of hardware address */
#define ARPHRD_ETHER 1 /* ethernet hardware format */
#define ARPHRD_IEEE802 6 /* token-ring hardware format */
#define ARPHRD_ARCNET 7 /* arcnet hardware format */
#define ARPHRD_FRELAY 15 /* frame relay hardware format */
#define ARPHRD_IEEE1394 24 /* firewire hardware format */
#define ARPHRD_INFINIBAND 32 /* infiniband hardware format */
u_short ar_pro; /* format of protocol address */
u_char ar_hln; /* length of hardware address */
u_char ar_pln; /* length of protocol address */
u_short ar_op; /* one of: */
#define ARPOP_REQUEST 1 /* request to resolve address */
#define ARPOP_REPLY 2 /* response to previous request */
#define ARPOP_REVREQUEST 3 /* request protocol address given hardware */
#define ARPOP_REVREPLY 4 /* response giving protocol address */
#define ARPOP_INVREQUEST 8 /* request to identify peer */
#define ARPOP_INVREPLY 9 /* response identifying peer */
/*
* The remaining fields are variable in size,
* according to the sizes above.
*/
#ifdef COMMENT_ONLY
u_char ar_sha[]; /* sender hardware address */
u_char ar_spa[]; /* sender protocol address */
u_char ar_tha[]; /* target hardware address */
u_char ar_tpa[]; /* target protocol address */
#endif
};