Skip to content

Commit d95ed92

Browse files
ebiedermdavem330
authored andcommitted
af_packet: Teach to listen for multiple unicast addresses.
The the PACKET_ADD_MEMBERSHIP and the PACKET_DROP_MEMBERSHIP setsockopt calls for af_packet already has all of the infrastructure needed to subscribe to multiple mac addresses. All that is missing is a flag to say that the address we want to listen on is a unicast address. So introduce PACKET_MR_UNICAST and wire it up to dev_unicast_add and dev_unicast_delete. Additionally I noticed that errors from dev_mc_add were not propagated from packet_dev_mc so fix that. Signed-off-by: Eric W. Biederman <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent ca0f311 commit d95ed92

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

include/linux/if_packet.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,5 +145,6 @@ struct packet_mreq
145145
#define PACKET_MR_MULTICAST 0
146146
#define PACKET_MR_PROMISC 1
147147
#define PACKET_MR_ALLMULTI 2
148+
#define PACKET_MR_UNICAST 3
148149

149150
#endif

net/packet/af_packet.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1570,16 +1570,22 @@ static int packet_dev_mc(struct net_device *dev, struct packet_mclist *i,
15701570
switch (i->type) {
15711571
case PACKET_MR_MULTICAST:
15721572
if (what > 0)
1573-
dev_mc_add(dev, i->addr, i->alen, 0);
1573+
return dev_mc_add(dev, i->addr, i->alen, 0);
15741574
else
1575-
dev_mc_delete(dev, i->addr, i->alen, 0);
1575+
return dev_mc_delete(dev, i->addr, i->alen, 0);
15761576
break;
15771577
case PACKET_MR_PROMISC:
15781578
return dev_set_promiscuity(dev, what);
15791579
break;
15801580
case PACKET_MR_ALLMULTI:
15811581
return dev_set_allmulti(dev, what);
15821582
break;
1583+
case PACKET_MR_UNICAST:
1584+
if (what > 0)
1585+
return dev_unicast_add(dev, i->addr, i->alen);
1586+
else
1587+
return dev_unicast_delete(dev, i->addr, i->alen);
1588+
break;
15831589
default:;
15841590
}
15851591
return 0;

0 commit comments

Comments
 (0)