macvlan_count_rx(vlan, len, ret == NET_RX_SUCCESS, false);
 }
 
-static void macvlan_forward_source(struct sk_buff *skb,
+static bool macvlan_forward_source(struct sk_buff *skb,
                                   struct macvlan_port *port,
                                   const unsigned char *addr)
 {
        struct macvlan_source_entry *entry;
        u32 idx = macvlan_eth_hash(addr);
        struct hlist_head *h = &port->vlan_source_hash[idx];
+       bool consume = false;
 
        hlist_for_each_entry_rcu(entry, h, hlist) {
-               if (ether_addr_equal_64bits(entry->addr, addr))
+               if (ether_addr_equal_64bits(entry->addr, addr)) {
+                       if (entry->vlan->flags & MACVLAN_FLAG_NODST)
+                               consume = true;
                        macvlan_forward_source_one(skb, entry->vlan);
+               }
        }
+
+       return consume;
 }
 
 /* called under rcu_read_lock() from netif_receive_skb */
                        return RX_HANDLER_CONSUMED;
                *pskb = skb;
                eth = eth_hdr(skb);
-               macvlan_forward_source(skb, port, eth->h_source);
+               if (macvlan_forward_source(skb, port, eth->h_source))
+                       return RX_HANDLER_CONSUMED;
                src = macvlan_hash_lookup(port, eth->h_source);
                if (src && src->mode != MACVLAN_MODE_VEPA &&
                    src->mode != MACVLAN_MODE_BRIDGE) {
                return RX_HANDLER_PASS;
        }
 
-       macvlan_forward_source(skb, port, eth->h_source);
+       if (macvlan_forward_source(skb, port, eth->h_source))
+               return RX_HANDLER_CONSUMED;
        if (macvlan_passthru(port))
                vlan = list_first_or_null_rcu(&port->vlans,
                                              struct macvlan_dev, list);
                return 0;
 
        if (data[IFLA_MACVLAN_FLAGS] &&
-           nla_get_u16(data[IFLA_MACVLAN_FLAGS]) & ~MACVLAN_FLAG_NOPROMISC)
+           nla_get_u16(data[IFLA_MACVLAN_FLAGS]) & ~(MACVLAN_FLAG_NOPROMISC |
+                                                     MACVLAN_FLAG_NODST))
                return -EINVAL;
 
        if (data[IFLA_MACVLAN_MODE]) {