Print explicit warning messages when ARP packets fail in arp_validate().

This commit is contained in:
Nicholas J. Kain 2011-06-02 10:41:34 -04:00
parent 8ede75738f
commit 927ed47b58

View File

@ -1,5 +1,5 @@
/* arp.c - arp ping checking /* arp.c - arp ping checking
* Time-stamp: <2011-05-31 11:24:14 njk> * Time-stamp: <2011-06-02 10:40:49 njk>
* *
* Copyright 2010-2011 Nicholas J. Kain <njkain@gmail.com> * Copyright 2010-2011 Nicholas J. Kain <njkain@gmail.com>
* *
@ -233,22 +233,38 @@ static int arp_validate(struct arpMsg *am)
{ {
if (!am) if (!am)
return 0; return 0;
if (am->h_proto != htons(ETH_P_ARP)) if (am->h_proto != htons(ETH_P_ARP)) {
log_warning("arp: IP header does not indicate ARP protocol");
return 0; return 0;
if (am->htype != htons(ARPHRD_ETHER)) }
if (am->htype != htons(ARPHRD_ETHER)) {
log_warning("arp: ARP hardware type field invalid");
return 0; return 0;
if (am->ptype != htons(ETH_P_IP)) }
if (am->ptype != htons(ETH_P_IP)) {
log_warning("arp: ARP protocol type field invalid");
return 0; return 0;
if (am->hlen != 6) }
if (am->hlen != 6) {
log_warning("arp: ARP hardware address length invalid");
return 0; return 0;
if (am->plen != 4) }
if (am->plen != 4) {
log_warning("arp: ARP protocol address length invalid");
return 0; return 0;
if (am->operation != htons(ARPOP_REPLY)) }
if (am->operation != htons(ARPOP_REPLY)) {
log_warning("arp: ARP operation type is not 'reply'");
return 0; return 0;
if (memcmp(am->h_dest, client_config.arp, 6)) }
if (memcmp(am->h_dest, client_config.arp, 6)) {
log_warning("arp: Ethernet destination does not equal our MAC");
return 0; return 0;
if (memcmp(am->dmac, client_config.arp, 6)) }
if (memcmp(am->dmac, client_config.arp, 6)) {
log_warning("arp: ARP destination does not equal our MAC");
return 0; return 0;
}
return 1; return 1;
} }