Data Structure: ARP Packet

The ARP packet as coded in C:
struct arphdr  {
    unsigned short int ar_hrd;    /* Format of hardware address.  */
    unsigned short int ar_pro;    /* Format of protocol address.  */
    unsigned char ar_hln;         /* Length of hardware address.  */
    unsigned char ar_pln;         /* Length of protocol address.  */
    unsigned short int ar_op;     /* ARP opcode (command).  */
#if 0
    /* Ethernet looks like this : This part is variable sized however */
    unsigned char __ar_sha[ETH_ALEN];   /* Sender hardware address.  */
    unsigned char __ar_sip[4];          /* Sender IP address.  */
    unsigned char __ar_tha[ETH_ALEN];   /* Target hardware address.  */
    unsigned char __ar_tip[4];          /* Target IP address.  */
#endif
};