Use SIOCxARP instead of libnl for Linux ARP stuff (WIP)
This commit is contained in:
parent
aaaa05d658
commit
f6a08220f1
1 changed files with 28 additions and 0 deletions
28
ethsock.c
28
ethsock.c
|
|
@ -253,6 +253,33 @@ out:
|
||||||
|
|
||||||
static bool intf_add_del_arp(const char *intf, uint32_t ipaddr, uint8_t *hwaddr, bool add)
|
static bool intf_add_del_arp(const char *intf, uint32_t ipaddr, uint8_t *hwaddr, bool add)
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
|
struct arpreq arp;
|
||||||
|
memset(&arp, 0, sizeof(arp));
|
||||||
|
arp.arp_ha.sa_family = ARPHRD_ETHER;
|
||||||
|
memcpy(&arp.arp_ha.sa_data, hwaddr, 6);
|
||||||
|
arp.arp_flags = ATF_PERM | ATF_COM;
|
||||||
|
|
||||||
|
struct sockaddr_in *in = (struct sockaddr_in*)&req.arp_pa;
|
||||||
|
in->sin_addr.s_addr = htonl(ipaddr);
|
||||||
|
in->sin_family = AF_INET;
|
||||||
|
|
||||||
|
int fd = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
|
if (fd < 0) {
|
||||||
|
perror("socket");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ret = true;
|
||||||
|
|
||||||
|
if (ioctl(fd, add ? SIOCSARP : SIOCDARP, &req) < 0) {
|
||||||
|
perror(add ? "ioctl(SIOCSARP)" : "ioctl(SIOCDARP");
|
||||||
|
ret = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
close(fd);
|
||||||
|
return ret;
|
||||||
|
#else
|
||||||
struct nl_sock *sk;
|
struct nl_sock *sk;
|
||||||
struct rtnl_neigh *neigh;
|
struct rtnl_neigh *neigh;
|
||||||
struct nl_addr *mac, *ip;
|
struct nl_addr *mac, *ip;
|
||||||
|
|
@ -303,6 +330,7 @@ out:
|
||||||
nl_socket_free(sk);
|
nl_socket_free(sk);
|
||||||
|
|
||||||
return !err;
|
return !err;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue