Kea 2.5.8
nc_remove.cc
Go to the documentation of this file.
1// Copyright (C) 2013-2023 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
9#include <d2/nc_remove.h>
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// NameRemoveTransaction states
23
24// NameRemoveTransaction events
25// Currently NameRemoveTransaction 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) {
37 "NameRemoveTransaction, request type must be CHG_REMOVE");
38 }
39}
40
42}
43
44void
46 // Call superclass impl first.
48
49 // Define NameRemoveTransaction events.
50 // Currently NameRemoveTransaction 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 NameRemoveTransaction events by attempting to fetch them.
68 // Currently NameRemoveTransaction does not define any events.
69 // getEvent(TBD_EVENT);
70}
71
72void
74 // Call superclass impl first.
76
77 // Define NameRemoveTransaction states.
78 defineState(READY_ST, "READY_ST",
79 std::bind(&NameRemoveTransaction::readyHandler, this));
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 NameRemoveTransaction 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 // We were able to remove them or they were not there (
331 // Rcode of NXRRSET means there are no matching RRsets).
332 // In either case, we consider it success and mark it as done.
334
335 // If request calls for reverse update then do that next,
336 // otherwise we can process ok.
337 if (getReverseDomain()) {
339 } else {
341 }
342 } else {
343 // Per RFC4703 any other value means cease.
344 // If we get not authorized should try the next server in
345 // the list? @todo This needs some discussion perhaps.
347 .arg(getRequestId())
348 .arg(getCurrentServer()->toText())
349 .arg(getNcr()->getFqdn())
350 .arg(rcode.getCode());
352 }
353
354 break;
355 }
356
358 // No response from the server, log it and set up
359 // to select the next server for a retry.
361 .arg(getRequestId())
362 .arg(getNcr()->getFqdn())
363 .arg(getCurrentServer()->toText());
364
365 // @note If we exhaust the IO retries for the current server
366 // due to IO failures, we will abort the remaining updates.
367 // The rational is that we are only in this state, if the remove
368 // of the forward address RR succeeded (removingFwdAddrsHandler)
369 // on the current server. Therefore we should not attempt another
370 // removal on a different server. This is perhaps a point
371 // for discussion.
372 // @todo Should we go ahead with the reverse remove?
374 break;
375
376 case DNSClient::OTHER:
377 // We couldn't send to the current server, log it and set up
378 // to select the next server for a retry.
380 .arg(getRequestId())
381 .arg(getNcr()->getFqdn())
382 .arg(getCurrentServer()->toText());
383
384 // @note same commentary as in TIMEOUT above case.
386 break;
387
389 // A response was received but was corrupt. Retry it like an IO
390 // error.
392 .arg(getRequestId())
393 .arg(getCurrentServer()->toText())
394 .arg(getNcr()->getFqdn());
395
396 // If we are out of retries on this server abandon the transaction.
397 // (Same logic as the case for TIMEOUT above).
399 break;
400
401 default:
402 // Any other value and we will fail this transaction, something
403 // bigger is wrong.
406 .arg(getRequestId())
407 .arg(getDnsUpdateStatus())
408 .arg(getNcr()->getFqdn())
409 .arg(getCurrentServer()->toText());
410
412 break;
413 } // end switch on dns_status
414
415 break;
416 } // end case IO_COMPLETE_EVT
417
418 default:
419 // Event is invalid.
421 "Wrong event for context: " << getContextStr());
422 }
423}
424
425
426void
428 switch(getNextEvent()) {
430 // First time through for this transaction, so initialize server
431 // selection.
433 break;
435 // We failed to communicate with current server. Attempt to select
436 // another one below.
437 break;
438 default:
439 // Event is invalid.
441 "Wrong event for context: " << getContextStr());
442 }
443
444 // Select the next server from the list of forward servers.
445 if (selectNextServer()) {
446 // We have a server to try.
448 } else {
449 // Server list is exhausted, so fail the transaction.
451 }
452}
453
454
455void
457 if (doOnEntry()) {
458 // Clear the update attempts count on initial transition.
460 }
461
462 switch(getNextEvent()) {
464 try {
467 } catch (const std::exception& ex) {
468 // While unlikely, the build might fail if we have invalid
469 // data. Should that be the case, we need to fail the
470 // transaction.
472 .arg(getRequestId())
473 .arg(getNcr()->toText())
474 .arg(ex.what());
476 break;
477 }
478
479 // Call sendUpdate() to initiate the async send. Note it also sets
480 // next event to NOP_EVT.
481 sendUpdate("Reverse Remove");
482 break;
483
484 case IO_COMPLETED_EVT: {
485 switch (getDnsUpdateStatus()) {
486 case DNSClient::SUCCESS: {
487 // We successfully received a response packet from the server.
488 // The RCODE will be based on a value-dependent RRset search,
489 // see RFC 2136 section 3.2.3/3.2.4.
490 const dns::Rcode& rcode = getDnsUpdateResponse()->getRcode();
491 if ((rcode == dns::Rcode::NOERROR()) ||
492 (rcode == dns::Rcode::NXRRSET())) {
493 // We were able to remove the reverse mapping or they were
494 // not there (Rcode of NXRRSET means there are no matching
495 // RRsets). In either case, mark it as done.
498 } else {
499 // Per RFC4703 any other value means cease.
500 // If we get not authorized should try the next server in
501 // the list? @todo This needs some discussion perhaps.
503 .arg(getRequestId())
504 .arg(getCurrentServer()->toText())
505 .arg(getNcr()->getFqdn())
506 .arg(rcode.getCode());
508 }
509
510 break;
511 }
512
514 // No response from the server, log it and set up
515 // to select the next server for a retry.
517 .arg(getRequestId())
518 .arg(getNcr()->getFqdn())
519 .arg(getCurrentServer()->toText());
520
521 // If we are out of retries on this server, we go back and start
522 // all over on a new server.
524 break;
525
526 case DNSClient::OTHER:
527 // We couldn't send to the current server, log it and set up
528 // to select the next server for a retry.
530 .arg(getRequestId())
531 .arg(getNcr()->getFqdn())
532 .arg(getCurrentServer()->toText());
533
534 // If we are out of retries on this server, we go back and start
535 // all over on a new server.
537 break;
538
540 // A response was received but was corrupt. Retry it like an IO
541 // error.
543 .arg(getRequestId())
544 .arg(getCurrentServer()->toText())
545 .arg(getNcr()->getFqdn());
546
547 // If we are out of retries on this server, we go back and start
548 // all over on a new server.
550 break;
551
552 default:
553 // Any other value and we will fail this transaction, something
554 // bigger is wrong.
557 .arg(getRequestId())
558 .arg(getDnsUpdateStatus())
559 .arg(getNcr()->getFqdn())
560 .arg(getCurrentServer()->toText());
561
563 break;
564 } // end switch on dns_status
565
566 break;
567 } // end case IO_COMPLETE_EVT
568
569 default:
570 // Event is invalid.
572 "Wrong event for context: " << getContextStr());
573 }
574}
575
576
577void
579 switch(getNextEvent()) {
580 case UPDATE_OK_EVT:
582 .arg(getRequestId())
583 .arg(getNcr()->toText());
585 endModel();
586 break;
587 default:
588 // Event is invalid.
590 "Wrong event for context: " << getContextStr());
591 }
592}
593
594void
596 switch(getNextEvent()) {
602 .arg(getRequestId())
604 endModel();
605 break;
606 default:
607 // Event is invalid.
609 "Wrong event for context: " << getContextStr());
610 }
611}
612
613void
615 // Construct an empty request.
617
618 // Content on this request is based on RFC 4703, section 5.5, paragraph 4.
619 // Construct dns::Name from NCR fqdn.
620 dns::Name fqdn(dns::Name(getNcr()->getFqdn()));
621 // First build the Prerequisite Section
622
623 // Create an DHCID matches prerequisite RR and add it to the
624 // pre-requisite section
625 // Based on RFC 2136, section 2.4.2.
626 dns::RRsetPtr prereq(new dns::RRset(fqdn, dns::RRClass::IN(),
628 addDhcidRdata(prereq);
629 request->addRRset(D2UpdateMessage::SECTION_PREREQUISITE, prereq);
630
631 // Next build the Update Section
632
633 // Create the FQDN/IP 'delete' RR and add it to the update section.
634 // Add the RR to update section.
635 // Based on 2136 section 2.5.4
638 addLeaseAddressRdata(update);
639 request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
640
641 // Set the transaction's update request to the new request.
642 setDnsUpdateRequest(request);
643}
644
645void
647 // Construct an empty request.
649
650 // Construct dns::Name from NCR fqdn.
651 dns::Name fqdn(dns::Name(getNcr()->getFqdn()));
652
653 // Content on this request is based on RFC 4703, section 5.5, paragraph 5.
654 // First build the Prerequisite Section.
655
656 // Now create an DHCID matches prerequisite RR.
657 // Set the RR's RData to DHCID.
658 // Add it to the pre-requisite section.
659 // Based on RFC 2136, section 2.4.2.
660 dns::RRsetPtr prereq(new dns::RRset(fqdn, dns::RRClass::IN(),
662 addDhcidRdata(prereq);
663 request->addRRset(D2UpdateMessage::SECTION_PREREQUISITE, prereq);
664
665 // Create an assertion that there are no A RRs for the FQDN.
666 // Add it to the pre-reqs.
667 // Based on RFC 2136, section 2.4.3.
668 prereq.reset(new dns::RRset(fqdn, dns::RRClass::NONE(),
670 request->addRRset(D2UpdateMessage::SECTION_PREREQUISITE, prereq);
671
672 // Create an assertion that there are no A RRs for the FQDN.
673 // Add it to the pre-reqs.
674 // Based on RFC 2136, section 2.4.3.
675 prereq.reset(new dns::RRset(fqdn, dns::RRClass::NONE(),
677 request->addRRset(D2UpdateMessage::SECTION_PREREQUISITE, prereq);
678
679 // Next build the Update Section.
680
681 // Create the 'delete' of all RRs for FQDN.
682 // Set the message RData to lease address.
683 // Add the RR to update section.
684 // Based on RFC 2136, section 2.5.3.
685 dns::RRsetPtr update(new dns::RRset(fqdn, dns::RRClass::ANY(),
687 request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
688
689 // Set the transaction's update request to the new request.
690 setDnsUpdateRequest(request);
691}
692
693void
695 // Construct an empty request.
697
698 // Create the reverse IP address "FQDN".
699 std::string rev_addr = D2CfgMgr::reverseIpAddress(getNcr()->getIpAddress());
700 dns::Name rev_ip(rev_addr);
701
702 // Content on this request is based on RFC 4703, section 5.5, paragraph 2.
703 // First build the Prerequisite Section.
704 // (Note that per RFC 4703, section 5.4, there is no need to validate
705 // DHCID RR for PTR entries.)
706
707 // Create an assertion that the PTRDNAME in the PTR record matches the
708 // client's FQDN for the address that was released.
709 // Based on RFC 2136, section 3.2.3
710 dns::RRsetPtr prereq(new dns::RRset(rev_ip, dns::RRClass::IN(),
712 addPtrRdata(prereq);
713 request->addRRset(D2UpdateMessage::SECTION_PREREQUISITE, prereq);
714
715 // Now, build the Update section.
716
717 // Create a delete of any RRs for the FQDN and add it to update section.
718 // Based on RFC 2136, section 3.4.2.3
719 dns::RRsetPtr update(new dns::RRset(rev_ip, dns::RRClass::ANY(),
721 request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
722
723 // Set the transaction's update request to the new request.
724 setDnsUpdateRequest(request);
725}
726
727} // namespace isc::d2
728} // namespace isc
static std::string reverseIpAddress(const std::string &address)
Generate a reverse order string for the given IP address.
Definition: d2_cfg_mgr.cc:169
@ 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
Embodies the "life-cycle" required to carry out a DDNS update.
Definition: nc_trans.h:77
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:287
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:554
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:266
virtual D2UpdateMessagePtr prepNewRequest(DdnsDomainPtr domain)
Creates a new DNS update request based on the given domain.
Definition: nc_trans.cc:344
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:574
const dhcp_ddns::NameChangeRequestPtr & getNcr() const
Fetches the NameChangeRequest for this transaction.
Definition: nc_trans.cc:426
void initServerSelection(const DdnsDomainPtr &domain)
Initializes server selection from the given DDNS domain.
Definition: nc_trans.cc:456
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:436
virtual void defineStates()
Adds states defined by NameChangeTransaction to the state set.
Definition: nc_trans.cc:258
void addLeaseAddressRdata(dns::RRsetPtr &rrset)
Adds an RData for the lease address to the given RRset.
Definition: nc_trans.cc:367
virtual void sendUpdate(const std::string &comment="")
Send the update request to the current server.
Definition: nc_trans.cc:193
void setForwardChangeCompleted(const bool value)
Sets the forward change completion flag to the given value.
Definition: nc_trans.cc:329
void addPtrRdata(dns::RRsetPtr &rrset)
Adds an RData for the lease FQDN to the given RRset.
Definition: nc_trans.cc:409
bool selectNextServer()
Selects the next server in the current server list.
Definition: nc_trans.cc:468
void setNcrStatus(const dhcp_ddns::NameChangeStatus &status)
Sets the status of the transaction's NameChangeRequest.
Definition: nc_trans.cc:539
DdnsDomainPtr & getForwardDomain()
Fetches the forward DdnsDomain.
Definition: nc_trans.cc:446
virtual void verifyEvents()
Validates the contents of the set of events.
Definition: nc_trans.cc:243
void addDhcidRdata(dns::RRsetPtr &rrset)
Adds an RData for the lease client's DHCID to the given RRset.
Definition: nc_trans.cc:389
void clearDnsUpdateRequest()
Destroys the current update request packet.
Definition: nc_trans.cc:304
void clearUpdateAttempts()
Resets the update attempts count.
Definition: nc_trans.cc:309
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:549
void setDnsUpdateRequest(D2UpdateMessagePtr &request)
Sets the update request packet to the given packet.
Definition: nc_trans.cc:299
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:228
void setReverseChangeCompleted(const bool value)
Sets the reverse change completion flag to the given value.
Definition: nc_trans.cc:334
const DnsServerInfoPtr & getCurrentServer() const
Fetches the currently selected server.
Definition: nc_trans.cc:534
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:451
std::string transactionOutcomeString() const
Returns a string version of transaction outcome.
Definition: nc_trans.cc:171
Thrown if the NameRemoveTransaction encounters a general error.
Definition: nc_remove.h:18
virtual void verifyStates()
Validates the contents of the set of states.
Definition: nc_remove.cc:111
virtual void defineEvents()
Adds events defined by NameRemoveTransaction to the event set.
Definition: nc_remove.cc:45
void processRemoveOkHandler()
State handler for PROCESS_TRANS_OK_ST.
Definition: nc_remove.cc:578
void readyHandler()
State handler for READY_ST.
Definition: nc_remove.cc:128
void buildRemoveRevPtrsRequest()
Builds a DNS request to remove a reverse DNS entry for a FQDN.
Definition: nc_remove.cc:694
virtual void verifyEvents()
Validates the contents of the set of events.
Definition: nc_remove.cc:55
void selectingRevServerHandler()
State handler for SELECTING_REV_SERVER_ST.
Definition: nc_remove.cc:427
void removingFwdAddrsHandler()
State handler for REMOVING_FWD_ADDRS_ST.
Definition: nc_remove.cc:176
static const int REMOVING_REV_PTRS_ST
State that attempts to remove reverse PTR records.
Definition: nc_remove.h:62
virtual void defineStates()
Adds states defined by NameRemoveTransaction to the state set.
Definition: nc_remove.cc:73
void removingRevPtrsHandler()
State handler for REMOVING_REV_PTRS_ST.
Definition: nc_remove.cc:456
NameRemoveTransaction(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.
Definition: nc_remove.cc:28
void removingFwdRRsHandler()
State handler for REMOVING_FWD_RRS_ST.
Definition: nc_remove.cc:291
static const int REMOVING_FWD_RRS_ST
State that attempts to remove any other forward RRs for the DHCID.
Definition: nc_remove.h:59
void selectingFwdServerHandler()
State handler for SELECTING_FWD_SERVER_ST.
Definition: nc_remove.cc:148
void buildRemoveFwdAddressRequest()
Builds a DNS request to remove a forward DNS address for a FQDN.
Definition: nc_remove.cc:614
void buildRemoveFwdRRsRequest()
Builds a DNS request to remove all forward DNS RRs for a FQDN.
Definition: nc_remove.cc:646
virtual ~NameRemoveTransaction()
Destructor.
Definition: nc_remove.cc:41
void processRemoveFailedHandler()
State handler for PROCESS_TRANS_FAILED_ST.
Definition: nc_remove.cc:595
static const int REMOVING_FWD_ADDRS_ST
State that attempts to remove specific forward address record.
Definition: nc_remove.h:56
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
void endModel()
Conducts a normal transition to the end of the model.
Definition: state_model.cc:271
void defineState(unsigned 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.
Definition: state_model.cc:196
unsigned int getNextEvent() const
Fetches the model's next event.
Definition: state_model.cc:373
void transition(unsigned int state, unsigned int event)
Sets up the model to transition into given state with a given event.
Definition: state_model.cc:264
bool doOnEntry()
Checks if on entry flag is true.
Definition: state_model.cc:339
static const int START_EVT
Event issued to start the model execution.
Definition: state_model.h:295
const StatePtr getStateInternal(unsigned int value)
Fetches the state referred to by value.
Definition: state_model.cc:219
std::string getContextStr() const
Convenience method which returns a string rendition of the current state and next event.
Definition: state_model.cc:443
#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:31
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:622
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_RRS_TIMEOUT
Definition: d2_messages.h:40
const isc::log::MessageID DHCP_DDNS_REVERSE_REMOVE_RESP_CORRUPT
Definition: d2_messages.h:77
boost::shared_ptr< D2CfgMgr > D2CfgMgrPtr
Defines a shared pointer to D2CfgMgr.
Definition: d2_cfg_mgr.h:334
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_RRS_RESP_CORRUPT
Definition: d2_messages.h:39
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_ADDRS_REJECTED
Definition: d2_messages.h:32
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_ADDRS_RESP_CORRUPT
Definition: d2_messages.h:33
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_RRS_REJECTED
Definition: d2_messages.h:38
const isc::log::MessageID DHCP_DDNS_REMOVE_SUCCEEDED
Definition: d2_messages.h:71
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:36
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_ADDRS_BUILD_FAILURE
Definition: d2_messages.h:30
const isc::log::MessageID DHCP_DDNS_REVERSE_REMOVE_TIMEOUT
Definition: d2_messages.h:78
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_RRS_BAD_DNSCLIENT_STATUS
Definition: d2_messages.h:35
const isc::log::MessageID DHCP_DDNS_REVERSE_REMOVE_IO_ERROR
Definition: d2_messages.h:75
const isc::log::MessageID DHCP_DDNS_REVERSE_REMOVE_BAD_DNSCLIENT_STATUS
Definition: d2_messages.h:73
const isc::log::MessageID DHCP_DDNS_REVERSE_REMOVE_BUILD_FAILURE
Definition: d2_messages.h:74
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_ADDRS_TIMEOUT
Definition: d2_messages.h:34
const isc::log::MessageID DHCP_DDNS_REMOVE_FAILED
Definition: d2_messages.h:70
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_ADDRS_BAD_DNSCLIENT_STATUS
Definition: d2_messages.h:29
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_RRS_IO_ERROR
Definition: d2_messages.h:37
const isc::log::MessageID DHCP_DDNS_REVERSE_REMOVE_REJECTED
Definition: d2_messages.h:76
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.
This file defines the class NameRemoveTransaction.