OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
routing_policy_action.h
Go to the documentation of this file.
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 
18 public:
19  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  virtual bool operator==(const RoutingPolicyAction &action) const {
25  if (typeid(*this) == typeid(action))
26  return IsEqual(action);
27  return false;
28  }
29  virtual bool operator!=(const RoutingPolicyAction &action) const {
30  return !operator==(action);
31  }
32  virtual bool IsEqual(const RoutingPolicyAction &action) const = 0;
33 };
34 
36 public:
38  bool terminal() const { return false; }
39  bool accept() const { return true; }
40  virtual void operator()(BgpAttr *out_attr) const = 0;
41 };
42 
44 public:
46  bool terminal() const { return true; }
47  bool accept() const { return true; }
48  std::string ToString() const {
49  return "accept";
50  }
51  virtual bool IsEqual(const RoutingPolicyAction &action) const {
52  return true;
53  }
54 };
55 
57 public:
59  bool terminal() const { return true; }
60  bool accept() const { return false; }
61  std::string ToString() const {
62  return "reject";
63  }
64  virtual bool IsEqual(const RoutingPolicyAction &action) const {
65  return true;
66  }
67 };
68 
70 public:
72  bool terminal() const { return false; }
73  bool accept() const { return false; }
74  std::string ToString() const {
75  return "next-term";
76  }
77  virtual bool IsEqual(const RoutingPolicyAction &action) const {
78  return true;
79  }
80 };
81 
83 public:
84  UpdateAsPath(const std::vector<uint32_t> &asn_list);
85  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  const std::vector<uint32_t> &asn_list() const { return asn_list_; }
91 
92 private:
93  std::vector<uint32_t> asn_list_;
94 };
95 
97 public:
98  typedef std::vector<uint32_t> CommunityList;
103  };
104  UpdateCommunity(const std::vector<std::string> communities, std::string op);
105  virtual ~UpdateCommunity() {}
106  virtual void operator()(BgpAttr *out_attr) const;
107  std::string ToString() const;
108  virtual bool IsEqual(const RoutingPolicyAction &community) const;
109  const CommunityList &communities() const {
110  return communities_;
111  }
112 
113 private:
116 };
117 
119 public:
124  };
125  UpdateExtCommunity(const std::vector<std::string> &communities,
126  std::string op);
127  virtual ~UpdateExtCommunity() {}
128  virtual void operator()(BgpAttr *out_attr) const;
129  std::string ToString() const;
130  virtual bool IsEqual(const RoutingPolicyAction &community) const;
132  return communities_;
133  }
134 
135 private:
138 };
139 
141 public:
142  explicit UpdateLocalPref(uint32_t local_pref);
143  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 
153 public:
154  explicit UpdateMed(uint32_t med);
155  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_
CommunityList communities_
virtual bool IsEqual(const RoutingPolicyAction &action) const =0
virtual bool IsEqual(const RoutingPolicyAction &med) const
virtual bool IsEqual(const RoutingPolicyAction &action) const
UpdateExtCommunity(const std::vector< std::string > &communities, std::string op)
ExtCommunity::ExtCommunityList communities_
virtual bool IsEqual(const RoutingPolicyAction &local_pref) const
std::vector< uint32_t > asn_list_
virtual bool IsEqual(const RoutingPolicyAction &action) const
virtual std::string ToString() const =0
virtual bool operator==(const RoutingPolicyAction &action) const
virtual bool accept() const =0
UpdateMed(uint32_t med)
const ExtCommunity::ExtCommunityList & communities() const
virtual void operator()(BgpAttr *out_attr) const
std::string ToString() const
std::string ToString() const
virtual bool IsEqual(const RoutingPolicyAction &community) const
std::string ToString() const
std::string ToString() const
virtual bool terminal() const =0
std::string ToString() const
virtual void operator()(BgpAttr *out_attr) const =0
const std::vector< uint32_t > & asn_list() const
virtual bool IsEqual(const RoutingPolicyAction &as_path) const
virtual bool operator!=(const RoutingPolicyAction &action) const
UpdateCommunity(const std::vector< std::string > communities, std::string op)
virtual ~UpdateMed()
virtual void operator()(BgpAttr *out_attr) const
virtual void operator()(BgpAttr *out_attr) const
virtual bool IsEqual(const RoutingPolicyAction &action) const
std::string ToString() const
std::vector< ExtCommunityValue > ExtCommunityList
Definition: community.h:153
const CommunityList & communities() const
virtual bool IsEqual(const RoutingPolicyAction &community) const
UpdateLocalPref(uint32_t local_pref)
virtual void operator()(BgpAttr *out_attr) const
virtual void operator()(BgpAttr *out_attr) const
std::string ToString() const
std::vector< uint32_t > CommunityList
UpdateAsPath(const std::vector< uint32_t > &asn_list)
CommunityUpdateOp op_