#define PACKET_FANOUT_CPU              2
 #define PACKET_FANOUT_ROLLOVER         3
 #define PACKET_FANOUT_RND              4
+#define PACKET_FANOUT_QM               5
 #define PACKET_FANOUT_FLAG_ROLLOVER    0x1000
 #define PACKET_FANOUT_FLAG_DEFRAG      0x8000
 
 
        return idx;
 }
 
+static unsigned int fanout_demux_qm(struct packet_fanout *f,
+                                   struct sk_buff *skb,
+                                   unsigned int num)
+{
+       return skb_get_queue_mapping(skb) % num;
+}
+
 static bool fanout_has_flag(struct packet_fanout *f, u16 flag)
 {
        return f->flags & (flag >> 8);
        case PACKET_FANOUT_RND:
                idx = fanout_demux_rnd(f, skb, num);
                break;
+       case PACKET_FANOUT_QM:
+               idx = fanout_demux_qm(f, skb, num);
+               break;
        case PACKET_FANOUT_ROLLOVER:
                idx = fanout_demux_rollover(f, skb, 0, (unsigned int) -1, num);
                break;
        case PACKET_FANOUT_LB:
        case PACKET_FANOUT_CPU:
        case PACKET_FANOUT_RND:
+       case PACKET_FANOUT_QM:
                break;
        default:
                return -EINVAL;