Home | History | Annotate | Download | only in bpf_dsl
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef SANDBOX_LINUX_BPF_DSL_BPF_DSL_IMPL_H_
      6 #define SANDBOX_LINUX_BPF_DSL_BPF_DSL_IMPL_H_
      7 
      8 #include "base/macros.h"
      9 #include "base/memory/ref_counted.h"
     10 #include "sandbox/linux/bpf_dsl/codegen.h"
     11 #include "sandbox/sandbox_export.h"
     12 
     13 namespace sandbox {
     14 namespace bpf_dsl {
     15 class ErrorCode;
     16 class PolicyCompiler;
     17 
     18 namespace internal {
     19 
     20 // Internal interface implemented by BoolExpr implementations.
     21 class BoolExprImpl : public base::RefCounted<BoolExprImpl> {
     22  public:
     23   // Compile uses |pc| to emit a CodeGen::Node that conditionally continues
     24   // to either |then_node| or |false_node|, depending on whether the represented
     25   // boolean expression is true or false.
     26   virtual CodeGen::Node Compile(PolicyCompiler* pc,
     27                                 CodeGen::Node then_node,
     28                                 CodeGen::Node else_node) const = 0;
     29 
     30  protected:
     31   BoolExprImpl() {}
     32   virtual ~BoolExprImpl() {}
     33 
     34  private:
     35   friend class base::RefCounted<BoolExprImpl>;
     36   DISALLOW_COPY_AND_ASSIGN(BoolExprImpl);
     37 };
     38 
     39 // Internal interface implemented by ResultExpr implementations.
     40 class ResultExprImpl : public base::RefCounted<ResultExprImpl> {
     41  public:
     42   // Compile uses |pc| to emit a CodeGen::Node that executes the
     43   // represented result expression.
     44   virtual CodeGen::Node Compile(PolicyCompiler* pc) const = 0;
     45 
     46   // HasUnsafeTraps returns whether the result expression is or recursively
     47   // contains an unsafe trap expression.
     48   virtual bool HasUnsafeTraps() const;
     49 
     50   // IsAllow returns whether the result expression is an "allow" result.
     51   virtual bool IsAllow() const;
     52 
     53   // IsAllow returns whether the result expression is a "deny" result.
     54   virtual bool IsDeny() const;
     55 
     56  protected:
     57   ResultExprImpl() {}
     58   virtual ~ResultExprImpl() {}
     59 
     60  private:
     61   friend class base::RefCounted<ResultExprImpl>;
     62   DISALLOW_COPY_AND_ASSIGN(ResultExprImpl);
     63 };
     64 
     65 }  // namespace internal
     66 }  // namespace bpf_dsl
     67 }  // namespace sandbox
     68 
     69 #endif  // SANDBOX_LINUX_BPF_DSL_BPF_DSL_IMPL_H_
     70