Kea  1.5.0
query_filter.h
Go to the documentation of this file.
1 // Copyright (C) 2018 Internet Systems Consortium, Inc. ("ISC")
2 //
3 // This Source Code Form is subject to the terms of the Mozilla Public
4 // License, v. 2.0. If a copy of the MPL was not distributed with this
5 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 
7 #ifndef QUERY_FILTER_H
8 #define QUERY_FILTER_H
9 
10 #include <ha_config.h>
11 #include <dhcp/pkt4.h>
12 #include <dhcp/pkt6.h>
13 #include <cstdint>
14 #include <map>
15 #include <vector>
16 #include <set>
17 #include <string>
18 
19 namespace isc {
20 namespace ha {
21 
57 class QueryFilter {
58 public:
59 
78  explicit QueryFilter(const HAConfigPtr& config);
79 
87  void serveScope(const std::string& scope_name);
88 
96  void serveScopeOnly(const std::string& scope_name);
97 
103  void serveScopes(const std::vector<std::string>& scopes);
104 
109  void serveDefaultScopes();
110 
118  void serveFailoverScopes();
119 
121  void serveNoScopes();
122 
128  bool amServingScope(const std::string& scope_name) const;
129 
133  std::set<std::string> getServedScopes() const;
134 
149  bool inScope(const dhcp::Pkt4Ptr& query4, std::string& scope_class) const;
150 
165  bool inScope(const dhcp::Pkt6Ptr& query6, std::string& scope_class) const;
166 
167 private:
168 
181  template<typename QueryPtrType>
182  bool inScopeInternal(const QueryPtrType& query, std::string& scope_class) const;
183 
184 protected:
185 
198  int loadBalance(const dhcp::Pkt4Ptr& query4) const;
199 
212  int loadBalance(const dhcp::Pkt6Ptr& query6) const;
213 
224  uint8_t loadBalanceHash(const uint8_t* key, const size_t key_len) const;
225 
231  void validateScopeName(const std::string& scope_name) const;
232 
247  std::string makeScopeClass(const std::string& scope_name) const;
248 
251 
253  std::vector<HAConfig::PeerConfigPtr> peers_;
254 
257  std::map<std::string, bool> scopes_;
258 
261 };
262 
263 } // end of namespace isc::ha
264 } // end of namespace isc
265 
266 #endif // QUERY_FILTER_H
isc::ha::QueryFilter::serveFailoverScopes
void serveFailoverScopes()
Enable scopes required in failover case.
Definition: query_filter.cc:152
isc::ha::QueryFilter::loadBalanceHash
uint8_t loadBalanceHash(const uint8_t *key, const size_t key_len) const
Compute load balancing hash.
Definition: query_filter.cc:291
pkt4.h
ha_config.h
pkt6.h
isc::ha::QueryFilter::validateScopeName
void validateScopeName(const std::string &scope_name) const
Checks if the scope name matches a name of any of the configured servers.
Definition: query_filter.cc:302
isc::ha::QueryFilter::loadBalance
int loadBalance(const dhcp::Pkt4Ptr &query4) const
Performs load balancing of the DHCPv4 queries.
Definition: query_filter.cc:236
isc
Defines the logger used by the top-level component of kea-dhcp-ddns.
Definition: agent_parser.cc:144
isc::ha::QueryFilter::getServedScopes
std::set< std::string > getServedScopes() const
Returns served scopes.
Definition: query_filter.cc:189
isc::dhcp::Pkt4Ptr
boost::shared_ptr< Pkt4 > Pkt4Ptr
A pointer to Pkt4 object.
Definition: pkt4.h:546
isc::ha::QueryFilter
DHCP query filtering class.
Definition: query_filter.h:57
isc::ha::QueryFilter::inScope
bool inScope(const dhcp::Pkt4Ptr &query4, std::string &scope_class) const
Checks if this server should process the DHCPv4 query.
Definition: query_filter.cc:200
isc::ha::QueryFilter::serveScopes
void serveScopes(const std::vector< std::string > &scopes)
Enables selected scopes.
Definition: query_filter.cc:116
isc::ha::QueryFilter::serveDefaultScopes
void serveDefaultScopes()
Serve default scopes for the given HA mode.
Definition: query_filter.cc:135
isc::ha::QueryFilter::serveNoScopes
void serveNoScopes()
Disables all scopes.
Definition: query_filter.cc:173
isc::ha::QueryFilter::config_
HAConfigPtr config_
Pointer to the HA configuration.
Definition: query_filter.h:250
isc::ha::QueryFilter::scopes_
std::map< std::string, bool > scopes_
Holds mapping of the scope names to the flag which indicates if the scopes are enabled or disabled.
Definition: query_filter.h:257
isc::ha::QueryFilter::QueryFilter
QueryFilter(const HAConfigPtr &config)
Constructor.
Definition: query_filter.cc:52
isc::ha::QueryFilter::peers_
std::vector< HAConfig::PeerConfigPtr > peers_
Vector of HA peers configurations.
Definition: query_filter.h:253
isc::ha::QueryFilter::active_servers_
int active_servers_
Number of the active servers in the given HA mode.
Definition: query_filter.h:260
isc::ha::HAConfigPtr
boost::shared_ptr< HAConfig > HAConfigPtr
Pointer to the High Availability configuration structure.
Definition: ha_config.h:509
isc::ha::QueryFilter::amServingScope
bool amServingScope(const std::string &scope_name) const
Checks if this server instance is configured to process traffic belonging to a particular scope.
Definition: query_filter.cc:183
isc::ha::QueryFilter::serveScope
void serveScope(const std::string &scope_name)
Enable scope.
Definition: query_filter.cc:103
isc::dhcp::Pkt6Ptr
boost::shared_ptr< Pkt6 > Pkt6Ptr
A pointer to Pkt6 packet.
Definition: pkt6.h:28
isc::ha::QueryFilter::serveScopeOnly
void serveScopeOnly(const std::string &scope_name)
Enable scope and disable all other scopes.
Definition: query_filter.cc:109
isc::ha::QueryFilter::makeScopeClass
std::string makeScopeClass(const std::string &scope_name) const
Returns scope class name for the specified scope name.
Definition: query_filter.cc:314