struct ib_uverbs_flow_spec_tcp_udp tcp_udp;
                struct ib_uverbs_flow_spec_ipv6    ipv6;
                struct ib_uverbs_flow_spec_action_tag   flow_tag;
+               struct ib_uverbs_flow_spec_action_drop  drop;
        };
 };
 
 
                ib_spec->flow_tag.size = sizeof(struct ib_flow_spec_action_tag);
                ib_spec->flow_tag.tag_id = kern_spec->flow_tag.tag_id;
                break;
+       case IB_FLOW_SPEC_ACTION_DROP:
+               if (kern_spec->drop.size !=
+                   sizeof(struct ib_uverbs_flow_spec_action_drop))
+                       return -EINVAL;
+
+               ib_spec->drop.size = sizeof(struct ib_flow_spec_action_drop);
+               break;
        default:
                return -EINVAL;
        }
 
        IB_FLOW_SPEC_INNER              = 0x100,
        /* Actions */
        IB_FLOW_SPEC_ACTION_TAG         = 0x1000,
+       IB_FLOW_SPEC_ACTION_DROP        = 0x1001,
 };
 #define IB_FLOW_SPEC_LAYER_MASK        0xF0
 #define IB_FLOW_SPEC_SUPPORT_LAYERS 8
        u32                           tag_id;
 };
 
+struct ib_flow_spec_action_drop {
+       enum ib_flow_spec_type        type;
+       u16                           size;
+};
+
 union ib_flow_spec {
        struct {
                u32                     type;
        struct ib_flow_spec_ipv6        ipv6;
        struct ib_flow_spec_tunnel      tunnel;
        struct ib_flow_spec_action_tag  flow_tag;
+       struct ib_flow_spec_action_drop drop;
 };
 
 struct ib_flow_attr {