Kea  1.9.9-git
dhcp6_srv.h
Go to the documentation of this file.
1 // Copyright (C) 2011-2021 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 DHCPV6_SRV_H
8 #define DHCPV6_SRV_H
9 
10 #include <asiolink/io_service.h>
11 #include <dhcp/dhcp6.h>
12 #include <dhcp/duid.h>
13 #include <dhcp/option.h>
14 #include <dhcp/option_string.h>
16 #include <dhcp/option6_ia.h>
17 #include <dhcp/option_custom.h>
18 #include <dhcp/option_definition.h>
19 #include <dhcp_ddns/ncr_msg.h>
20 #include <dhcp/pkt6.h>
21 #include <dhcpsrv/alloc_engine.h>
23 #include <dhcpsrv/cb_ctl_dhcp6.h>
24 #include <dhcpsrv/cfg_option.h>
25 #include <dhcpsrv/d2_client_mgr.h>
26 #include <dhcpsrv/network_state.h>
27 #include <dhcpsrv/subnet.h>
28 #include <hooks/callout_handle.h>
29 #include <process/daemon.h>
30 
31 #include <functional>
32 #include <iostream>
33 #include <queue>
34 
35 // Undefine the macro OPTIONAL which is defined in some operating
36 // systems but conflicts with a member of the RequirementLevel enum in
37 // the server class.
38 
39 #ifdef OPTIONAL
40 #undef OPTIONAL
41 #endif
42 
43 namespace isc {
44 namespace dhcp {
45 
49 public:
50  DHCPv6DiscardMessageError(const char* file, size_t line, const char* what) :
51  isc::Exception(file, line, what) { };
52 };
53 
66 class Dhcpv6Srv : public process::Daemon {
67 private:
68 
70  asiolink::IOServicePtr io_service_;
71 
72 public:
74  typedef enum {
79 
81  static const size_t MIN_MAC_LEN = 6;
82 
95  Dhcpv6Srv(uint16_t server_port = DHCP6_SERVER_PORT,
96  uint16_t client_port = 0);
97 
99  virtual ~Dhcpv6Srv();
100 
105  bool inTestMode() const {
106  return (server_port_ == 0);
107  }
108 
111  return (io_service_);
112  }
113 
116  return (network_state_);
117  }
118 
125  return (cb_control_);
126  }
127 
130  static std::string getVersion(bool extended);
131 
136 
143  int run();
144 
150  void run_one();
151 
159 
167 
173  void sendResponseNoThrow(hooks::CalloutHandlePtr& callout_handle,
174  Pkt6Ptr& query, Pkt6Ptr& rsp);
175 
183  void processPacket(Pkt6Ptr& query, Pkt6Ptr& rsp);
184 
191  void processDhcp6Query(Pkt6Ptr& query, Pkt6Ptr& rsp);
192 
201 
203  void shutdown() override;
204 
208 
209  uint16_t getServerPort() const {
217  return (server_port_);
218  }
220 
226  void startD2();
227 
233  void stopD2();
234 
249  virtual void d2ClientErrorHandler(const dhcp_ddns::
250  NameChangeSender::Result result,
252 
256  void discardPackets();
257 
258 protected:
259 
267 
276  bool testServerID(const Pkt6Ptr& pkt);
277 
288  bool testUnicast(const Pkt6Ptr& pkt) const;
289 
298  bool sanityCheck(const Pkt6Ptr& pkt);
299 
309  void sanityCheck(const Pkt6Ptr& pkt, RequirementLevel clientid,
310  RequirementLevel serverid);
311 
317  void sanityCheckDUID(const OptionPtr& opt, const std::string& opt_name);
318 
333  Pkt6Ptr processSolicit(AllocEngine::ClientContext6& ctx);
334 
346  Pkt6Ptr processRequest(AllocEngine::ClientContext6& ctx);
347 
353  Pkt6Ptr processRenew(AllocEngine::ClientContext6& ctx);
354 
366  Pkt6Ptr processRebind(AllocEngine::ClientContext6& ctx);
367 
391  Pkt6Ptr processConfirm(AllocEngine::ClientContext6& ctx);
392 
398  Pkt6Ptr processRelease(AllocEngine::ClientContext6& ctx);
399 
410  Pkt6Ptr processDecline(AllocEngine::ClientContext6& ctx);
411 
417  Pkt6Ptr processInfRequest(AllocEngine::ClientContext6& ctx);
418 
428  void processDhcp4Query(const Pkt6Ptr& dhcp4_query);
429 
435  isc::dhcp::Subnet6Ptr selectSubnet(const Pkt6Ptr& question, bool& drop);
436 
454  const isc::dhcp::Pkt6Ptr& answer,
455  AllocEngine::ClientContext6& ctx,
456  Option6IAPtr ia);
457 
471  OptionPtr assignIA_PD(const Pkt6Ptr& query,
472  const isc::dhcp::Pkt6Ptr& answer,
473  AllocEngine::ClientContext6& ctx,
474  boost::shared_ptr<Option6IA> ia);
475 
491  OptionPtr extendIA_NA(const Pkt6Ptr& query, const Pkt6Ptr& answer,
492  AllocEngine::ClientContext6& ctx,
493  Option6IAPtr ia);
494 
548  OptionPtr extendIA_PD(const Pkt6Ptr& query,
549  AllocEngine::ClientContext6& ctx,
550  Option6IAPtr ia);
551 
570  OptionPtr releaseIA_NA(const DuidPtr& duid, const Pkt6Ptr& query,
571  int& general_status,
572  boost::shared_ptr<Option6IA> ia,
573  Lease6Ptr& old_lease);
574 
588  OptionPtr releaseIA_PD(const DuidPtr& duid, const Pkt6Ptr& query,
589  int& general_status,
590  boost::shared_ptr<Option6IA> ia,
591  Lease6Ptr& old_lease);
592 
602  void copyClientOptions(const Pkt6Ptr& question, Pkt6Ptr& answer);
603 
612  void buildCfgOptionList(const Pkt6Ptr& question,
613  AllocEngine::ClientContext6& ctx,
614  CfgOptionList& co_list);
615 
625  void appendDefaultOptions(const Pkt6Ptr& question, Pkt6Ptr& answer,
626  const CfgOptionList& co_list);
627 
636  void appendRequestedOptions(const Pkt6Ptr& question, Pkt6Ptr& answer,
637  const CfgOptionList& co_list);
638 
648  void appendRequestedVendorOptions(const Pkt6Ptr& question, Pkt6Ptr& answer,
649  AllocEngine::ClientContext6& ctx,
650  const CfgOptionList& co_list);
651 
662  void assignLeases(const Pkt6Ptr& question, Pkt6Ptr& answer,
663  AllocEngine::ClientContext6& ctx);
664 
709  void processClientFqdn(const Pkt6Ptr& question, const Pkt6Ptr& answer,
710  AllocEngine::ClientContext6& ctx);
711 
731  void createNameChangeRequests(const Pkt6Ptr& answer,
732  AllocEngine::ClientContext6& ctx);
733 
745  void extendLeases(const Pkt6Ptr& query, Pkt6Ptr& reply,
746  AllocEngine::ClientContext6& ctx);
747 
773  void setTeeTimes(uint32_t preferred_lft, const Subnet6Ptr& subnet, Option6IAPtr& resp);
774 
785  void releaseLeases(const Pkt6Ptr& release, Pkt6Ptr& reply,
786  AllocEngine::ClientContext6& ctx);
787 
794  static std::string duidToString(const OptionPtr& opt);
795 
800  virtual Pkt6Ptr receivePacket(int timeout);
801 
806  virtual void sendPacket(const Pkt6Ptr& pkt);
807 
818  void classifyPacket(const Pkt6Ptr& pkt);
819 
830  void evaluateClasses(const Pkt6Ptr& pkt, bool depend_on_known);
831 
836  void setReservedClientClasses(const Pkt6Ptr& pkt,
837  const AllocEngine::ClientContext6& ctx);
838 
850  const AllocEngine::ClientContext6& ctx);
851 
863  void requiredClassify(const Pkt6Ptr& pkt, AllocEngine::ClientContext6& ctx);
864 
872  static HWAddrPtr getMAC(const Pkt6Ptr& pkt);
873 
882  void processRSOO(const Pkt6Ptr& query, const Pkt6Ptr& rsp);
883 
904  void initContext(const Pkt6Ptr& pkt,
905  AllocEngine::ClientContext6& ctx,
906  bool& drop);
907 
914  static const std::string VENDOR_CLASS_PREFIX;
915 
926  bool declineLeases(const Pkt6Ptr& decline, Pkt6Ptr& reply,
928 
942  OptionPtr
943  declineIA(const Pkt6Ptr& decline, const DuidPtr& duid, int& general_status,
944  boost::shared_ptr<Option6IA> ia, Lease6Collection& new_leases);
945 
962  bool declineLease(const Pkt6Ptr& decline, const Lease6Ptr lease,
963  boost::shared_ptr<Option6IA> ia_rsp);
964 
970  void setStatusCode(boost::shared_ptr<Option6IA>& container,
971  const OptionPtr& status);
972 
1007  //
1008  void checkDynamicSubnetChange(const Pkt6Ptr& question, Pkt6Ptr& answer,
1010  const Subnet6Ptr orig_subnet);
1011 public:
1012 
1014 
1019  static uint16_t checkRelaySourcePort(const Pkt6Ptr& query);
1020 
1021 private:
1022 
1030  void classifyByVendor(const Pkt6Ptr& pkt, std::string& classes);
1031 
1048  void updateReservedFqdn(AllocEngine::ClientContext6& ctx,
1049  const Pkt6Ptr& answer);
1050 
1093  void generateFqdn(const Pkt6Ptr& answer,
1095 
1098  static void processStatsReceived(const Pkt6Ptr& query);
1099 
1107  bool requestedInORO(const Pkt6Ptr& query, const uint16_t code) const;
1108 
1109 protected:
1111  uint16_t server_port_;
1112 
1114  uint16_t client_port_;
1115 
1116 public:
1117 
1119 
1122  static void processStatsSent(const Pkt6Ptr& response);
1123 
1126  static int getHookIndexBuffer6Send();
1127 
1132  void processPacketBufferSend(hooks::CalloutHandlePtr& callout_handle,
1133  Pkt6Ptr& rsp);
1134 
1140  std::list<std::list<std::string>> jsonPathsToRedact() const final override;
1141 
1142 protected:
1143 
1146 
1149  volatile bool shutdown_;
1150 
1156  void processPacketPktSend(hooks::CalloutHandlePtr& callout_handle,
1157  Pkt6Ptr& query, Pkt6Ptr& rsp);
1158 
1164 
1167  std::queue<isc::dhcp_ddns::NameChangeRequest> name_change_reqs_;
1168 
1172 
1175 };
1176 
1177 } // namespace dhcp
1178 } // namespace isc
1179 
1180 #endif // DHCP6_SRV_H
virtual Pkt6Ptr receivePacket(int timeout)
dummy wrapper around IfaceMgr::receive6
Definition: dhcp6_srv.cc:305
uint16_t server_port_
UDP port number on which server listens.
Definition: dhcp6_srv.h:1111
boost::shared_ptr< DUID > DuidPtr
Definition: duid.h:20
Pkt6Ptr processInfRequest(AllocEngine::ClientContext6 &ctx)
Processes incoming Information-request message.
Definition: dhcp6_srv.cc:3670
int run()
Main server processing loop.
Definition: dhcp6_srv.cc:512
volatile bool shutdown_
Indicates if shutdown is in progress.
Definition: dhcp6_srv.h:1149
void classifyPacket(const Pkt6Ptr &pkt)
Assigns incoming packet to zero or more classes.
Definition: dhcp6_srv.cc:3745
void sanityCheckDUID(const OptionPtr &opt, const std::string &opt_name)
verifies if received DUID option (client-id or server-id) is sane
Definition: dhcp6_srv.cc:1628
bool inTestMode() const
Checks if the server is running in unit test mode.
Definition: dhcp6_srv.h:105
void appendDefaultOptions(const Pkt6Ptr &question, Pkt6Ptr &answer, const CfgOptionList &co_list)
Appends default options to server's answer.
Definition: dhcp6_srv.cc:1270
static std::string getVersion(bool extended)
returns Kea version on stdout and exit.
Definition: dhcp6_srv.cc:4086
void shutdown() override
Instructs the server to shut down.
Definition: dhcp6_srv.cc:300
virtual void sendPacket(const Pkt6Ptr &pkt)
dummy wrapper around IfaceMgr::send()
Definition: dhcp6_srv.cc:309
boost::shared_ptr< HWAddr > HWAddrPtr
Shared pointer to a hardware address structure.
Definition: hwaddr.h:154
void releaseLeases(const Pkt6Ptr &release, Pkt6Ptr &reply, AllocEngine::ClientContext6 &ctx)
Attempts to release received addresses.
Definition: dhcp6_srv.cc:2689
void extendLeases(const Pkt6Ptr &query, Pkt6Ptr &reply, AllocEngine::ClientContext6 &ctx)
Attempts to extend the lifetime of IAs.
Definition: dhcp6_srv.cc:2641
void processRSOO(const Pkt6Ptr &query, const Pkt6Ptr &rsp)
Processes Relay-supplied options, if present.
Definition: dhcp6_srv.cc:4113
std::list< std::list< std::string > > jsonPathsToRedact() const finaloverride
Return a list of all paths that contain passwords or secrets for kea-dhcp6.
Definition: dhcp6_srv.cc:4353
boost::shared_ptr< Option > OptionPtr
Definition: option.h:36
uint16_t getServerPort() const
Get UDP port on which server should listen.
Definition: dhcp6_srv.h:216
static void processStatsSent(const Pkt6Ptr &response)
Updates statistics for transmitted packets.
Definition: dhcp6_srv.cc:4218
void appendRequestedOptions(const Pkt6Ptr &question, Pkt6Ptr &answer, const CfgOptionList &co_list)
Appends requested options to server's answer.
Definition: dhcp6_srv.cc:1347
STL namespace.
OptionPtr extendIA_PD(const Pkt6Ptr &query, AllocEngine::ClientContext6 &ctx, Option6IAPtr ia)
Extends lifetime of the prefix.
Definition: dhcp6_srv.cc:2442
void evaluateClasses(const Pkt6Ptr &pkt, bool depend_on_known)
Evaluate classes.
Definition: dhcp6_srv.cc:3757
static const size_t MIN_MAC_LEN
Minimum length of a MAC address to be used in DUID generation.
Definition: dhcp6_srv.h:81
static std::string duidToString(const OptionPtr &opt)
converts DUID to text Converts content of DUID option to a text representation, e.g.
Definition: dhcp6_srv.cc:1234
boost::shared_ptr< NameChangeRequest > NameChangeRequestPtr
Defines a pointer to a NameChangeRequest.
Definition: ncr_msg.h:212
DHCPv6DiscardMessageError(const char *file, size_t line, const char *what)
Definition: dhcp6_srv.h:50
void processPacketBufferSend(hooks::CalloutHandlePtr &callout_handle, Pkt6Ptr &rsp)
Executes buffer6_send callout and sends the response.
Definition: dhcp6_srv.cc:1167
boost::shared_ptr< CBControlDHCPv6 > CBControlDHCPv6Ptr
Definition: cb_ctl_dhcp6.h:45
void setReservedClientClasses(const Pkt6Ptr &pkt, const AllocEngine::ClientContext6 &ctx)
Assigns classes retrieved from host reservation database.
Definition: dhcp6_srv.cc:3806
NetworkStatePtr & getNetworkState()
Returns pointer to the network state used by the server.
Definition: dhcp6_srv.h:115
boost::shared_ptr< Option6IA > Option6IAPtr
A pointer to the Option6IA object.
Definition: option6_ia.h:17
void conditionallySetReservedClientClasses(const Pkt6Ptr &pkt, const AllocEngine::ClientContext6 &ctx)
Assigns classes retrieved from host reservation database if they haven't been yet set...
Definition: dhcp6_srv.cc:3825
void assignLeases(const Pkt6Ptr &question, Pkt6Ptr &answer, AllocEngine::ClientContext6 &ctx)
Assigns leases.
Definition: dhcp6_srv.cc:1720
boost::shared_ptr< Pkt6 > Pkt6Ptr
A pointer to Pkt6 packet.
Definition: pkt6.h:28
bool testUnicast(const Pkt6Ptr &pkt) const
Check if the message can be sent to unicast.
Definition: dhcp6_srv.cc:337
Pkt6Ptr processRebind(AllocEngine::ClientContext6 &ctx)
Processes incoming Rebind message.
Definition: dhcp6_srv.cc:3214
void classifyByVendor(const Pkt6Ptr &pkt, std::string &classes)
Assign class using vendor-class-identifier option.
Definition: dhcp6_srv.cc:3723
OptionPtr getServerID()
Returns server-identifier option.
Definition: dhcp6_srv.h:135
std::list< ConstCfgOptionPtr > CfgOptionList
Const pointer list.
Definition: cfg_option.h:712
Pkt6Ptr processSolicit(AllocEngine::ClientContext6 &ctx)
Processes incoming Solicit and returns response.
Definition: dhcp6_srv.cc:3080
static HWAddrPtr getMAC(const Pkt6Ptr &pkt)
Attempts to get a MAC/hardware address using configured sources.
Definition: dhcp6_srv.cc:1969
void processPacketPktSend(hooks::CalloutHandlePtr &callout_handle, Pkt6Ptr &query, Pkt6Ptr &rsp)
Executes pkt6_send callout.
Definition: dhcp6_srv.cc:1102
RequirementLevel
defines if certain option may, must or must not appear
Definition: dhcp6_srv.h:74
Context information for the DHCPv6 leases allocation.
Definition: alloc_engine.h:459
bool testServerID(const Pkt6Ptr &pkt)
Compare received server id with our server id.
Definition: dhcp6_srv.cc:314
void setStatusCode(boost::shared_ptr< Option6IA > &container, const OptionPtr &status)
A simple utility method that sets the status code.
Definition: dhcp6_srv.cc:3562
void processPacketAndSendResponseNoThrow(Pkt6Ptr &query)
Process a single incoming DHCPv6 packet and sends the response.
Definition: dhcp6_srv.cc:628
void requiredClassify(const Pkt6Ptr &pkt, AllocEngine::ClientContext6 &ctx)
Assigns incoming packet to zero or more classes (required pass).
Definition: dhcp6_srv.cc:3840
void appendRequestedVendorOptions(const Pkt6Ptr &question, Pkt6Ptr &answer, AllocEngine::ClientContext6 &ctx, const CfgOptionList &co_list)
Appends requested vendor options to server's answer.
Definition: dhcp6_srv.cc:1404
static int getHookIndexBuffer6Send()
Returns the index of the buffer6_send hook.
Definition: dhcp6_srv.cc:4242
void buildCfgOptionList(const Pkt6Ptr &question, AllocEngine::ClientContext6 &ctx, CfgOptionList &co_list)
Build the configured option list.
Definition: dhcp6_srv.cc:1277
OptionPtr releaseIA_NA(const DuidPtr &duid, const Pkt6Ptr &query, int &general_status, boost::shared_ptr< Option6IA > ia, Lease6Ptr &old_lease)
Releases specific IA_NA option.
Definition: dhcp6_srv.cc:2748
bool sanityCheck(const Pkt6Ptr &pkt)
Verifies if specified packet meets RFC requirements.
Definition: dhcp6_srv.cc:1529
virtual ~Dhcpv6Srv()
Destructor. Used during DHCPv6 service shutdown.
Definition: dhcp6_srv.cc:263
NetworkStatePtr network_state_
Holds information about disabled DHCP service and/or disabled subnet/network scopes.
Definition: dhcp6_srv.h:1171
std::queue< isc::dhcp_ddns::NameChangeRequest > name_change_reqs_
Holds a list of isc::dhcp_ddns::NameChangeRequest objects, which are waiting for sending to kea-dhcp-...
Definition: dhcp6_srv.h:1167
std::vector< Lease6Ptr > Lease6Collection
A collection of IPv6 leases.
Definition: lease.h:640
void processClientFqdn(const Pkt6Ptr &question, const Pkt6Ptr &answer, AllocEngine::ClientContext6 &ctx)
Processes Client FQDN Option.
Definition: dhcp6_srv.cc:1770
OptionPtr assignIA_NA(const isc::dhcp::Pkt6Ptr &query, const isc::dhcp::Pkt6Ptr &answer, AllocEngine::ClientContext6 &ctx, Option6IAPtr ia)
Processes IA_NA option (and assigns addresses if necessary).
Definition: dhcp6_srv.cc:1984
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
Pkt6Ptr processRequest(AllocEngine::ClientContext6 &ctx)
Processes incoming Request and returns Reply response.
Definition: dhcp6_srv.cc:3146
void discardPackets()
Discards parked packets Clears the packet parking lots of all packets.
Definition: dhcp6_srv.cc:4259
Pkt6Ptr processRelease(AllocEngine::ClientContext6 &ctx)
Process incoming Release message.
Definition: dhcp6_srv.cc:3338
virtual void d2ClientErrorHandler(const dhcp_ddns::NameChangeSender::Result result, dhcp_ddns::NameChangeRequestPtr &ncr)
Implements the error handler for DHCP_DDNS IO errors.
Definition: dhcp6_srv.cc:4071
uint16_t client_port_
UDP port number to which server sends all responses.
Definition: dhcp6_srv.h:1114
This is a base class for exceptions thrown from the DNS library module.
Defines the logger used by the top-level component of kea-dhcp-ddns.
void initContext(const Pkt6Ptr &pkt, AllocEngine::ClientContext6 &ctx, bool &drop)
Initializes client context for specified packet.
Definition: dhcp6_srv.cc:358
CBControlDHCPv6Ptr getCBControl() const
Returns an object which controls access to the configuration backends.
Definition: dhcp6_srv.h:124
void checkDynamicSubnetChange(const Pkt6Ptr &question, Pkt6Ptr &answer, AllocEngine::ClientContext6 &ctx, const Subnet6Ptr orig_subnet)
Iterates over new leases, update stale DNS entries.
Definition: dhcp6_srv.cc:4302
void run_one()
Main server processing step.
Definition: dhcp6_srv.cc:551
OptionPtr releaseIA_PD(const DuidPtr &duid, const Pkt6Ptr &query, int &general_status, boost::shared_ptr< Option6IA > ia, Lease6Ptr &old_lease)
Releases specific IA_PD option.
Definition: dhcp6_srv.cc:2920
void startD2()
Starts DHCP_DDNS client IO if DDNS updates are enabled.
Definition: dhcp6_srv.cc:4050
This exception is thrown when DHCP server hits the error which should result in discarding the messag...
Definition: dhcp6_srv.h:48
boost::shared_ptr< CalloutHandle > CalloutHandlePtr
A shared pointer to a CalloutHandle object.
void processDhcp6QueryAndSendResponse(Pkt6Ptr &query, Pkt6Ptr &rsp)
Process a single incoming DHCPv6 query.
Definition: dhcp6_srv.cc:836
asiolink::IOServicePtr & getIOService()
Returns pointer to the IO service used by the server.
Definition: dhcp6_srv.h:110
Pkt6Ptr processRenew(AllocEngine::ClientContext6 &ctx)
Processes incoming Renew message.
Definition: dhcp6_srv.cc:3180
void stopD2()
Stops DHCP_DDNS client IO if DDNS updates are enabled.
Definition: dhcp6_srv.cc:4062
boost::shared_ptr< NetworkState > NetworkStatePtr
Pointer to the NetworkState object.
isc::dhcp::Subnet6Ptr selectSubnet(const Pkt6Ptr &question, bool &drop)
Selects a subnet for a given client's packet.
Definition: dhcp6_srv.cc:1644
OptionPtr serverid_
Server DUID (to be sent in server-identifier option)
Definition: dhcp6_srv.h:1145
Base class for all services.
Definition: daemon.h:48
void processDhcp6Query(Pkt6Ptr &query, Pkt6Ptr &rsp)
Process a single incoming DHCPv6 query.
Definition: dhcp6_srv.cc:854
void setPacketStatisticsDefaults()
This function sets statistics related to DHCPv6 packets processing to their initial values...
Definition: dhcp6_srv.cc:253
boost::shared_ptr< AllocEngine > alloc_engine_
Allocation Engine.
Definition: dhcp6_srv.h:1163
Pkt6Ptr processDecline(AllocEngine::ClientContext6 &ctx)
Process incoming Decline message.
Definition: dhcp6_srv.cc:3364
void processDhcp4Query(const Pkt6Ptr &dhcp4_query)
Processes incoming DHCPv4-query message.
Definition: dhcp6_srv.cc:3701
CBControlDHCPv6Ptr cb_control_
Controls access to the configuration backends.
Definition: dhcp6_srv.h:1174
void processPacketAndSendResponse(Pkt6Ptr &query)
Process a single incoming DHCPv6 packet and sends the response.
Definition: dhcp6_srv.cc:640
boost::shared_ptr< Subnet6 > Subnet6Ptr
A pointer to a Subnet6 object.
Definition: subnet.h:670
OptionPtr assignIA_PD(const Pkt6Ptr &query, const isc::dhcp::Pkt6Ptr &answer, AllocEngine::ClientContext6 &ctx, boost::shared_ptr< Option6IA > ia)
Processes IA_PD option (and assigns prefixes if necessary).
Definition: dhcp6_srv.cc:2125
void setTeeTimes(uint32_t preferred_lft, const Subnet6Ptr &subnet, Option6IAPtr &resp)
Sets the T1 and T2 timers in the outbound IA.
Definition: dhcp6_srv.cc:4266
void sendResponseNoThrow(hooks::CalloutHandlePtr &callout_handle, Pkt6Ptr &query, Pkt6Ptr &rsp)
Process an unparked DHCPv6 packet and sends the response.
Definition: dhcp6_srv.cc:1088
bool declineLeases(const Pkt6Ptr &decline, Pkt6Ptr &reply, AllocEngine::ClientContext6 &ctx)
Attempts to decline all leases in specified Decline message.
Definition: dhcp6_srv.cc:3394
DHCPv4 and DHCPv6 allocation engine.
Definition: alloc_engine.h:63
boost::shared_ptr< Lease6 > Lease6Ptr
Pointer to a Lease6 structure.
Definition: lease.h:492
Dhcpv6Srv(uint16_t server_port=DHCP6_SERVER_PORT, uint16_t client_port=0)
Default constructor.
Definition: dhcp6_srv.cc:209
This file provides the classes needed to embody, compose, and decompose DNS update requests that are ...
Defines the D2ClientMgr class.
static const std::string VENDOR_CLASS_PREFIX
this is a prefix added to the content of vendor-class option
Definition: dhcp6_srv.h:914
OptionPtr extendIA_NA(const Pkt6Ptr &query, const Pkt6Ptr &answer, AllocEngine::ClientContext6 &ctx, Option6IAPtr ia)
Extends lifetime of the specific IA_NA option.
Definition: dhcp6_srv.cc:2267
bool declineLease(const Pkt6Ptr &decline, const Lease6Ptr lease, boost::shared_ptr< Option6IA > ia_rsp)
Declines specific IPv6 lease.
Definition: dhcp6_srv.cc:3571
static uint16_t checkRelaySourcePort(const Pkt6Ptr &query)
Used for DHCPv4-over-DHCPv6 too.
Definition: dhcp6_srv.cc:4147
DHCPv6 server service.
Definition: dhcp6_srv.h:66
void copyClientOptions(const Pkt6Ptr &question, Pkt6Ptr &answer)
Copies required options from client message to server answer.
Definition: dhcp6_srv.cc:1254
Pkt6Ptr processConfirm(AllocEngine::ClientContext6 &ctx)
Processes incoming Confirm message and returns Reply.
Definition: dhcp6_srv.cc:3248
void createNameChangeRequests(const Pkt6Ptr &answer, AllocEngine::ClientContext6 &ctx)
Creates a number of isc::dhcp_ddns::NameChangeRequest objects based on the DHCPv6 Client FQDN Option...
Definition: dhcp6_srv.cc:1842
void processPacket(Pkt6Ptr &query, Pkt6Ptr &rsp)
Process a single incoming DHCPv6 packet.
Definition: dhcp6_srv.cc:652
OptionPtr declineIA(const Pkt6Ptr &decline, const DuidPtr &duid, int &general_status, boost::shared_ptr< Option6IA > ia, Lease6Collection &new_leases)
Declines leases in a single IA_NA option.
Definition: dhcp6_srv.cc:3437