add promiscuous mode
This commit is contained in:
parent
580f923b48
commit
0cb90ab61d
23
tr-bridge.c
23
tr-bridge.c
|
@ -73,6 +73,23 @@ static int devname2ifindex(const char *ifname)
|
||||||
return ifr.ifr_ifindex;
|
return ifr.ifr_ifindex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int enable_promisc(int sk, int ifindex)
|
||||||
|
{
|
||||||
|
struct packet_mreq mreq = {0};
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
mreq.mr_ifindex = ifindex;
|
||||||
|
mreq.mr_type = PACKET_MR_PROMISC;
|
||||||
|
|
||||||
|
rc = setsockopt(sk, SOL_PACKET, PACKET_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
|
||||||
|
if (rc < 0) {
|
||||||
|
fprintf(stderr, "Unable to set promiscuous mode: %s\n", strerror(errno));
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int open_packet_socket(int ifindex)
|
static int open_packet_socket(int ifindex)
|
||||||
{
|
{
|
||||||
struct sockaddr_ll addr;
|
struct sockaddr_ll addr;
|
||||||
|
@ -101,6 +118,12 @@ static int open_packet_socket(int ifindex)
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rc = enable_promisc(fd, ifindex);
|
||||||
|
if (rc < 0) {
|
||||||
|
close(fd);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue