kni: support allmulticast mode set
[dpdk.git] / kernel / linux / kni / kni_net.c
index 7bd3a9f..f25b127 100644 (file)
@@ -617,18 +617,31 @@ kni_net_change_mtu(struct net_device *dev, int new_mtu)
 }
 
 static void
-kni_net_set_promiscusity(struct net_device *netdev, int flags)
+kni_net_change_rx_flags(struct net_device *netdev, int flags)
 {
        struct rte_kni_request req;
        struct kni_dev *kni = netdev_priv(netdev);
 
        memset(&req, 0, sizeof(req));
-       req.req_id = RTE_KNI_REQ_CHANGE_PROMISC;
 
-       if (netdev->flags & IFF_PROMISC)
-               req.promiscusity = 1;
-       else
-               req.promiscusity = 0;
+       if (flags & IFF_ALLMULTI) {
+               req.req_id = RTE_KNI_REQ_CHANGE_ALLMULTI;
+
+               if (netdev->flags & IFF_ALLMULTI)
+                       req.allmulti = 1;
+               else
+                       req.allmulti = 0;
+       }
+
+       if (flags & IFF_PROMISC) {
+               req.req_id = RTE_KNI_REQ_CHANGE_PROMISC;
+
+               if (netdev->flags & IFF_PROMISC)
+                       req.promiscusity = 1;
+               else
+                       req.promiscusity = 0;
+       }
+
        kni_net_process_request(kni, &req);
 }
 
@@ -731,7 +744,7 @@ static const struct net_device_ops kni_net_netdev_ops = {
        .ndo_open = kni_net_open,
        .ndo_stop = kni_net_release,
        .ndo_set_config = kni_net_config,
-       .ndo_change_rx_flags = kni_net_set_promiscusity,
+       .ndo_change_rx_flags = kni_net_change_rx_flags,
        .ndo_start_xmit = kni_net_tx,
        .ndo_change_mtu = kni_net_change_mtu,
        .ndo_tx_timeout = kni_net_tx_timeout,