LCOV - code coverage report
Current view: top level - bgp/routing-policy - routing_policy_action.h (source / functions) Hit Total Coverage
Test: OpenSDN C/C++ coverage (all TARGET_SET jobs) Lines: 38 41 92.7 %
Date: 2026-06-08 02:02:55 Functions: 34 39 87.2 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2015 Juniper Networks, Inc. All rights reserved.
       3             :  */
       4             : 
       5             : #ifndef SRC_BGP_ROUTING_POLICY_ROUTING_POLICY_ACTION_H_
       6             : #define SRC_BGP_ROUTING_POLICY_ROUTING_POLICY_ACTION_H_
       7             : 
       8             : #include <stdint.h>
       9             : #include <string>
      10             : #include <typeinfo>
      11             : #include <vector>
      12             : #include "bgp/community.h"
      13             : #include "net/community_type.h"
      14             : 
      15             : class BgpAttr;
      16             : 
      17             : class RoutingPolicyAction {
      18             : public:
      19        1020 :     virtual ~RoutingPolicyAction() {}
      20             :     // Whether the action is terminal (Accept/Reject)
      21             :     virtual bool terminal()  const = 0;
      22             :     virtual bool accept()  const = 0;
      23             :     virtual std::string ToString() const = 0;
      24         433 :     virtual bool operator==(const RoutingPolicyAction &action) const {
      25         433 :         if (typeid(*this) == typeid(action))
      26         432 :             return IsEqual(action);
      27           1 :         return false;
      28             :     }
      29         433 :     virtual bool operator!=(const RoutingPolicyAction &action) const {
      30         433 :         return !operator==(action);
      31             :     }
      32             :     virtual bool IsEqual(const RoutingPolicyAction &action) const = 0;
      33             : };
      34             : 
      35             : class RoutingPolicyUpdateAction : public RoutingPolicyAction {
      36             : public:
      37         542 :     virtual ~RoutingPolicyUpdateAction() {}
      38           0 :     bool terminal()  const { return false; }
      39           0 :     bool accept() const { return true; }
      40             :     virtual void operator()(BgpAttr *out_attr) const = 0;
      41             : };
      42             : 
      43             : class RoutingPolicyAcceptAction : public RoutingPolicyAction {
      44             : public:
      45         484 :     virtual ~RoutingPolicyAcceptAction() {}
      46         844 :     bool terminal()  const { return true; }
      47         262 :     bool accept() const { return true; }
      48          10 :     std::string ToString() const {
      49          10 :         return "accept";
      50             :     }
      51         133 :     virtual bool IsEqual(const RoutingPolicyAction &action) const {
      52         133 :         return true;
      53             :     }
      54             : };
      55             : 
      56             : class RoutingPolicyRejectAction : public RoutingPolicyAction {
      57             : public:
      58         268 :     virtual ~RoutingPolicyRejectAction() {}
      59         297 :     bool terminal()  const { return true; }
      60          28 :     bool accept() const { return false; }
      61           9 :     std::string ToString() const {
      62           9 :         return "reject";
      63             :     }
      64          74 :     virtual bool IsEqual(const RoutingPolicyAction &action) const {
      65          74 :         return true;
      66             :     }
      67             : };
      68             : 
      69             : class RoutingPolicyNexTermAction : public RoutingPolicyAction {
      70             : public:
      71         204 :     virtual ~RoutingPolicyNexTermAction() {}
      72         107 :     bool terminal()  const { return false; }
      73           0 :     bool accept() const { return false; }
      74           4 :     std::string ToString() const {
      75           4 :         return "next-term";
      76             :     }
      77          51 :     virtual bool IsEqual(const RoutingPolicyAction &action) const {
      78          51 :         return true;
      79             :     }
      80             : };
      81             : 
      82             : class UpdateAsPath : public RoutingPolicyUpdateAction {
      83             : public:
      84             :     UpdateAsPath(const std::vector<uint32_t> &asn_list);
      85          23 :     virtual ~UpdateAsPath() {}
      86             : 
      87             :     virtual void operator()(BgpAttr *out_attr) const;
      88             :     std::string ToString() const;
      89             :     virtual bool IsEqual(const RoutingPolicyAction &as_path) const;
      90           5 :     const std::vector<uint32_t> &asn_list() const { return asn_list_; }
      91             : 
      92             : private:
      93             :     std::vector<uint32_t> asn_list_;
      94             : };
      95             : 
      96             : class UpdateCommunity : public RoutingPolicyUpdateAction {
      97             : public:
      98             :     typedef std::vector<uint32_t> CommunityList;
      99             :     enum CommunityUpdateOp {
     100             :         ADD,
     101             :         REMOVE,
     102             :         SET
     103             :     };
     104             :     UpdateCommunity(const std::vector<std::string> communities, std::string op);
     105         311 :     virtual ~UpdateCommunity() {}
     106             :     virtual void operator()(BgpAttr *out_attr) const;
     107             :     std::string ToString() const;
     108             :     virtual bool IsEqual(const RoutingPolicyAction &community) const;
     109         134 :     const CommunityList &communities() const {
     110         134 :         return communities_;
     111             :     }
     112             : 
     113             : private:
     114             :     CommunityList communities_;
     115             :     CommunityUpdateOp op_;
     116             : };
     117             : 
     118             : class UpdateExtCommunity : public RoutingPolicyUpdateAction {
     119             : public:
     120             :     enum CommunityUpdateOp {
     121             :         ADD,
     122             :         REMOVE,
     123             :         SET
     124             :     };
     125             :     UpdateExtCommunity(const std::vector<std::string> &communities,
     126             :                        std::string op);
     127          77 :     virtual ~UpdateExtCommunity() {}
     128             :     virtual void operator()(BgpAttr *out_attr) const;
     129             :     std::string ToString() const;
     130             :     virtual bool IsEqual(const RoutingPolicyAction &community) const;
     131          37 :     const ExtCommunity::ExtCommunityList &communities() const {
     132          37 :         return communities_;
     133             :     }
     134             : 
     135             : private:
     136             :     ExtCommunity::ExtCommunityList communities_;
     137             :     CommunityUpdateOp op_;
     138             : };
     139             : 
     140             : class UpdateLocalPref : public RoutingPolicyUpdateAction {
     141             : public:
     142             :     explicit UpdateLocalPref(uint32_t local_pref);
     143         459 :     virtual ~UpdateLocalPref() {}
     144             :     virtual void operator()(BgpAttr *out_attr) const;
     145             :     std::string ToString() const;
     146             :     virtual bool IsEqual(const RoutingPolicyAction &local_pref) const;
     147             : 
     148             : private:
     149             :     uint32_t local_pref_;
     150             : };
     151             : 
     152             : class UpdateMed : public RoutingPolicyUpdateAction {
     153             : public:
     154             :     explicit UpdateMed(uint32_t med);
     155           5 :     virtual ~UpdateMed() {}
     156             :     virtual void operator()(BgpAttr *out_attr) const;
     157             :     std::string ToString() const;
     158             :     virtual bool IsEqual(const RoutingPolicyAction &med) const;
     159             : 
     160             : private:
     161             :     uint32_t med_;
     162             : };
     163             : 
     164             : #endif  // SRC_BGP_ROUTING_POLICY_ROUTING_POLICY_ACTION_H_

Generated by: LCOV version 1.14