From 0cb90ab61d238148d56c788bbe64fa3120968435 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Wed, 6 Apr 2022 23:14:59 +0200 Subject: [PATCH] add promiscuous mode --- tr-bridge.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tr-bridge.c b/tr-bridge.c index a40bc6a..8f4062f 100644 --- a/tr-bridge.c +++ b/tr-bridge.c @@ -73,6 +73,23 @@ static int devname2ifindex(const char *ifname) 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) { struct sockaddr_ll addr; @@ -101,6 +118,12 @@ static int open_packet_socket(int ifindex) return rc; } + rc = enable_promisc(fd, ifindex); + if (rc < 0) { + close(fd); + return rc; + } + return fd; }