Networking Forums

Networking Forums > Computer Networking > Linux Networking > code example for set a ARP entry (error, )

Reply
Thread Tools Display Modes

code example for set a ARP entry (error, )

 
 
Jesse Song
Guest
Posts: n/a

 
      03-21-2006, 06:48 AM
I try to write some code to set an ARP entry.

but the code at ioctl. alert a error: invalid argument.

WHY???


int setMac(char *dev, unsigned long ip, unsigned char *mac)
{
struct sockaddr addr;
struct sockaddr hw_addr;
struct arpreq req;
int sockfd, i;

/* default Mac to zero, in case we return an error */
memset(mac, '\0', 6);

memset(&addr, '\0', sizeof(addr));
addr.sa_family = AF_INET;
memcpy(&addr.sa_data[2], &ip, 4);

memset(&hw_addr, '\0', sizeof(hw_addr));
/*hw_addr.sa_family = ARPHRD_ETHER;*/
memcpy(hw_addr.sa_data, mac, 6);

memset(&req, '\0', sizeof(req));
memcpy(&req.arp_pa, &addr, sizeof(addr));
memcpy(&req.arp_dev[0], dev, sizeof(req.arp_dev));
memcpy(&req.arp_ha, &hw_addr, sizeof(hw_addr));

if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
{
printf("socket\n");
return (-1);
}

/* try to get an ARP mapping (if available)*/
if (ioctl(sockfd, SIOCSARP, (char *) &req) < 0)
{
printf("ioctl error:%s\n", strerror(errno));
close(sockfd);
return (-1);
}

close(sockfd);
return 0;
}


 
Reply With Quote
 
 
 
 
Jesse Song
Guest
Posts: n/a

 
      03-21-2006, 07:03 AM
i solve it.

in the code.

req must designated ARP FALG.

req.arp_flags = ATF_PERM;


"Jesse Song" <(E-Mail Removed)> дÈëÏûÏ¢ÐÂÎÅ:dvocri$ps$(E-Mail Removed)...
>I try to write some code to set an ARP entry.
>
> but the code at ioctl. alert a error: invalid argument.
>
> WHY???
>
>
> int setMac(char *dev, unsigned long ip, unsigned char *mac)
> {
> struct sockaddr addr;
> struct sockaddr hw_addr;
> struct arpreq req;
> int sockfd, i;
>
> /* default Mac to zero, in case we return an error */
> memset(mac, '\0', 6);
>
> memset(&addr, '\0', sizeof(addr));
> addr.sa_family = AF_INET;
> memcpy(&addr.sa_data[2], &ip, 4);
>
> memset(&hw_addr, '\0', sizeof(hw_addr));
> /*hw_addr.sa_family = ARPHRD_ETHER;*/
> memcpy(hw_addr.sa_data, mac, 6);
>
> memset(&req, '\0', sizeof(req));
> memcpy(&req.arp_pa, &addr, sizeof(addr));
> memcpy(&req.arp_dev[0], dev, sizeof(req.arp_dev));
> memcpy(&req.arp_ha, &hw_addr, sizeof(hw_addr));
>
> if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
> {
> printf("socket\n");
> return (-1);
> }
>
> /* try to get an ARP mapping (if available)*/
> if (ioctl(sockfd, SIOCSARP, (char *) &req) < 0)
> {
> printf("ioctl error:%s\n", strerror(errno));
> close(sockfd);
> return (-1);
> }
>
> close(sockfd);
> return 0;
> }
>



 
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
OpenSuse 11.1 Kinternet error: "pppd[0] died: pppd options error (exit code 2) Trevor Linux Networking 4 04-22-2009 06:31 PM
rasdial vpn entry with credentials leads to remote access error 69 Carl Hoyer Windows Networking 2 03-19-2007 12:36 PM
Problem with net key entry...error message DoomRulz Wireless Networks 2 06-19-2006 03:03 AM
Error code 2 Randy Lundstedt Windows Networking 7 02-20-2004 06:26 AM
error code 10 Brian Windows Networking 0 01-03-2004 05:43 AM



1 2 3 4 5 6 7 8 9 10 11