aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/if_packet.h1
-rw-r--r--net/packet/af_packet.c10
2 files changed, 9 insertions, 2 deletions
diff --git a/include/linux/if_packet.h b/include/linux/if_packet.h
index 5b2badeb9497..dea7d6b7cf98 100644
--- a/include/linux/if_packet.h
+++ b/include/linux/if_packet.h
@@ -145,5 +145,6 @@ struct packet_mreq
145#define PACKET_MR_MULTICAST 0 145#define PACKET_MR_MULTICAST 0
146#define PACKET_MR_PROMISC 1 146#define PACKET_MR_PROMISC 1
147#define PACKET_MR_ALLMULTI 2 147#define PACKET_MR_ALLMULTI 2
148#define PACKET_MR_UNICAST 3
148 149
149#endif 150#endif
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
index 766e6b41f7ca..c7c5d524967e 100644
--- a/net/packet/af_packet.c
+++ b/net/packet/af_packet.c
@@ -1570,9 +1570,9 @@ static int packet_dev_mc(struct net_device *dev, struct packet_mclist *i,
1570 switch (i->type) { 1570 switch (i->type) {
1571 case PACKET_MR_MULTICAST: 1571 case PACKET_MR_MULTICAST:
1572 if (what > 0) 1572 if (what > 0)
1573 dev_mc_add(dev, i->addr, i->alen, 0); 1573 return dev_mc_add(dev, i->addr, i->alen, 0);
1574 else 1574 else
1575 dev_mc_delete(dev, i->addr, i->alen, 0); 1575 return dev_mc_delete(dev, i->addr, i->alen, 0);
1576 break; 1576 break;
1577 case PACKET_MR_PROMISC: 1577 case PACKET_MR_PROMISC:
1578 return dev_set_promiscuity(dev, what); 1578 return dev_set_promiscuity(dev, what);
@@ -1580,6 +1580,12 @@ static int packet_dev_mc(struct net_device *dev, struct packet_mclist *i,
1580 case PACKET_MR_ALLMULTI: 1580 case PACKET_MR_ALLMULTI:
1581 return dev_set_allmulti(dev, what); 1581 return dev_set_allmulti(dev, what);
1582 break; 1582 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;
1583 default:; 1589 default:;
1584 } 1590 }
1585 return 0; 1591 return 0;