CMP EMBEDDED.COM

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

Listing 1: A function to send ARP request and reply packets

#define ETHERNET 1
#define
PROTO_IP 0x800
#define PROTO_ARP 0x806
#define HW_ADDR_LEN 6
#define IP_ADDR_LEN 4
#define ARP_REQUEST 1
#define ARP_REPLY 2
#define ARP_PACKET_LEN sizeof(NetArpPkt)
const INT8U broadcast[HW_ADDR_LEN] = { 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF };
int
NetArpSnd(INT16U operation, INT8U * target_hw_addr, INT32U target_ip_addr)
{
NetArpPkt * pArpPkt;
/*
* Allocate a network buffer.
*/
pArpPkt = (NetArpPkt *) NETMemGet(NET_ARP, ARP_PACKET_LEN);
/*
* Fill in the ARP
header fields.
*/
pArpPkt->arpHdr.operation = htons(operation); 
pArpPkt->arpHdr.hw_type = htons(ETHERNET);
pArpPkt->arpHdr.prot_type = htons(PROTO_IP); 
pArpPkt->arpHdr.hw_len = HW_ADDR_LEN; 
pArpPkt->arpHdr.prot_len = IP_ADDR_LEN;
/*
* Fill in the address fields.
*/
memcpy(pArpPkt->target_hw_addr, target_hw_addr, HW_ADDR_LEN);
pArpPkt->target_ip_addr = target_ip_addr;
memcpy(pArpPkt->sender_hw_addr, local_hw_addr(), HW_ADDR_LEN);
pArpPkt->sender_ip_addr = local_ip_addr();
/*
* Broadcast the request over the network.
*/
return (NetPhySnd(broadcast, htons(PROTO_ARP), (unsigned char *) pArpPkt, 
ARP_PACKET_LEN));
} /* NetArpSnd() */

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

Browse all jobs

SPONSOR
RECENT JOB POSTINGS





 :