/*-------------------------------------------------------------*/ /*************************************************************** * Currently, only Ethernet-IPv4 is implemented as ARP. * ***************************************************************/ /*-------------------------------------------------------------*/ /* ARP header */ typedef enum { NETWIB_ARPHDROP_ARPREQ = 1, NETWIB_ARPHDROP_ARPREP = 2, NETWIB_ARPHDROP_RARPREQ = 3, NETWIB_ARPHDROP_RARPREP = 4 } netwib_arphdrop; typedef struct { netwib_arphdrop op; netwib_eth ethsrc; netwib_ip ipsrc; netwib_eth ethdst; netwib_ip ipdst; } netwib_arphdr; typedef const netwib_arphdr netwib_constarphdr; #define NETWIB_ARPHDR_LEN 28 /*-------------------------------------------------------------*/ /* Name : netwib_arphdr_initdefault Description : Initialize a netwib_arphdr with default values. Input parameter(s) : Input/output parameter(s) : Output parameter(s) : *parphdr : netwib_arphdr to initialize Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_arphdr_initdefault(netwib_arphdr *parphdr); /*-------------------------------------------------------------*/ /* Name : netwib_pkt_append_arphdr Description : Initialize physical data from a netwib_arphdr. Input parameter(s) : *parphdr : netwib_arphdr Input/output parameter(s) : *ppht : buffer to initialize Output parameter(s) : Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_pkt_append_arphdr(netwib_constarphdr *parphdr, netwib_buf *ppkt); netwib_err netwib_pkt_prepend_arphdr(netwib_constarphdr *parphdr, netwib_buf *ppkt); /*-------------------------------------------------------------*/ /* Name : netwib_pkt_decode_arphdr Description : Decode a netwib_arphdr from physical data. Input parameter(s) : *ppkt : buffer containing physical data Input/output parameter(s) : Output parameter(s) : *parphdr : netwib_arphdr contained in pkt *pskipsize : size to use to skip this header Normal return values : NETWIB_ERR_OK : ok NETWIB_ERR_NOTCONVERTED : pkt could not be decoded NETWIB_ERR_DATAMISSING : pkt was not big enough */ netwib_err netwib_pkt_decode_arphdr(netwib_constbuf *ppkt, netwib_arphdr *parphdr, netwib_uint32 *pskipsize);