![]() |
Kea 2.7.3
|
Embodies the "life-cycle" required to carry out a DDNS Remove update. More...
#include <check_exists_remove.h>
Public Member Functions | |
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. | |
virtual | ~CheckExistsRemoveTransaction () |
Destructor. | |
![]() | |
NameChangeTransaction (asiolink::IOServicePtr &io_service, dhcp_ddns::NameChangeRequestPtr &ncr, DdnsDomainPtr &forward_domain, DdnsDomainPtr &reverse_domain, D2CfgMgrPtr &cfg_mgr) | |
Constructor. | |
virtual | ~NameChangeTransaction () |
Destructor. | |
const dns::RRType & | getAddressRRType () const |
Returns the DHCP data type for the lease address. | |
const DnsServerInfoPtr & | getCurrentServer () const |
Fetches the currently selected server. | |
const DNSClientPtr & | getDNSClient () const |
Fetches the DNSClient instance. | |
const D2UpdateMessagePtr & | getDnsUpdateRequest () const |
Fetches the current DNS update request packet. | |
const D2UpdateMessagePtr & | getDnsUpdateResponse () const |
Fetches the most recent DNS update response packet. | |
DNSClient::Status | getDnsUpdateStatus () const |
Fetches the most recent DNS update status. | |
bool | getForwardChangeCompleted () const |
Returns whether the forward change has completed or not. | |
DdnsDomainPtr & | getForwardDomain () |
Fetches the forward DdnsDomain. | |
const dhcp_ddns::NameChangeRequestPtr & | getNcr () const |
Fetches the NameChangeRequest for this transaction. | |
dhcp_ddns::NameChangeStatus | getNcrStatus () const |
Fetches the NameChangeRequest status of the transaction. | |
std::string | getRequestId () const |
Fetches the request id that identifies this transaction. | |
bool | getReverseChangeCompleted () const |
Returns whether the reverse change has completed or not. | |
DdnsDomainPtr & | getReverseDomain () |
Fetches the reverse DdnsDomain. | |
const TransactionKey & | getTransactionKey () const |
Fetches the unique key that identifies this transaction. | |
size_t | getUpdateAttempts () const |
Fetches the update attempt count for the current update. | |
virtual void | operator() (DNSClient::Status status) |
Serves as the DNSClient IO completion event handler. | |
void | startTransaction () |
Begins execution of the transaction. | |
![]() | |
virtual | ~Callback () |
Virtual destructor. | |
![]() | |
StateModel () | |
Constructor. | |
virtual | ~StateModel () |
Destructor. | |
bool | didModelFail () const |
Returns whether or not the model failed. | |
void | endModel () |
Conducts a normal transition to the end of the model. | |
std::string | getContextStr () const |
Convenience method which returns a string rendition of the current state and next event. | |
unsigned int | getCurrState () const |
Fetches the model's current state. | |
std::string | getEventLabel (const int event) const |
Fetches the label associated with an event value. | |
unsigned int | getLastEvent () const |
Fetches the model's last event. | |
unsigned int | getNextEvent () const |
Fetches the model's next event. | |
std::string | getPrevContextStr () const |
Convenience method which returns a string rendition of the previous state and last event. | |
unsigned int | getPrevState () const |
Fetches the model's previous state. | |
std::string | getStateLabel (const int state) const |
Fetches the label associated with an state value. | |
bool | isModelDone () const |
Returns whether or not the model has finished execution. | |
bool | isModelNew () const |
Returns whether or not the model is new. | |
bool | isModelPaused () const |
Returns whether or not the model is paused. | |
bool | isModelRunning () const |
Returns whether or not the model is running. | |
bool | isModelWaiting () const |
Returns whether or not the model is waiting. | |
void | nopStateHandler () |
An empty state handler. | |
virtual void | runModel (unsigned int event) |
Processes events through the state model. | |
void | startModel (const int start_state) |
Begins execution of the model. | |
void | unpauseModel () |
Unpauses state model. | |
Static Public Attributes | |
static const int | REMOVING_FWD_ADDRS_ST = NCT_DERIVED_STATE_MIN + 1 |
State that attempts to remove specific forward address record. | |
static const int | REMOVING_FWD_RRS_ST = NCT_DERIVED_STATE_MIN + 2 |
State that attempts to remove any other forward RRs for the DHCID. | |
static const int | REMOVING_REV_PTRS_ST = NCT_DERIVED_STATE_MIN + 3 |
State that attempts to remove reverse PTR records. | |
![]() | |
static const unsigned int | DNS_UPDATE_DEFAULT_TIMEOUT = 100 |
Default time to assign to a single DNS update. | |
static const int | IO_COMPLETED_EVT = SM_DERIVED_EVENT_MIN + 5 |
Issued when a DNS update packet exchange has completed. | |
static const unsigned int | MAX_UPDATE_TRIES_PER_SERVER = 3 |
Maximum times to attempt a single update on a given server. | |
static const int | NCT_DERIVED_EVENT_MIN = SM_DERIVED_EVENT_MIN + 101 |
Value at which custom events in a derived class should begin. | |
static const int | NCT_DERIVED_STATE_MIN = SM_DERIVED_STATE_MIN + 101 |
Value at which custom states in a derived class should begin. | |
static const int | NO_MORE_SERVERS_EVT =SM_DERIVED_EVENT_MIN + 4 |
Issued when there are no more servers from which to select. | |
static const int | PROCESS_TRANS_FAILED_ST = SM_DERIVED_STATE_MIN + 5 |
State which processes an unsuccessful transaction conclusion. | |
static const int | PROCESS_TRANS_OK_ST = SM_DERIVED_STATE_MIN + 4 |
State which processes successful transaction conclusion. | |
static const int | READY_ST = SM_DERIVED_STATE_MIN + 1 |
State from which a transaction is started. | |
static const int | SELECT_SERVER_EVT = SM_DERIVED_EVENT_MIN + 1 |
Issued when a server needs to be selected. | |
static const int | SELECTING_FWD_SERVER_ST = SM_DERIVED_STATE_MIN + 2 |
State in which forward DNS server selection is done. | |
static const int | SELECTING_REV_SERVER_ST = SM_DERIVED_STATE_MIN + 3 |
State in which reverse DNS server selection is done. | |
static const int | SERVER_IO_ERROR_EVT = SM_DERIVED_EVENT_MIN + 3 |
Issued when an update fails due to an IO error. | |
static const int | SERVER_SELECTED_EVT = SM_DERIVED_EVENT_MIN + 2 |
Issued when a server has been selected. | |
static const int | UPDATE_FAILED_EVT = SM_DERIVED_EVENT_MIN + 7 |
Issued when the attempted update fails to complete. | |
static const int | UPDATE_OK_EVT = SM_DERIVED_EVENT_MIN + 6 |
Issued when the attempted update successfully completed. | |
![]() | |
static const int | END_EVT = 2 |
Event issued to end the model execution. | |
static const int | END_ST = 1 |
Final state, all the state model has reached its conclusion. | |
static const int | FAIL_EVT = 3 |
Event issued to abort the model execution. | |
static const int | NEW_ST = 0 |
State that a state model is in immediately after construction. | |
static const int | NOP_EVT = 0 |
Signifies that no event has occurred. | |
static const int | SM_DERIVED_EVENT_MIN = 11 |
Value at which custom events in a derived class should begin. | |
static const int | SM_DERIVED_STATE_MIN = 11 |
Value at which custom states in a derived class should begin. | |
static const int | START_EVT = 1 |
Event issued to start the model execution. | |
Protected Member Functions | |
void | buildRemoveFwdAddressRequest () |
Builds a DNS request to remove a forward DNS address for a FQDN. | |
void | buildRemoveFwdRRsRequest () |
Builds a DNS request to remove all forward DNS RRs for a FQDN. | |
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. | |
virtual void | defineStates () |
Adds states defined by CheckExistsRemoveTransaction to the state set. | |
void | processRemoveFailedHandler () |
State handler for PROCESS_TRANS_FAILED_ST. | |
void | processRemoveOkHandler () |
State handler for PROCESS_TRANS_OK_ST. | |
void | readyHandler () |
State handler for READY_ST. | |
void | removingFwdAddrsHandler () |
State handler for REMOVING_FWD_ADDRS_ST. | |
void | removingFwdRRsHandler () |
State handler for REMOVING_FWD_RRS_ST. | |
void | removingRevPtrsHandler () |
State handler for REMOVING_REV_PTRS_ST. | |
void | selectingFwdServerHandler () |
State handler for SELECTING_FWD_SERVER_ST. | |
void | selectingRevServerHandler () |
State handler for SELECTING_REV_SERVER_ST. | |
virtual void | verifyEvents () |
Validates the contents of the set of events. | |
virtual void | verifyStates () |
Validates the contents of the set of states. | |
![]() | |
void | addDhcidRdata (dns::RRsetPtr &rrset) |
Adds an RData for the lease client's DHCID to the given RRset. | |
void | addLeaseAddressRdata (dns::RRsetPtr &rrset) |
Adds an RData for the lease address to the given RRset. | |
void | addPtrRdata (dns::RRsetPtr &rrset) |
Adds an RData for the lease FQDN to the given RRset. | |
void | clearDnsUpdateRequest () |
Destroys the current update request packet. | |
void | clearDnsUpdateResponse () |
Destroys the current update response packet. | |
void | clearUpdateAttempts () |
Resets the update attempts count. | |
const asiolink::IOServicePtr & | getIOService () |
Fetches the IOService the transaction uses for IO processing. | |
void | initServerSelection (const DdnsDomainPtr &domain) |
Initializes server selection from the given DDNS domain. | |
virtual void | onModelFailure (const std::string &explanation) |
Handler for fatal model execution errors. | |
virtual D2UpdateMessagePtr | prepNewRequest (DdnsDomainPtr domain) |
Creates a new DNS update request based on the given domain. | |
std::string | responseString () const |
Returns a string version of the current response status and rcode. | |
void | retryTransition (const int fail_to_state) |
Determines the state and next event based on update attempts. | |
bool | selectNextServer () |
Selects the next server in the current server list. | |
bool | selectTSIGKey () |
Selects the TSIG key. | |
virtual void | sendUpdate (const std::string &comment="") |
Send the update request to the current server. | |
void | setDnsUpdateRequest (D2UpdateMessagePtr &request) |
Sets the update request packet to the given packet. | |
void | setDnsUpdateResponse (D2UpdateMessagePtr &response) |
Sets the update response packet to the given packet. | |
void | setDnsUpdateStatus (const DNSClient::Status &status) |
Sets the update status to the given status value. | |
void | setForwardChangeCompleted (const bool value) |
Sets the forward change completion flag to the given value. | |
void | setNcrStatus (const dhcp_ddns::NameChangeStatus &status) |
Sets the status of the transaction's NameChangeRequest. | |
void | setReverseChangeCompleted (const bool value) |
Sets the reverse change completion flag to the given value. | |
void | setUpdateAttempts (const size_t value) |
Sets the update attempt count to the given value. | |
std::string | transactionOutcomeString () const |
Returns a string version of transaction outcome. | |
![]() | |
void | abortModel (const std::string &explanation) |
Aborts model execution. | |
void | defineEvent (unsigned int value, const std::string &label) |
Adds an event value and associated label to the set of events. | |
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. | |
bool | doOnEntry () |
Checks if on entry flag is true. | |
bool | doOnExit () |
Checks if on exit flag is true. | |
const EventPtr & | getEvent (unsigned int value) |
Fetches the event referred to by value. | |
const StatePtr | getState (unsigned int value) |
Fetches the state referred to by value. | |
const StatePtr | getStateInternal (unsigned int value) |
Fetches the state referred to by value. | |
void | initDictionaries () |
Initializes the event and state dictionaries. | |
void | postNextEvent (unsigned int event) |
Sets the next event to the given event value. | |
void | setState (unsigned int state) |
Sets the current state to the given state value. | |
void | transition (unsigned int state, unsigned int event) |
Sets up the model to transition into given state with a given event. | |
Embodies the "life-cycle" required to carry out a DDNS Remove update.
CheckExistsRemoveTransaction implements a state machine for removing a forward and/or reverse DNS mappings. The logic may be paraphrased as follows:
This class derives from NameChangeTransaction from which it inherits states, events, and methods common to NameChangeRequest processing.
Definition at line 51 of file check_exists_remove.h.
isc::d2::CheckExistsRemoveTransaction::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.
Constructor
Instantiates an Remove transaction that is ready to be started.
io_service | IO service to be used for IO processing |
ncr | is the NameChangeRequest to fulfill |
forward_domain | is the domain to use for forward DNS updates |
reverse_domain | is the domain to use for reverse DNS updates |
cfg_mgr | pointer to the configuration manager |
CheckExistsRemoveTransaction | error if given request is not a CHG_REMOVE, NameChangeTransaction error for base class construction errors. |
Definition at line 27 of file check_exists_remove.cc.
References isc::dhcp_ddns::CHG_REMOVE, and isc_throw.
|
virtual |
Destructor.
Definition at line 41 of file check_exists_remove.cc.
|
protected |
Builds a DNS request to remove a forward DNS address for a FQDN.
Constructs a DNS update request, based upon the NCR, for removing a forward DNS address mapping. Once constructed, the request is stored as the transaction's DNS update request.
Prerequisite RRsets:
Updates RRsets:
This | method does not throw but underlying methods may. |
Definition at line 615 of file check_exists_remove.cc.
References isc::d2::NameChangeTransaction::addLeaseAddressRdata(), isc::dns::RRClass::ANY(), isc::dns::RRType::DHCID(), isc::d2::NameChangeTransaction::getAddressRRType(), isc::d2::NameChangeTransaction::getForwardDomain(), isc::d2::NameChangeTransaction::getNcr(), isc::dns::RRClass::NONE(), isc::d2::NameChangeTransaction::prepNewRequest(), isc::d2::D2UpdateMessage::SECTION_PREREQUISITE, isc::d2::D2UpdateMessage::SECTION_UPDATE, and isc::d2::NameChangeTransaction::setDnsUpdateRequest().
Referenced by removingFwdAddrsHandler().
|
protected |
Builds a DNS request to remove all forward DNS RRs for a FQDN.
Constructs a DNS update request, based upon the NCR, for removing any remaining DHCID RR, once all A or AAAA entries for the FQDN have been removed. Once constructed, the request is stored as the transaction's DNS update request.
Prerequisite RRsets:
Updates RRsets:
This | method does not throw but underlying methods may. |
Definition at line 646 of file check_exists_remove.cc.
References isc::dns::RRType::A(), isc::dns::RRType::AAAA(), isc::dns::RRClass::ANY(), isc::dns::RRType::DHCID(), isc::d2::NameChangeTransaction::getForwardDomain(), isc::d2::NameChangeTransaction::getNcr(), isc::dns::RRClass::NONE(), isc::d2::NameChangeTransaction::prepNewRequest(), isc::d2::D2UpdateMessage::SECTION_PREREQUISITE, isc::d2::D2UpdateMessage::SECTION_UPDATE, and isc::d2::NameChangeTransaction::setDnsUpdateRequest().
Referenced by removingFwdRRsHandler().
|
protected |
Builds a DNS request to remove a reverse DNS entry for a FQDN.
Constructs a DNS update request, based upon the NCR, for removing a reverse DNS mapping. Once constructed, the request is stored as the transaction's DNS update request.
The request content is adherent to RFC 4703 section 5.5, paragraph 2:
Prerequisite RRsets:
Updates RRsets:
This | method does not throw but underlying methods may. |
Definition at line 683 of file check_exists_remove.cc.
References isc::d2::NameChangeTransaction::addPtrRdata(), isc::dns::RRClass::ANY(), isc::dns::RRType::ANY(), isc::d2::NameChangeTransaction::getNcr(), isc::d2::NameChangeTransaction::getReverseDomain(), isc::dns::RRClass::IN(), isc::d2::NameChangeTransaction::prepNewRequest(), isc::dns::RRType::PTR(), isc::d2::D2CfgMgr::reverseIpAddress(), isc::d2::D2UpdateMessage::SECTION_PREREQUISITE, isc::d2::D2UpdateMessage::SECTION_UPDATE, and isc::d2::NameChangeTransaction::setDnsUpdateRequest().
Referenced by removingRevPtrsHandler().
|
protectedvirtual |
Adds events defined by CheckExistsRemoveTransaction to the event set.
Invokes NameChangeTransaction's implementation and then defines the events unique to NCR Remove transaction processing.
StateModelError | if an event definition is invalid or a duplicate. |
Reimplemented from isc::d2::NameChangeTransaction.
Definition at line 45 of file check_exists_remove.cc.
References isc::d2::NameChangeTransaction::defineEvents().
|
protectedvirtual |
Adds states defined by CheckExistsRemoveTransaction to the state set.
Invokes NameChangeTransaction's implementation and then defines the states unique to NCR Remove transaction processing.
StateModelError | if an state definition is invalid or a duplicate. |
Reimplemented from isc::d2::NameChangeTransaction.
Definition at line 73 of file check_exists_remove.cc.
References isc::util::StateModel::defineState(), isc::d2::NameChangeTransaction::defineStates(), isc::d2::NameChangeTransaction::PROCESS_TRANS_FAILED_ST, isc::d2::NameChangeTransaction::PROCESS_TRANS_OK_ST, processRemoveFailedHandler(), processRemoveOkHandler(), isc::d2::NameChangeTransaction::READY_ST, readyHandler(), REMOVING_FWD_ADDRS_ST, REMOVING_FWD_RRS_ST, REMOVING_REV_PTRS_ST, removingFwdAddrsHandler(), removingFwdRRsHandler(), removingRevPtrsHandler(), isc::d2::NameChangeTransaction::SELECTING_FWD_SERVER_ST, isc::d2::NameChangeTransaction::SELECTING_REV_SERVER_ST, selectingFwdServerHandler(), and selectingRevServerHandler().
|
protected |
State handler for PROCESS_TRANS_FAILED_ST.
Entered from:
Sets the transaction status to indicate failure and ends model execution.
Transitions to:
CheckExistsRemoveTransactionError | if upon entry next event is not: UPDATE_FAILED_EVT |
Definition at line 596 of file check_exists_remove.cc.
References isc::d2::d2_to_dns_logger, isc::d2::DHCP_DDNS_REMOVE_FAILED, isc::util::StateModel::endModel(), isc::util::StateModel::getContextStr(), isc::util::StateModel::getNextEvent(), isc::d2::NameChangeTransaction::getRequestId(), isc_throw, LOG_ERROR, isc::d2::NameChangeTransaction::NO_MORE_SERVERS_EVT, isc::d2::NameChangeTransaction::SERVER_IO_ERROR_EVT, isc::d2::NameChangeTransaction::setNcrStatus(), isc::dhcp_ddns::ST_FAILED, isc::d2::NameChangeTransaction::transactionOutcomeString(), and isc::d2::NameChangeTransaction::UPDATE_FAILED_EVT.
Referenced by defineStates().
|
protected |
State handler for PROCESS_TRANS_OK_ST.
Entered from:
Sets the transaction action status to indicate success and ends model execution.
Transitions to:
CheckExistsRemoveTransactionError | if upon entry next event is not: UPDATE_OK_EVT |
Definition at line 579 of file check_exists_remove.cc.
References isc::d2::d2_to_dns_logger, isc::d2::DHCP_DDNS_REMOVE_SUCCEEDED, isc::util::StateModel::endModel(), isc::util::StateModel::getContextStr(), isc::d2::NameChangeTransaction::getNcr(), isc::util::StateModel::getNextEvent(), isc::d2::NameChangeTransaction::getRequestId(), isc_throw, LOG_INFO, isc::d2::NameChangeTransaction::setNcrStatus(), isc::dhcp_ddns::ST_COMPLETED, and isc::d2::NameChangeTransaction::UPDATE_OK_EVT.
Referenced by defineStates().
|
protected |
State handler for READY_ST.
Entered from:
The READY_ST is the state the model transitions into when the inherited method, startTransaction() is invoked. This handler, therefore, is the entry point into the state model execution. Its primary task is to determine whether to start with a forward DNS change or a reverse DNS change.
Transitions to:
CheckExistsRemoveTransactionError | if upon entry next event is not START_EVT. |
Definition at line 128 of file check_exists_remove.cc.
References isc::util::StateModel::getContextStr(), isc::d2::NameChangeTransaction::getForwardDomain(), isc::util::StateModel::getNextEvent(), isc_throw, isc::d2::NameChangeTransaction::SELECT_SERVER_EVT, isc::d2::NameChangeTransaction::SELECTING_FWD_SERVER_ST, isc::d2::NameChangeTransaction::SELECTING_REV_SERVER_ST, isc::util::StateModel::START_EVT, and isc::util::StateModel::transition().
Referenced by defineStates().
|
protected |
State handler for REMOVING_FWD_ADDRS_ST.
Entered from:
Attempts to remove the forward DNS entry for a given FQDN, provided a DHCID RR exists which matches the requesting DHCID. If this is first invocation of the handler after transitioning into this state, any previous update request context is deleted. If next event is SERVER_SELECTED_EVT, the handler builds the forward remove request, schedules an asynchronous send via sendUpdate(), and returns. Note that sendUpdate will post NOP_EVT as next event.
Posting the NOP_EVT will cause runModel() to suspend execution of the state model thus affecting a "wait" for the update IO to complete. Update completion occurs via the DNSClient callback operator() method inherited from NameChangeTransaction. When invoked this callback will post a next event of IO_COMPLETED_EVT and then invoke runModel which resumes execution of the state model.
When the handler is invoked with a next event of IO_COMPLETED_EVT, the DNS update status is checked and acted upon accordingly:
Transitions to:
CheckExistsRemoveTransactionError | if upon entry next event is not SERVER_SELECTED_EVT or IO_COMPLETE_EVT |
Definition at line 176 of file check_exists_remove.cc.
References buildRemoveFwdAddressRequest(), isc::d2::NameChangeTransaction::clearDnsUpdateRequest(), isc::d2::NameChangeTransaction::clearUpdateAttempts(), isc::d2::d2_to_dns_logger, isc::d2::DHCP_DDNS_FORWARD_REMOVE_ADDRS_BAD_DNSCLIENT_STATUS, isc::d2::DHCP_DDNS_FORWARD_REMOVE_ADDRS_BUILD_FAILURE, isc::d2::DHCP_DDNS_FORWARD_REMOVE_ADDRS_IO_ERROR, isc::d2::DHCP_DDNS_FORWARD_REMOVE_ADDRS_REJECTED, isc::d2::DHCP_DDNS_FORWARD_REMOVE_ADDRS_RESP_CORRUPT, isc::d2::DHCP_DDNS_FORWARD_REMOVE_ADDRS_TIMEOUT, isc::util::StateModel::doOnEntry(), isc::util::StateModel::getContextStr(), isc::d2::NameChangeTransaction::getCurrentServer(), isc::d2::NameChangeTransaction::getDnsUpdateResponse(), isc::d2::NameChangeTransaction::getDnsUpdateStatus(), isc::d2::NameChangeTransaction::getNcr(), isc::util::StateModel::getNextEvent(), isc::d2::NameChangeTransaction::getRequestId(), isc::d2::DNSClient::INVALID_RESPONSE, isc::d2::NameChangeTransaction::IO_COMPLETED_EVT, isc_throw, LOG_ERROR, isc::dns::Rcode::NOERROR(), isc::dns::Rcode::NXRRSET(), isc::d2::DNSClient::OTHER, isc::d2::NameChangeTransaction::PROCESS_TRANS_FAILED_ST, REMOVING_FWD_RRS_ST, isc::d2::NameChangeTransaction::retryTransition(), isc::d2::NameChangeTransaction::SELECTING_FWD_SERVER_ST, isc::d2::NameChangeTransaction::sendUpdate(), isc::d2::NameChangeTransaction::SERVER_SELECTED_EVT, isc::d2::DNSClient::SUCCESS, isc::d2::DNSClient::TIMEOUT, isc::util::StateModel::transition(), isc::d2::NameChangeTransaction::UPDATE_FAILED_EVT, and isc::d2::NameChangeTransaction::UPDATE_OK_EVT.
Referenced by defineStates().
|
protected |
State handler for REMOVING_FWD_RRS_ST.
Entered from:
Attempts to delete any remaining RRs associated with the given FQDN such as the DHCID RR. If this is first invocation of the handler after transitioning into this state, any previous update request context is deleted and the handler builds the forward remove request. It then schedules an asynchronous send via sendUpdate(), and returns. Note that sendUpdate will post NOP_EVT as the next event.
Posting the NOP_EVT will cause runModel() to suspend execution of the state model thus affecting a "wait" for the update IO to complete. Update completion occurs via the DNSClient callback operator() method inherited from NameChangeTransaction. When invoked this callback will post a next event of IO_COMPLETED_EVT and then invoke runModel which resumes execution of the state model.
When the handler is invoked with a next event of IO_COMPLETED_EVT, the DNS update status is checked and acted upon accordingly:
Transitions to:
CheckExistsRemoveTransactionError | if upon entry next event is not: UPDATE_OK_EVT or IO_COMPLETE_EVT |
Definition at line 291 of file check_exists_remove.cc.
References buildRemoveFwdRRsRequest(), isc::d2::NameChangeTransaction::clearDnsUpdateRequest(), isc::d2::NameChangeTransaction::clearUpdateAttempts(), isc::d2::d2_to_dns_logger, isc::d2::DHCP_DDNS_FORWARD_REMOVE_RRS_BAD_DNSCLIENT_STATUS, isc::d2::DHCP_DDNS_FORWARD_REMOVE_RRS_BUILD_FAILURE, isc::d2::DHCP_DDNS_FORWARD_REMOVE_RRS_IO_ERROR, isc::d2::DHCP_DDNS_FORWARD_REMOVE_RRS_REJECTED, isc::d2::DHCP_DDNS_FORWARD_REMOVE_RRS_RESP_CORRUPT, isc::d2::DHCP_DDNS_FORWARD_REMOVE_RRS_TIMEOUT, isc::util::StateModel::doOnEntry(), isc::util::StateModel::getContextStr(), isc::d2::NameChangeTransaction::getCurrentServer(), isc::d2::NameChangeTransaction::getDnsUpdateResponse(), isc::d2::NameChangeTransaction::getDnsUpdateStatus(), isc::d2::NameChangeTransaction::getNcr(), isc::util::StateModel::getNextEvent(), isc::d2::NameChangeTransaction::getRequestId(), isc::d2::NameChangeTransaction::getReverseDomain(), isc::d2::DNSClient::INVALID_RESPONSE, isc::d2::NameChangeTransaction::IO_COMPLETED_EVT, isc_throw, LOG_ERROR, isc::dns::Rcode::NOERROR(), isc::dns::Rcode::NXRRSET(), isc::d2::DNSClient::OTHER, isc::d2::NameChangeTransaction::PROCESS_TRANS_FAILED_ST, isc::d2::NameChangeTransaction::PROCESS_TRANS_OK_ST, isc::d2::NameChangeTransaction::retryTransition(), isc::d2::NameChangeTransaction::SELECT_SERVER_EVT, isc::d2::NameChangeTransaction::SELECTING_REV_SERVER_ST, isc::d2::NameChangeTransaction::sendUpdate(), isc::d2::NameChangeTransaction::SERVER_SELECTED_EVT, isc::d2::NameChangeTransaction::setForwardChangeCompleted(), isc::d2::DNSClient::SUCCESS, isc::d2::DNSClient::TIMEOUT, isc::util::StateModel::transition(), isc::d2::NameChangeTransaction::UPDATE_FAILED_EVT, and isc::d2::NameChangeTransaction::UPDATE_OK_EVT.
Referenced by defineStates().
|
protected |
State handler for REMOVING_REV_PTRS_ST.
Entered from:
Attempts to delete a reverse DNS entry for a given FQDN. If this is first invocation of the handler after transitioning into this state, any previous update request context is deleted. If next event is SERVER_SELECTED_EVT, the handler builds the reverse remove request, schedules an asynchronous send via sendUpdate(), and then returns. Note that sendUpdate will post NOP_EVT as next event.
Posting the NOP_EVT will cause runModel() to suspend execution of the state model thus affecting a "wait" for the update IO to complete. Update completion occurs via the DNSClient callback operator() method inherited from NameChangeTransaction. When invoked this callback will post a next event of IO_COMPLETED_EVT and then invoke runModel which resumes execution of the state model.
When the handler is invoked with a next event of IO_COMPLETED_EVT, the DNS update status is checked and acted upon accordingly:
Transitions to:
CheckExistsRemoveTransactionError | if upon entry next event is not: SERVER_SELECTED_EVT or IO_COMPLETED_EVT |
Definition at line 457 of file check_exists_remove.cc.
References buildRemoveRevPtrsRequest(), isc::d2::NameChangeTransaction::clearDnsUpdateRequest(), isc::d2::NameChangeTransaction::clearUpdateAttempts(), isc::d2::d2_to_dns_logger, isc::d2::DHCP_DDNS_REVERSE_REMOVE_BAD_DNSCLIENT_STATUS, isc::d2::DHCP_DDNS_REVERSE_REMOVE_BUILD_FAILURE, isc::d2::DHCP_DDNS_REVERSE_REMOVE_IO_ERROR, isc::d2::DHCP_DDNS_REVERSE_REMOVE_REJECTED, isc::d2::DHCP_DDNS_REVERSE_REMOVE_RESP_CORRUPT, isc::d2::DHCP_DDNS_REVERSE_REMOVE_TIMEOUT, isc::util::StateModel::doOnEntry(), isc::util::StateModel::getContextStr(), isc::d2::NameChangeTransaction::getCurrentServer(), isc::d2::NameChangeTransaction::getDnsUpdateResponse(), isc::d2::NameChangeTransaction::getDnsUpdateStatus(), isc::d2::NameChangeTransaction::getNcr(), isc::util::StateModel::getNextEvent(), isc::d2::NameChangeTransaction::getRequestId(), isc::d2::DNSClient::INVALID_RESPONSE, isc::d2::NameChangeTransaction::IO_COMPLETED_EVT, isc_throw, LOG_ERROR, isc::dns::Rcode::NOERROR(), isc::dns::Rcode::NXRRSET(), isc::d2::DNSClient::OTHER, isc::d2::NameChangeTransaction::PROCESS_TRANS_FAILED_ST, isc::d2::NameChangeTransaction::PROCESS_TRANS_OK_ST, isc::d2::NameChangeTransaction::retryTransition(), isc::d2::NameChangeTransaction::SELECTING_REV_SERVER_ST, isc::d2::NameChangeTransaction::sendUpdate(), isc::d2::NameChangeTransaction::SERVER_SELECTED_EVT, isc::d2::NameChangeTransaction::setReverseChangeCompleted(), isc::d2::DNSClient::SUCCESS, isc::d2::DNSClient::TIMEOUT, isc::util::StateModel::transition(), isc::d2::NameChangeTransaction::UPDATE_FAILED_EVT, and isc::d2::NameChangeTransaction::UPDATE_OK_EVT.
Referenced by defineStates().
|
protected |
State handler for SELECTING_FWD_SERVER_ST.
Entered from:
Selects the server to be used from the forward domain for the forward DNS update. If next event is SELECT_SERVER_EVT the handler initializes the forward domain's server selection mechanism and then attempts to select the next server. If next event is SERVER_IO_ERROR_EVT then the handler simply attempts to select the next server.
Transitions to:
CheckExistsRemoveTransactionError | if upon entry next event is not SELECT_SERVER_EVT or SERVER_IO_ERROR_EVT. |
Definition at line 148 of file check_exists_remove.cc.
References isc::util::StateModel::getContextStr(), isc::d2::NameChangeTransaction::getForwardDomain(), isc::util::StateModel::getNextEvent(), isc::d2::NameChangeTransaction::initServerSelection(), isc_throw, isc::d2::NameChangeTransaction::NO_MORE_SERVERS_EVT, isc::d2::NameChangeTransaction::PROCESS_TRANS_FAILED_ST, REMOVING_FWD_ADDRS_ST, isc::d2::NameChangeTransaction::SELECT_SERVER_EVT, isc::d2::NameChangeTransaction::selectNextServer(), isc::d2::NameChangeTransaction::SERVER_IO_ERROR_EVT, isc::d2::NameChangeTransaction::SERVER_SELECTED_EVT, and isc::util::StateModel::transition().
Referenced by defineStates().
|
protected |
State handler for SELECTING_REV_SERVER_ST.
Entered from:
Selects the server to be used from the reverse domain for the reverse DNS update. If next event is SELECT_SERVER_EVT the handler initializes the reverse domain's server selection mechanism and then attempts to select the next server. If next event is SERVER_IO_ERROR_EVT then the handler simply attempts to select the next server.
Transitions to:
CheckExistsRemoveTransactionError | if upon entry next event is not SELECT_SERVER_EVT or SERVER_IO_ERROR_EVT. |
Definition at line 427 of file check_exists_remove.cc.
References isc::util::StateModel::getContextStr(), isc::util::StateModel::getNextEvent(), isc::d2::NameChangeTransaction::getReverseDomain(), isc::d2::NameChangeTransaction::initServerSelection(), isc_throw, isc::d2::NameChangeTransaction::NO_MORE_SERVERS_EVT, isc::d2::NameChangeTransaction::PROCESS_TRANS_FAILED_ST, REMOVING_REV_PTRS_ST, isc::d2::NameChangeTransaction::SELECT_SERVER_EVT, isc::d2::NameChangeTransaction::selectNextServer(), isc::d2::NameChangeTransaction::SERVER_IO_ERROR_EVT, isc::d2::NameChangeTransaction::SERVER_SELECTED_EVT, and isc::util::StateModel::transition().
Referenced by defineStates().
|
protectedvirtual |
Validates the contents of the set of events.
Invokes NameChangeTransaction's implementation and then verifies the Remove transaction's events. This tests that the needed events are in the event dictionary.
StateModelError | if an event value is undefined. |
Reimplemented from isc::d2::NameChangeTransaction.
Definition at line 55 of file check_exists_remove.cc.
References isc::d2::NameChangeTransaction::verifyEvents().
|
protectedvirtual |
Validates the contents of the set of states.
Invokes NameChangeTransaction's implementation and then verifies the Remove transaction's states. This tests that the needed states are in the state dictionary.
StateModelError | if an event value is undefined. |
Reimplemented from isc::d2::NameChangeTransaction.
Definition at line 111 of file check_exists_remove.cc.
References isc::util::StateModel::getStateInternal(), REMOVING_FWD_ADDRS_ST, REMOVING_FWD_RRS_ST, REMOVING_REV_PTRS_ST, and isc::d2::NameChangeTransaction::verifyStates().
|
static |
State that attempts to remove specific forward address record.
Definition at line 56 of file check_exists_remove.h.
Referenced by defineStates(), selectingFwdServerHandler(), and verifyStates().
|
static |
State that attempts to remove any other forward RRs for the DHCID.
Definition at line 59 of file check_exists_remove.h.
Referenced by defineStates(), removingFwdAddrsHandler(), and verifyStates().
|
static |
State that attempts to remove reverse PTR records.
Definition at line 62 of file check_exists_remove.h.
Referenced by defineStates(), selectingRevServerHandler(), and verifyStates().