OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
cfg_vgw.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 #ifndef vnsw_agent_vgw_cfg_h
5 #define vnsw_agent_vgw_cfg_h
6 
7 #include <boost/property_tree/ptree.hpp>
8 #include <base/address.h>
9 
10 class InetInterface;
11 
12 // Simple Virtual Gateway config class
13 // Supports virtual-gateway for single virtual-network for now.
15 public:
16  struct Subnet {
17  Subnet() : ip_(0), plen_(0) {}
18  Subnet(const Ip4Address &ip, uint8_t plen) : ip_(ip), plen_(plen) {}
19  ~Subnet() {}
20  bool operator<(const Subnet &rhs) const {
21  if (ip_ != rhs.ip_)
22  return ip_ < rhs.ip_;
23 
24  return (plen_ < rhs.plen_);
25  }
26 
28  uint8_t plen_;
29  };
30  typedef std::vector<Subnet> SubnetList;
31 
32  VirtualGatewayConfig(const std::string &interface_name) :
33  interface_name_(interface_name), vrf_name_(""), subnets_(), routes_(),
34  interface_(), version_(0) {}
36  const std::string &vrf_name,
37  const SubnetList &subnets,
38  const SubnetList &routes,
39  uint32_t version) :
40  interface_name_(interface_name), vrf_name_(vrf_name),
41  subnets_(subnets), routes_(routes), version_(version) {}
44  subnets_(rhs.subnets_), routes_(rhs.routes_), version_(rhs.version_) {}
46 
47  const std::string& interface_name() const { return interface_name_; }
48  const std::string& vrf_name() const { return vrf_name_; }
49  const SubnetList& subnets() const { return subnets_; }
50  const SubnetList& routes() const { return routes_; }
51  uint32_t version() const { return version_; }
52  void set_subnets(const SubnetList &subnets) const { subnets_ = subnets; }
53  void set_routes(const SubnetList &routes) const { routes_ = routes; }
54  const InetInterface *get_interface() const { return interface_; }
55  void set_interface(InetInterface *intrface) const {
56  interface_ = intrface;
57  }
58  void set_version(uint32_t version) const { version_ = version; }
59 
60 private:
61  // Interface connecting gateway to host-os
62  std::string interface_name_;
63  // Public network name
64  std::string vrf_name_;
65  // Vector of subnets
67  // Vector of routes
69  // Inet interface pointer
71  // client version number of the entry
72  mutable uint32_t version_;
73 };
74 
76  std::string interface_name_;
77  std::string vrf_name_;
80 
81  VirtualGatewayInfo(const std::string &interfacestr)
82  : interface_name_(interfacestr) {}
83  VirtualGatewayInfo(const std::string &interfacestr, const std::string &vrf,
86  : interface_name_(interfacestr), vrf_name_(vrf) {
87  subnets_.swap(subnets);
88  routes_.swap(routes);
89  }
90 };
91 
93  enum MessageType {
94  Add,
97  };
98 
100  std::vector<VirtualGatewayInfo> vgw_list_;
101  uint32_t version_;
102 
103  VirtualGatewayData(MessageType type, std::vector<VirtualGatewayInfo> &list,
104  uint32_t version)
105  : message_type_(type), version_(version) {
106  vgw_list_.swap(list);
107  }
109  : message_type_(type), version_(version) {}
110 };
111 
113 public:
116  const VirtualGatewayConfig &cfg2) const {
117  return cfg1.interface_name() < cfg2.interface_name();
118  }
119  };
120 
121  typedef std::set<VirtualGatewayConfig, VirtualGatewayConfigCompare> Table;
122 
125 
126  void InitFromConfig(const boost::property_tree::ptree pt);
127  void InitDone(Agent *agent);
128  void Shutdown();
129  const Table &table() const {return table_;}
130 
131  void Enqueue(boost::shared_ptr<VirtualGatewayData> request);
132  bool ProcessRequest(boost::shared_ptr<VirtualGatewayData> request);
133 
134 private:
135  void BuildSubnetList(const std::string &subnets,
137  bool AddVgw(VirtualGatewayInfo &vgw, uint32_t version);
138  bool DeleteVgw(const std::string &interface_name);
139  void DeleteVgw(Table::iterator it);
140  void DeleteAllOldVersionVgw(uint32_t version);
141  bool FindChange(const VirtualGatewayConfig::SubnetList &old_subnets,
142  const VirtualGatewayConfig::SubnetList &new_subnets,
145 
148  std::unique_ptr< WorkQueue<boost::shared_ptr<VirtualGatewayData> > > work_queue_;
150 };
151 
152 #endif //vnsw_agent_vgw_cfg_h
bool DeleteVgw(const std::string &interface_name)
Definition: cfg_vgw.cc:183
const SubnetList & routes() const
Definition: cfg_vgw.h:50
std::vector< VirtualGatewayInfo > vgw_list_
Definition: cfg_vgw.h:100
void Enqueue(boost::shared_ptr< VirtualGatewayData > request)
Definition: cfg_vgw.cc:110
SubnetList subnets_
Definition: cfg_vgw.h:66
bool operator()(const VirtualGatewayConfig &cfg1, const VirtualGatewayConfig &cfg2) const
Definition: cfg_vgw.h:115
const SubnetList & subnets() const
Definition: cfg_vgw.h:49
void set_routes(const SubnetList &routes) const
Definition: cfg_vgw.h:53
DISALLOW_COPY_AND_ASSIGN(VirtualGatewayConfigTable)
void DeleteAllOldVersionVgw(uint32_t version)
Definition: cfg_vgw.cc:206
void set_version(uint32_t version) const
Definition: cfg_vgw.h:58
VirtualGatewayConfig::SubnetList routes_
Definition: cfg_vgw.h:79
Subnet(const Ip4Address &ip, uint8_t plen)
Definition: cfg_vgw.h:18
bool operator<(const Subnet &rhs) const
Definition: cfg_vgw.h:20
VirtualGatewayConfig(const std::string &interface_name)
Definition: cfg_vgw.h:32
VirtualGatewayData(MessageType type, std::vector< VirtualGatewayInfo > &list, uint32_t version)
Definition: cfg_vgw.h:103
uint32_t version_
Definition: cfg_vgw.h:72
void set_interface(InetInterface *intrface) const
Definition: cfg_vgw.h:55
void InitFromConfig(const boost::property_tree::ptree pt)
Definition: cfg_vgw.cc:33
VirtualGatewayInfo(const std::string &interfacestr, const std::string &vrf, VirtualGatewayConfig::SubnetList &subnets, VirtualGatewayConfig::SubnetList &routes)
Definition: cfg_vgw.h:83
std::string vrf_name_
Definition: cfg_vgw.h:77
uint8_t type
Definition: load_balance.h:109
std::unique_ptr< WorkQueue< boost::shared_ptr< VirtualGatewayData > > > work_queue_
Definition: cfg_vgw.h:148
Definition: agent.h:358
VirtualGatewayInfo(const std::string &interfacestr)
Definition: cfg_vgw.h:81
bool FindChange(const VirtualGatewayConfig::SubnetList &old_subnets, const VirtualGatewayConfig::SubnetList &new_subnets, VirtualGatewayConfig::SubnetList &add_list, VirtualGatewayConfig::SubnetList &del_list)
Definition: cfg_vgw.cc:216
uint32_t version() const
Definition: cfg_vgw.h:51
const std::string & interface_name() const
Definition: cfg_vgw.h:47
bool ProcessRequest(boost::shared_ptr< VirtualGatewayData > request)
Definition: cfg_vgw.cc:115
const Table & table() const
Definition: cfg_vgw.h:129
void set_subnets(const SubnetList &subnets) const
Definition: cfg_vgw.h:52
VirtualGatewayConfig(const std::string &interface_name, const std::string &vrf_name, const SubnetList &subnets, const SubnetList &routes, uint32_t version)
Definition: cfg_vgw.h:35
boost::asio::ip::address_v4 Ip4Address
Definition: address.h:14
VirtualGatewayData(MessageType type, uint32_t version)
Definition: cfg_vgw.h:108
InetInterface * interface_
Definition: cfg_vgw.h:70
bool AddVgw(VirtualGatewayInfo &vgw, uint32_t version)
Definition: cfg_vgw.cc:141
SubnetList routes_
Definition: cfg_vgw.h:68
uint32_t version_
Definition: cfg_vgw.h:101
VirtualGatewayConfig(const VirtualGatewayConfig &rhs)
Definition: cfg_vgw.h:42
MessageType message_type_
Definition: cfg_vgw.h:99
std::set< VirtualGatewayConfig, VirtualGatewayConfigCompare > Table
Definition: cfg_vgw.h:121
std::string interface_name_
Definition: cfg_vgw.h:62
std::vector< Subnet > SubnetList
Definition: cfg_vgw.h:30
const InetInterface * get_interface() const
Definition: cfg_vgw.h:54
void BuildSubnetList(const std::string &subnets, VirtualGatewayConfig::SubnetList &results)
Definition: cfg_vgw.cc:73
std::string vrf_name_
Definition: cfg_vgw.h:64
VirtualGatewayConfig::SubnetList subnets_
Definition: cfg_vgw.h:78
void InitDone(Agent *agent)
Definition: cfg_vgw.cc:97
std::string interface_name_
Definition: cfg_vgw.h:76
const std::string & vrf_name() const
Definition: cfg_vgw.h:48