Kea 3.3.1
check_exists_remove.cc
Go to the documentation of this file.
1// Copyright (C) 2023-2024 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#include <config.h>
8
10#include <d2srv/d2_cfg_mgr.h>
11#include <d2srv/d2_log.h>
12
13#include <functional>
14
15namespace isc {
16namespace d2 {
17
18
19// CheckExistsRemoveTransaction states
23
24// CheckExistsRemoveTransaction events
25// Currently CheckExistsRemoveTransaction does not define any events.
26
30 DdnsDomainPtr& forward_domain,
31 DdnsDomainPtr& reverse_domain,
32 D2CfgMgrPtr& cfg_mgr)
33 : NameChangeTransaction(io_service, ncr, forward_domain, reverse_domain,
34 cfg_mgr) {
35 if (ncr->getChangeType() != isc::dhcp_ddns::CHG_REMOVE) {
36 isc_throw (CheckExistsRemoveTransactionError,
37 "CheckExistsRemoveTransaction, request type must be CHG_REMOVE");
38 }
39}
40
43
44void
46 // Call superclass impl first.
48
49 // Define CheckExistsRemoveTransaction events.
50 // Currently CheckExistsRemoveTransaction does not define any events.
51 // defineEvent(TBD_EVENT, "TBD_EVT");
52}
53
54void
56 // Call superclass implementation first to verify its events. These are
57 // events common to all transactions, and they must be defined.
58 // SELECT_SERVER_EVT
59 // SERVER_SELECTED_EVT
60 // SERVER_IO_ERROR_EVT
61 // NO_MORE_SERVERS_EVT
62 // IO_COMPLETED_EVT
63 // UPDATE_OK_EVT
64 // UPDATE_FAILED_EVT
66
67 // Verify CheckExistsRemoveTransaction events by attempting to fetch them.
68 // Currently CheckExistsRemoveTransaction does not define any events.
69 // getEvent(TBD_EVENT);
70}
71
72void
74 // Call superclass impl first.
76
77 // Define CheckExistsRemoveTransaction states.
78 defineState(READY_ST, "READY_ST",
80
81 defineState(SELECTING_FWD_SERVER_ST, "SELECTING_FWD_SERVER_ST",
83 this));
84
85 defineState(SELECTING_REV_SERVER_ST, "SELECTING_REV_SERVER_ST",
87 this));
88
89 defineState(REMOVING_FWD_ADDRS_ST, "REMOVING_FWD_ADDRS_ST",
91 this));
92
93 defineState(REMOVING_FWD_RRS_ST, "REMOVING_FWD_RRS_ST",
95 this));
96
97 defineState(REMOVING_REV_PTRS_ST, "REMOVING_REV_PTRS_ST",
99 this));
100
101 defineState(PROCESS_TRANS_OK_ST, "PROCESS_TRANS_OK_ST",
103 this));
104
105 defineState(PROCESS_TRANS_FAILED_ST, "PROCESS_TRANS_FAILED_ST",
107 this));
108}
109
110void
112 // Call superclass implementation first to verify its states. These are
113 // states common to all transactions, and they must be defined.
114 // READY_ST
115 // SELECTING_FWD_SERVER_ST
116 // SELECTING_REV_SERVER_ST
117 // PROCESS_TRANS_OK_ST
118 // PROCESS_TRANS_FAILED_ST
120
121 // Verify CheckExistsRemoveTransaction states by attempting to fetch them.
125}
126
127void
129 switch(getNextEvent()) {
130 case START_EVT:
131 if (getForwardDomain()) {
132 // Request includes a forward change, do that first.
134 } else {
135 // Reverse change only, transition accordingly.
137 }
138
139 break;
140 default:
141 // Event is invalid.
143 "Wrong event for context: " << getContextStr());
144 }
145}
146
147void
149 switch(getNextEvent()) {
151 // First time through for this transaction, so initialize server
152 // selection.
154 break;
156 // We failed to communicate with current server. Attempt to select
157 // another one below.
158 break;
159 default:
160 // Event is invalid.
162 "Wrong event for context: " << getContextStr());
163 }
164
165 // Select the next server from the list of forward servers.
166 if (selectNextServer()) {
167 // We have a server to try.
169 } else {
170 // Server list is exhausted, so fail the transaction.
172 }
173}
174
175void
177 if (doOnEntry()) {
178 // Clear the update attempts count on initial transition.
180 }
181
182 switch(getNextEvent()) {
184 try {
187 } catch (const std::exception& ex) {
188 // While unlikely, the build might fail if we have invalid
189 // data. Should that be the case, we need to fail the
190 // transaction.
193 .arg(getRequestId())
194 .arg(getNcr()->toText())
195 .arg(ex.what());
197 break;
198 }
199
200 // Call sendUpdate() to initiate the async send. Note it also sets
201 // next event to NOP_EVT.
202 sendUpdate("Forward A/AAAA Remove");
203 break;
204
205 case IO_COMPLETED_EVT: {
206 switch (getDnsUpdateStatus()) {
207 case DNSClient::SUCCESS: {
208 // We successfully received a response packet from the server.
209 // The RCODE will be based on a value-dependent RRset search,
210 // see RFC 2136 section 3.2.3/3.2.4.
211 const dns::Rcode& rcode = getDnsUpdateResponse()->getRcode();
212 if ((rcode == dns::Rcode::NOERROR()) ||
213 (rcode == dns::Rcode::NXRRSET())) {
214 // We were able to remove it or it wasn't there, now we
215 // need to remove any other RRs for this FQDN.
217 } else {
218 // Per RFC4703 any other value means cease.
219 // If we get not authorized should we try the next server in
220 // the list? @todo This needs some discussion perhaps.
222 .arg(getRequestId())
223 .arg(getCurrentServer()->toText())
224 .arg(getNcr()->getFqdn())
225 .arg(rcode.getCode());
227 }
228
229 break;
230 }
231
233 // No response from the server, log it and set up
234 // to select the next server for a retry.
236 .arg(getRequestId())
237 .arg(getNcr()->getFqdn())
238 .arg(getCurrentServer()->toText());
239
241 break;
242
243 case DNSClient::OTHER:
244 // We couldn't send to the current server, log it and set up
245 // to select the next server for a retry.
247 .arg(getRequestId())
248 .arg(getNcr()->getFqdn())
249 .arg(getCurrentServer()->toText());
250
252 break;
253
255 // A response was received but was corrupt. Retry it like an IO
256 // error.
258 .arg(getRequestId())
259 .arg(getCurrentServer()->toText())
260 .arg(getNcr()->getFqdn());
261
263 break;
264
265 default:
266 // Any other value and we will fail this transaction, something
267 // bigger is wrong.
270 .arg(getRequestId())
271 .arg(getDnsUpdateStatus())
272 .arg(getNcr()->getFqdn())
273 .arg(getCurrentServer()->toText());
274
276 break;
277 } // end switch on dns_status
278
279 break;
280 } // end case IO_COMPLETE_EVT
281
282 default:
283 // Event is invalid.
285 "Wrong event for context: " << getContextStr());
286 }
287}
288
289
290void
292 if (doOnEntry()) {
293 // Clear the update attempts count on initial transition.
295 }
296
297 switch(getNextEvent()) {
298 case UPDATE_OK_EVT:
300 try {
303 } catch (const std::exception& ex) {
304 // While unlikely, the build might fail if we have invalid
305 // data. Should that be the case, we need to fail the
306 // transaction.
309 .arg(getRequestId())
310 .arg(getNcr()->toText())
311 .arg(ex.what());
313 break;
314 }
315
316 // Call sendUpdate() to initiate the async send. Note it also sets
317 // next event to NOP_EVT.
318 sendUpdate("Forward RR Remove");
319 break;
320
321 case IO_COMPLETED_EVT: {
322 switch (getDnsUpdateStatus()) {
323 case DNSClient::SUCCESS: {
324 // We successfully received a response packet from the server.
325 // The RCODE will be based on a value-dependent RRset search,
326 // see RFC 2136 section 3.2.3/3.2.4.
327 const dns::Rcode& rcode = getDnsUpdateResponse()->getRcode();
328 if ((rcode == dns::Rcode::NOERROR()) ||
329 (rcode == dns::Rcode::NXRRSET()) ||
330 (rcode == dns::Rcode::YXRRSET())) {
331 // We were able to remove them or they were not there (
332 // Rcode of NXRRSET means there are no matching RRsets).
333 // In either case, we consider it success and mark it as done.
334 // YXRRSET means either a FWD RR with a different IP (client
335 // change subnets) exists OR a FWD RR of the other protocols
336 // exists, either way we want the DHCID left intact so we
337 // treat this as success too.
339
340 // If request calls for reverse update then do that next,
341 // otherwise we can process ok.
342 if (getReverseDomain()) {
344 } else {
346 }
347 } else {
348 // Per RFC4703 any other value means cease.
349 // If we get not authorized should try the next server in
350 // the list? @todo This needs some discussion perhaps.
352 .arg(getRequestId())
353 .arg(getCurrentServer()->toText())
354 .arg(getNcr()->getFqdn())
355 .arg(rcode.getCode());
357 }
358
359 break;
360 }
361
363 // No response from the server, log it and set up
364 // to select the next server for a retry.
366 .arg(getRequestId())
367 .arg(getNcr()->getFqdn())
368 .arg(getCurrentServer()->toText());
369
370 // @note If we exhaust the IO retries for the current server
371 // due to IO failures, we will abort the remaining updates.
372 // The rational is that we are only in this state, if the remove
373 // of the forward address RR succeeded (removingFwdAddrsHandler)
374 // on the current server. Therefore we should not attempt another
375 // removal on a different server. This is perhaps a point
376 // for discussion.
377 // @todo Should we go ahead with the reverse remove?
379 break;
380
381 case DNSClient::OTHER:
382 // We couldn't send to the current server, log it and set up
383 // to select the next server for a retry.
385 .arg(getRequestId())
386 .arg(getNcr()->getFqdn())
387 .arg(getCurrentServer()->toText());
388
389 // @note same commentary as in TIMEOUT above case.
391 break;
392
394 // A response was received but was corrupt. Retry it like an IO
395 // error.
397 .arg(getRequestId())
398 .arg(getCurrentServer()->toText())
399 .arg(getNcr()->getFqdn());
400
401 // If we are out of retries on this server abandon the transaction.
402 // (Same logic as the case for TIMEOUT above).
404 break;
405
406 default:
407 // Any other value and we will fail this transaction, something
408 // bigger is wrong.
411 .arg(getRequestId())
412 .arg(getDnsUpdateStatus())
413 .arg(getNcr()->getFqdn())
414 .arg(getCurrentServer()->toText());
415
417 break;
418 } // end switch on dns_status
419
420 break;
421 } // end case IO_COMPLETE_EVT
422
423 default:
424 // Event is invalid.
426 "Wrong event for context: " << getContextStr());
427 }
428}
429
430
431void
433 switch(getNextEvent()) {
435 // First time through for this transaction, so initialize server
436 // selection.
438 break;
440 // We failed to communicate with current server. Attempt to select
441 // another one below.
442 break;
443 default:
444 // Event is invalid.
446 "Wrong event for context: " << getContextStr());
447 }
448
449 // Select the next server from the list of forward servers.
450 if (selectNextServer()) {
451 // We have a server to try.
453 }
454 else {
455 // Server list is exhausted, so fail the transaction.
457 }
458}
459
460
461void
463 if (doOnEntry()) {
464 // Clear the update attempts count on initial transition.
466 }
467
468 switch(getNextEvent()) {
470 try {
473 } catch (const std::exception& ex) {
474 // While unlikely, the build might fail if we have invalid
475 // data. Should that be the case, we need to fail the
476 // transaction.
478 .arg(getRequestId())
479 .arg(getNcr()->toText())
480 .arg(ex.what());
482 break;
483 }
484
485 // Call sendUpdate() to initiate the async send. Note it also sets
486 // next event to NOP_EVT.
487 sendUpdate("Reverse Remove");
488 break;
489
490 case IO_COMPLETED_EVT: {
491 switch (getDnsUpdateStatus()) {
492 case DNSClient::SUCCESS: {
493 // We successfully received a response packet from the server.
494 // The RCODE will be based on a value-dependent RRset search,
495 // see RFC 2136 section 3.2.3/3.2.4.
496 const dns::Rcode& rcode = getDnsUpdateResponse()->getRcode();
497 if ((rcode == dns::Rcode::NOERROR()) ||
498 (rcode == dns::Rcode::NXRRSET())) {
499 // We were able to remove the reverse mapping or they were
500 // not there (Rcode of NXRRSET means there are no matching
501 // RRsets). In either case, mark it as done.
504 } else {
505 // Per RFC4703 any other value means cease.
506 // If we get not authorized should try the next server in
507 // the list? @todo This needs some discussion perhaps.
509 .arg(getRequestId())
510 .arg(getCurrentServer()->toText())
511 .arg(getNcr()->getFqdn())
512 .arg(rcode.getCode());
514 }
515
516 break;
517 }
518
520 // No response from the server, log it and set up
521 // to select the next server for a retry.
523 .arg(getRequestId())
524 .arg(getNcr()->getFqdn())
525 .arg(getCurrentServer()->toText());
526
527 // If we are out of retries on this server, we go back and start
528 // all over on a new server.
530 break;
531
532 case DNSClient::OTHER:
533 // We couldn't send to the current server, log it and set up
534 // to select the next server for a retry.
536 .arg(getRequestId())
537 .arg(getNcr()->getFqdn())
538 .arg(getCurrentServer()->toText());
539
540 // If we are out of retries on this server, we go back and start
541 // all over on a new server.
543 break;
544
546 // A response was received but was corrupt. Retry it like an IO
547 // error.
549 .arg(getRequestId())
550 .arg(getCurrentServer()->toText())
551 .arg(getNcr()->getFqdn());
552
553 // If we are out of retries on this server, we go back and start
554 // all over on a new server.
556 break;
557
558 default:
559 // Any other value and we will fail this transaction, something
560 // bigger is wrong.
563 .arg(getRequestId())
564 .arg(getDnsUpdateStatus())
565 .arg(getNcr()->getFqdn())
566 .arg(getCurrentServer()->toText());
567
569 break;
570 } // end switch on dns_status
571
572 break;
573 } // end case IO_COMPLETE_EVT
574
575 default:
576 // Event is invalid.
578 "Wrong event for context: " << getContextStr());
579 }
580}
581
582
583void
585 switch(getNextEvent()) {
586 case UPDATE_OK_EVT:
588 .arg(getRequestId())
589 .arg(getNcr()->toText());
591 endModel();
592 break;
593 default:
594 // Event is invalid.
596 "Wrong event for context: " << getContextStr());
597 }
598}
599
600void
602 switch(getNextEvent()) {
608 .arg(getRequestId())
610 endModel();
611 break;
612 default:
613 // Event is invalid.
615 "Wrong event for context: " << getContextStr());
616 }
617}
618
619void
621 // Construct an empty request.
623
624 // Content on this request is based on RFC 4703, section 5.5, paragraph 4.
625 // Construct dns::Name from NCR fqdn.
626 dns::Name fqdn(dns::Name(getNcr()->getFqdn()));
627 // First build the Prerequisite Section
628
629 // Create an DHCID exists prerequisite RR and add it to the
630 // pre-requisite section
631 // Based on RFC 2136, section 2.4.1
632 dns::RRsetPtr prereq(new dns::RRset(fqdn, dns::RRClass::ANY(),
634 request->addRRset(D2UpdateMessage::SECTION_PREREQUISITE, prereq);
635
636 // Next build the Update Section
637
638 // Create the FQDN/IP 'delete' RR and add it to the update section.
639 // Add the RR to update section.
640 // Based on RFC 2136 section 2.5.4
643 addLeaseAddressRdata(update);
644 request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
645
646 // Set the transaction's update request to the new request.
647 setDnsUpdateRequest(request);
648}
649
650void
652 // Construct an empty request.
654
655 // Construct dns::Name from NCR fqdn.
656 dns::Name fqdn(dns::Name(getNcr()->getFqdn()));
657
658 // First build the Prerequisite Section.
659
660 // Create an assertion that there are no A RRs for the FQDN.
661 // Add it to the pre-reqs.
662 // Based on RFC 2136, section 2.4.3.
665 request->addRRset(D2UpdateMessage::SECTION_PREREQUISITE, prereq);
666
667 // Create an assertion that there are no AAAA RRs for the FQDN.
668 // Add it to the pre-reqs.
669 // Based on RFC 2136, section 2.4.3.
670 prereq.reset(new dns::RRset(fqdn, dns::RRClass::NONE(),
672 request->addRRset(D2UpdateMessage::SECTION_PREREQUISITE, prereq);
673
674 // Next build the Update Section.
675
676 // Create the 'delete' of all DHCID RRs for FQDN.
677 // Add the RR to update section.
678 // Based on RFC 2136, section 2.5.2.
679 dns::RRsetPtr update(new dns::RRset(fqdn, dns::RRClass::ANY(),
681 request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
682
683 // Set the transaction's update request to the new request.
684 setDnsUpdateRequest(request);
685}
686
687void
689 // Construct an empty request.
691
692 // Create the reverse IP address "FQDN".
693 std::string rev_addr = D2CfgMgr::reverseIpAddress(getNcr()->getIpAddress());
694 dns::Name rev_ip(rev_addr);
695
696 // Content on this request is based on RFC 4703, section 5.5, paragraph 2.
697 // First build the Prerequisite Section.
698 // (Note that per RFC 4703, section 5.4, there is no need to validate
699 // DHCID RR for PTR entries.)
700
701 // Create an assertion that the PTRDNAME in the PTR record matches the
702 // client's FQDN for the address that was released.
703 // Based on RFC 2136, section 3.2.3
704 dns::RRsetPtr prereq(new dns::RRset(rev_ip, dns::RRClass::IN(),
706 addPtrRdata(prereq);
707 request->addRRset(D2UpdateMessage::SECTION_PREREQUISITE, prereq);
708
709 // Now, build the Update section.
710
711 // Create a delete of any RRs for the FQDN and add it to update section.
712 // Based on RFC 2136, section 3.4.2.3
713 dns::RRsetPtr update(new dns::RRset(rev_ip, dns::RRClass::ANY(),
715 request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
716
717 // Set the transaction's update request to the new request.
718 setDnsUpdateRequest(request);
719}
720
721} // namespace isc::d2
722} // namespace isc
This file defines the class CheckExistsRemoveTransaction.
Thrown if the CheckExistsRemoveTransaction encounters a general error.
void buildRemoveRevPtrsRequest()
Builds a DNS request to remove a reverse DNS entry for a FQDN.
virtual void defineEvents()
Adds events defined by CheckExistsRemoveTransaction to the event set.
void processRemoveFailedHandler()
State handler for PROCESS_TRANS_FAILED_ST.
CheckExistsRemoveTransaction(asiolink::IOServicePtr &io_service, dhcp_ddns::NameChangeRequestPtr &ncr, DdnsDomainPtr &forward_domain, DdnsDomainPtr &reverse_domain, D2CfgMgrPtr &cfg_mgr)
Event sent when replace attempt to fails with address not in use.
void removingFwdRRsHandler()
State handler for REMOVING_FWD_RRS_ST.
void buildRemoveFwdAddressRequest()
Builds a DNS request to remove a forward DNS address for a FQDN.
virtual void verifyStates()
Validates the contents of the set of states.
void processRemoveOkHandler()
State handler for PROCESS_TRANS_OK_ST.
static const int REMOVING_REV_PTRS_ST
State that attempts to remove reverse PTR records.
void readyHandler()
State handler for READY_ST.
virtual void verifyEvents()
Validates the contents of the set of events.
static const int REMOVING_FWD_ADDRS_ST
State that attempts to remove specific forward address record.
void buildRemoveFwdRRsRequest()
Builds a DNS request to remove all forward DNS RRs for a FQDN.
void selectingRevServerHandler()
State handler for SELECTING_REV_SERVER_ST.
void selectingFwdServerHandler()
State handler for SELECTING_FWD_SERVER_ST.
void removingFwdAddrsHandler()
State handler for REMOVING_FWD_ADDRS_ST.
virtual void defineStates()
Adds states defined by CheckExistsRemoveTransaction to the state set.
void removingRevPtrsHandler()
State handler for REMOVING_REV_PTRS_ST.
static const int REMOVING_FWD_RRS_ST
State that attempts to remove any other forward RRs for the DHCID.
static std::string reverseIpAddress(const std::string &address)
Generate a reverse order string for the given IP address.
@ TIMEOUT
No response, timeout.
Definition dns_client.h:60
@ OTHER
Other, unclassified error.
Definition dns_client.h:63
@ INVALID_RESPONSE
Response received but invalid.
Definition dns_client.h:62
@ SUCCESS
Response received and is ok.
Definition dns_client.h:59
static const int SELECTING_FWD_SERVER_ST
State in which forward DNS server selection is done.
Definition nc_trans.h:91
void retryTransition(const int fail_to_state)
Determines the state and next event based on update attempts.
Definition nc_trans.cc:286
static const int PROCESS_TRANS_FAILED_ST
State which processes an unsuccessful transaction conclusion.
Definition nc_trans.h:105
static const int READY_ST
State from which a transaction is started.
Definition nc_trans.h:83
const D2UpdateMessagePtr & getDnsUpdateResponse() const
Fetches the most recent DNS update response packet.
Definition nc_trans.cc:553
static const int PROCESS_TRANS_OK_ST
State which processes successful transaction conclusion.
Definition nc_trans.h:102
static const int UPDATE_OK_EVT
Issued when the attempted update successfully completed.
Definition nc_trans.h:135
virtual void verifyStates()
Validates the contents of the set of states.
Definition nc_trans.cc:265
virtual D2UpdateMessagePtr prepNewRequest(DdnsDomainPtr domain)
Creates a new DNS update request based on the given domain.
Definition nc_trans.cc:343
NameChangeTransaction(asiolink::IOServicePtr &io_service, dhcp_ddns::NameChangeRequestPtr &ncr, DdnsDomainPtr &forward_domain, DdnsDomainPtr &reverse_domain, D2CfgMgrPtr &cfg_mgr)
Constructor.
Definition nc_trans.cc:69
static const int UPDATE_FAILED_EVT
Issued when the attempted update fails to complete.
Definition nc_trans.h:141
const dns::RRType & getAddressRRType() const
Returns the DHCP data type for the lease address.
Definition nc_trans.cc:573
const dhcp_ddns::NameChangeRequestPtr & getNcr() const
Fetches the NameChangeRequest for this transaction.
Definition nc_trans.cc:425
void initServerSelection(const DdnsDomainPtr &domain)
Initializes server selection from the given DDNS domain.
Definition nc_trans.cc:455
static const int IO_COMPLETED_EVT
Issued when a DNS update packet exchange has completed.
Definition nc_trans.h:130
static const int SELECT_SERVER_EVT
Issued when a server needs to be selected.
Definition nc_trans.h:113
static const int SERVER_IO_ERROR_EVT
Issued when an update fails due to an IO error.
Definition nc_trans.h:119
std::string getRequestId() const
Fetches the request id that identifies this transaction.
Definition nc_trans.cc:435
virtual void defineStates()
Adds states defined by NameChangeTransaction to the state set.
Definition nc_trans.cc:257
void addLeaseAddressRdata(dns::RRsetPtr &rrset)
Adds an RData for the lease address to the given RRset.
Definition nc_trans.cc:366
virtual void sendUpdate(const std::string &comment="")
Send the update request to the current server.
Definition nc_trans.cc:192
void setForwardChangeCompleted(const bool value)
Sets the forward change completion flag to the given value.
Definition nc_trans.cc:328
void addPtrRdata(dns::RRsetPtr &rrset)
Adds an RData for the lease FQDN to the given RRset.
Definition nc_trans.cc:408
bool selectNextServer()
Selects the next server in the current server list.
Definition nc_trans.cc:467
void setNcrStatus(const dhcp_ddns::NameChangeStatus &status)
Sets the status of the transaction's NameChangeRequest.
Definition nc_trans.cc:538
DdnsDomainPtr & getForwardDomain()
Fetches the forward DdnsDomain.
Definition nc_trans.cc:445
virtual void verifyEvents()
Validates the contents of the set of events.
Definition nc_trans.cc:242
void clearDnsUpdateRequest()
Destroys the current update request packet.
Definition nc_trans.cc:303
void clearUpdateAttempts()
Resets the update attempts count.
Definition nc_trans.cc:308
static const int SELECTING_REV_SERVER_ST
State in which reverse DNS server selection is done.
Definition nc_trans.h:99
DNSClient::Status getDnsUpdateStatus() const
Fetches the most recent DNS update status.
Definition nc_trans.cc:548
void setDnsUpdateRequest(D2UpdateMessagePtr &request)
Sets the update request packet to the given packet.
Definition nc_trans.cc:298
static const int NO_MORE_SERVERS_EVT
Issued when there are no more servers from which to select.
Definition nc_trans.h:125
virtual void defineEvents()
Adds events defined by NameChangeTransaction to the event set.
Definition nc_trans.cc:227
void setReverseChangeCompleted(const bool value)
Sets the reverse change completion flag to the given value.
Definition nc_trans.cc:333
const DnsServerInfoPtr & getCurrentServer() const
Fetches the currently selected server.
Definition nc_trans.cc:533
static const int SERVER_SELECTED_EVT
Issued when a server has been selected.
Definition nc_trans.h:116
DdnsDomainPtr & getReverseDomain()
Fetches the reverse DdnsDomain.
Definition nc_trans.cc:450
std::string transactionOutcomeString() const
Returns a string version of transaction outcome.
Definition nc_trans.cc:170
The Name class encapsulates DNS names.
Definition name.h:219
static const RRClass & ANY()
Definition rrclass.h:298
static const RRClass & NONE()
Definition rrclass.h:316
static const RRClass & IN()
Definition rrclass.h:304
The RRTTL class encapsulates TTLs used in DNS resource records.
Definition rrttl.h:51
static const RRType & ANY()
Definition rrtype.h:345
static const RRType & AAAA()
Definition rrtype.h:315
static const RRType & PTR()
Definition rrtype.h:303
static const RRType & DHCID()
Definition rrtype.h:327
static const RRType & A()
Definition rrtype.h:279
The RRset class is a concrete derived class of BasicRRset which contains a pointer to an additional R...
Definition rrset.h:844
DNS Response Codes (RCODEs) class.
Definition rcode.h:40
static const Rcode & NOERROR()
A constant object for the NOERROR Rcode (see Rcode::NOERROR_CODE).
Definition rcode.h:228
static const Rcode & NXRRSET()
A constant object for the NXRRSET Rcode (see Rcode::NXRRSET_CODE).
Definition rcode.h:276
uint16_t getCode() const
Returns the Rcode code value.
Definition rcode.h:106
static const Rcode & YXRRSET()
A constant object for the YXRRSET Rcode (see Rcode::YXRRSET_CODE).
Definition rcode.h:270
void endModel()
Conducts a normal transition to the end of the model.
const StatePtr getStateInternal(int value)
Fetches the state referred to by value.
bool doOnEntry()
Checks if on entry flag is true.
static const int START_EVT
Event issued to start the model execution.
void defineState(int value, const std::string &label, StateHandler handler, const StatePausing &state_pausing=STATE_PAUSE_NEVER)
Adds an state value and associated label to the set of states.
void transition(int state, int event)
Sets up the model to transition into given state with a given event.
int getNextEvent() const
Fetches the model's next event.
std::string getContextStr() const
Convenience method which returns a string rendition of the current state and next event.
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
#define LOG_ERROR(LOGGER, MESSAGE)
Macro to conveniently test error output and log it.
Definition macros.h:32
#define LOG_INFO(LOGGER, MESSAGE)
Macro to conveniently test info output and log it.
Definition macros.h:20
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_ADDRS_IO_ERROR
Definition d2_messages.h:29
boost::shared_ptr< D2UpdateMessage > D2UpdateMessagePtr
Pointer to the DNS Update Message.
boost::shared_ptr< DdnsDomain > DdnsDomainPtr
Defines a pointer for DdnsDomain instances.
Definition d2_config.h:624
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_RRS_TIMEOUT
Definition d2_messages.h:38
const isc::log::MessageID DHCP_DDNS_REVERSE_REMOVE_RESP_CORRUPT
Definition d2_messages.h:74
boost::shared_ptr< D2CfgMgr > D2CfgMgrPtr
Defines a shared pointer to D2CfgMgr.
Definition d2_cfg_mgr.h:367
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_RRS_RESP_CORRUPT
Definition d2_messages.h:37
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_ADDRS_REJECTED
Definition d2_messages.h:30
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_ADDRS_RESP_CORRUPT
Definition d2_messages.h:31
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_RRS_REJECTED
Definition d2_messages.h:36
const isc::log::MessageID DHCP_DDNS_REMOVE_SUCCEEDED
Definition d2_messages.h:68
isc::log::Logger d2_to_dns_logger("d2-to-dns")
Definition d2_log.h:20
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_RRS_BUILD_FAILURE
Definition d2_messages.h:34
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_ADDRS_BUILD_FAILURE
Definition d2_messages.h:28
const isc::log::MessageID DHCP_DDNS_REVERSE_REMOVE_TIMEOUT
Definition d2_messages.h:75
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_RRS_BAD_DNSCLIENT_STATUS
Definition d2_messages.h:33
const isc::log::MessageID DHCP_DDNS_REVERSE_REMOVE_IO_ERROR
Definition d2_messages.h:72
const isc::log::MessageID DHCP_DDNS_REVERSE_REMOVE_BAD_DNSCLIENT_STATUS
Definition d2_messages.h:70
const isc::log::MessageID DHCP_DDNS_REVERSE_REMOVE_BUILD_FAILURE
Definition d2_messages.h:71
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_ADDRS_TIMEOUT
Definition d2_messages.h:32
const isc::log::MessageID DHCP_DDNS_REMOVE_FAILED
Definition d2_messages.h:67
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_ADDRS_BAD_DNSCLIENT_STATUS
Definition d2_messages.h:27
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_RRS_IO_ERROR
Definition d2_messages.h:35
const isc::log::MessageID DHCP_DDNS_REVERSE_REMOVE_REJECTED
Definition d2_messages.h:73
boost::shared_ptr< NameChangeRequest > NameChangeRequestPtr
Defines a pointer to a NameChangeRequest.
Definition ncr_msg.h:241
boost::shared_ptr< AbstractRRset > RRsetPtr
A pointer-like type pointing to an RRset object.
Definition rrset.h:50
Defines the logger used by the top-level component of kea-lfc.