CMP EMBEDDED.COM

Login | Register     Welcome Guest  
HOME DESIGN PRODUCTS COLUMNS E-LEARNING CONFERENCES CODE FORUMS/BLOGS NEWSLETTERS CONTACT FEATURES RSS RSS

Listing 2: A function to handle incoming ARP packets

int
NetArpRcv(int n, NetArpPkt * pArpPkt)
{
int retval
= NET_ERROR;
/*
* If the ARP packet is addressed to this system, process it.
*/
if ((pArpPkt->arpHdr.hw_type == htons(ETHERNET)) &&
(pArpPkt->arpHdr.prot_type == htons(PROTO_IP)) &&
(pArpPkt->target_ip_addr == local_ip_addr()))
{
/*
* Add or update the senderýs ARP cache entry.
*/
NetArpAddEntry(pArpPkt->sender_hw_addr, pArpPkt->sender_ip_addr);
/*
* Process the ARP message.
*/
switch
(ntohs(pArpPkt->arpHdr.operation))
{
case ARP_REQUEST:
/*
* Reply to the request.
*/
NetArpSnd(ARP_REPLY, pArpPkt->sender_hw_addr, pArpPkt->sender
_ip_addr);
retval = NET_SUCCESS;
break;
case ARP_REPLY:
/*
* We've already updated the ARP cache as necessary.
*/
retval = NET_SUCCESS;
break;
default:
/*
* Unsupported
operation (RARP?).
*/
retval = NET_ERROR;
break;
}
}
return (retval);
} /* NetArpRcv() */

Embedded.com Career Center
Looking for a new job?
SEARCH JOBS

Browse all jobs

SPONSOR
RECENT JOB POSTINGS





 :