};
 
 struct mlxsw_skb_cb {
-       struct mlxsw_tx_info tx_info;
+       union {
+               struct mlxsw_tx_info tx_info;
+               u32 cookie_index; /* Only used during receive */
+       };
 };
 
 static inline struct mlxsw_skb_cb *mlxsw_skb_cb(struct sk_buff *skb)
 
 
        rx_info.trap_id = mlxsw_pci_cqe_trap_id_get(cqe);
 
+       if (rx_info.trap_id == MLXSW_TRAP_ID_DISCARD_INGRESS_ACL ||
+           rx_info.trap_id == MLXSW_TRAP_ID_DISCARD_EGRESS_ACL) {
+               u32 cookie_index = 0;
+
+               if (mlxsw_pci->max_cqe_ver >= MLXSW_PCI_CQE_V2)
+                       cookie_index = mlxsw_pci_cqe2_user_def_val_orig_pkt_len_get(cqe);
+               mlxsw_skb_cb(skb)->cookie_index = cookie_index;
+       }
+
        byte_count = mlxsw_pci_cqe_byte_count_get(cqe);
        if (mlxsw_pci_cqe_crc_get(cqe_v, cqe))
                byte_count -= ETH_FCS_LEN;
 
 MLXSW_ITEM32(pci, cqe12, dqn, 0x0C, 1, 6);
 mlxsw_pci_cqe_item_helpers(dqn, 0, 12, 12);
 
+/* pci_cqe_user_def_val_orig_pkt_len
+ * When trap_id is an ACL: User defined value from policy engine action.
+ */
+MLXSW_ITEM32(pci, cqe2, user_def_val_orig_pkt_len, 0x14, 0, 20);
+
 /* pci_cqe_owner
  * Ownership bit.
  */