#include <ipcache.h>
Public Types | |
typedef std::vector< CachedIp > | Storage |
Public Member Functions | |
bool | have (const Ip::Address &ip, size_t *position=nullptr) const |
const Ip::Address & | current () const |
bool | empty () const noexcept |
whether we cached no IPs at all More... | |
size_t | size () const noexcept |
all cached IPs More... | |
size_t | badCount () const noexcept |
bad IPs More... | |
IpsSelector< GoodIpsIterator > | good () const |
good IPs More... | |
IpsSelector< IpsIterator > | goodAndBad () const |
all IPs More... | |
const Storage & | raw () const |
all cached entries More... | |
void | markAsBad (const char *name, const Ip::Address &ip) |
void | forgetMarking (const char *name, const Ip::Address &ip) |
undo successful markAsBad() More... | |
void | pushUnique (const Ip::Address &ip) |
void | reset (const Ip::Address &ip) |
replace all info with the given (presumed good) IP address More... | |
void | reportCurrent (std::ostream &os) const |
prints current IP and other debugging information More... | |
Private Member Functions | |
bool | seekNewGood (const char *name) |
void | restoreGoodness (const char *name) |
makes current() calls possible after a successful markAsBad() More... | |
Private Attributes | |
Storage | ips |
good and bad IPs More... | |
size_t | goodPosition = 0 |
position of the IP returned by current() More... | |
size_t | badCount_ = 0 |
number of IPs that are currently marked as bad More... | |
Friends | |
template<class Iterator > | |
class | IpsSelector |
Detailed Description
A small container of IP addresses with a "current good address" getter API. Ignores Ip::Address port.
Member Typedef Documentation
◆ Storage
typedef std::vector<CachedIp> Dns::CachedIps::Storage |
Member Function Documentation
◆ badCount()
|
inlinenoexcept |
◆ current()
|
inline |
- Returns
- a good address does not auto-rotate IPs but calling markAsBad() may change the answer
Definition at line 59 of file ipcache.h.
References goodPosition, and ips.
Referenced by icapLookupDnsResults(), netdbClosestParent(), and netdbSendPing().
◆ empty()
|
inlinenoexcept |
Definition at line 61 of file ipcache.h.
References ips.
Referenced by IpCacheLookupForwarder::finalCallback(), ipcacheExpiredEntry(), ipcacheHandleReply(), and peerDNSConfigure().
◆ forgetMarking()
void Dns::CachedIps::forgetMarking | ( | const char * | name, |
const Ip::Address & | ip | ||
) |
Definition at line 1039 of file ipcache.cc.
◆ good()
|
inline |
Definition at line 243 of file ipcache.h.
Referenced by IpCacheLookupForwarder::forwardHits().
◆ goodAndBad()
|
inline |
Definition at line 249 of file ipcache.h.
Referenced by Acl::DestinationAsnCheck::match(), ACLDestinationIP::match(), mcastJoinGroups(), and peerDNSConfigure().
◆ have()
bool Dns::CachedIps::have | ( | const Ip::Address & | ip, |
size_t * | position = nullptr |
||
) | const |
whether we have at least one of the given IP addresses (ignoring ports) upon success, also sets *position if the position
is not nil
Definition at line 982 of file ipcache.cc.
References debugs.
Referenced by ipcache_entry::addGood(), and ClientRequestContext::hostHeaderIpVerify().
◆ markAsBad()
void Dns::CachedIps::markAsBad | ( | const char * | name, |
const Ip::Address & | ip | ||
) |
Finds and marks the given address as bad, adjusting current() if needed. Has no effect if the search fails or the found address is already bad. XXX: An attempt to mark the last good address erases all marks instead. XXX: It is impossible to successfully mark a single address as bad.
Definition at line 1019 of file ipcache.cc.
References debugs.
◆ pushUnique()
void Dns::CachedIps::pushUnique | ( | const Ip::Address & | ip | ) |
appends an IP address if we do not have() it already invalidates all iterators
Definition at line 1000 of file ipcache.cc.
References assert.
Referenced by ipcache_entry::addGood(), and ipcacheAddEntryFromHosts().
◆ raw()
|
inline |
Definition at line 69 of file ipcache.h.
References ips.
Referenced by ipcache_entry::addGood(), Dns::IpsSelector< Iterator >::cbegin(), Dns::IpsSelector< Iterator >::cend(), and ipcacheStatPrint().
◆ reportCurrent()
void Dns::CachedIps::reportCurrent | ( | std::ostream & | os | ) | const |
◆ reset()
void Dns::CachedIps::reset | ( | const Ip::Address & | ip | ) |
Definition at line 956 of file ipcache.cc.
Referenced by ipcacheCheckNumeric().
◆ restoreGoodness()
|
private |
Definition at line 968 of file ipcache.cc.
◆ seekNewGood()
|
private |
find the next good IP, wrapping if needed
- Returns
- whether the search was successful
Definition at line 939 of file ipcache.cc.
References debugs, goodPosition, and ips.
◆ size()
|
inlinenoexcept |
Definition at line 62 of file ipcache.h.
References ips.
Referenced by ipcache_entry::addGood(), ipcacheStatPrint(), peerDNSConfigure(), and ipcache_entry::updateTtl().
Friends And Related Function Documentation
◆ IpsSelector
|
friend |
Member Data Documentation
◆ badCount_
|
private |
Definition at line 101 of file ipcache.h.
Referenced by badCount().
◆ goodPosition
|
private |
Definition at line 100 of file ipcache.h.
Referenced by Dns::IpsSelector< Iterator >::cbegin(), current(), and seekNewGood().
◆ ips
|
private |
The documentation for this class was generated from the following files:
- src/ipcache.h
- src/ipcache.cc