Bitcoin Core  24.99.0
P2P Digital Currency
Classes | Typedefs | Enumerations | Functions | Variables
net.h File Reference
#include <chainparams.h>
#include <common/bloom.h>
#include <compat/compat.h>
#include <node/connection_types.h>
#include <consensus/amount.h>
#include <crypto/siphash.h>
#include <hash.h>
#include <i2p.h>
#include <net_permissions.h>
#include <netaddress.h>
#include <netbase.h>
#include <netgroup.h>
#include <policy/feerate.h>
#include <protocol.h>
#include <random.h>
#include <span.h>
#include <streams.h>
#include <sync.h>
#include <uint256.h>
#include <util/check.h>
#include <util/sock.h>
#include <util/threadinterrupt.h>
#include <atomic>
#include <condition_variable>
#include <cstdint>
#include <deque>
#include <functional>
#include <list>
#include <map>
#include <memory>
#include <optional>
#include <thread>
#include <unordered_set>
#include <vector>
Include dependency graph for net.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  AddedNodeInfo
 
struct  CSerializedNetMsg
 
struct  LocalServiceInfo
 
class  CNodeStats
 
class  CNetMessage
 Transport protocol agnostic message container. More...
 
class  TransportDeserializer
 The TransportDeserializer takes care of holding and deserializing the network receive buffer. More...
 
class  V1TransportDeserializer
 
class  TransportSerializer
 The TransportSerializer prepares messages for the network transport. More...
 
class  V1TransportSerializer
 
struct  CNodeOptions
 
class  CNode
 Information about a peer. More...
 
class  NetEventsInterface
 Interface for message handling. More...
 
class  CConnman
 
struct  CConnman::Options
 
struct  CConnman::ListenSocket
 
struct  CConnman::CachedAddrResponse
 Cache responses to addr requests to minimize privacy leak. More...
 
class  CConnman::NodesSnapshot
 RAII helper to atomically create a copy of m_nodes and add a reference to each of the nodes. More...
 

Typedefs

typedef int64_t NodeId
 
using mapMsgTypeSize = std::map< std::string, uint64_t >
 

Enumerations

enum  {
  LOCAL_NONE , LOCAL_IF , LOCAL_BIND , LOCAL_MAPPED ,
  LOCAL_MANUAL , LOCAL_MAX
}
 

Functions

void Discover ()
 Look up IP addresses from all interfaces on the machine and add them to the list of local addresses to self-advertise. More...
 
uint16_t GetListenPort ()
 
bool IsPeerAddrLocalGood (CNode *pnode)
 
std::optional< CServiceGetLocalAddrForPeer (CNode &node)
 Returns a local address that we should advertise to this peer. More...
 
void SetReachable (enum Network net, bool reachable)
 Mark a network as reachable or unreachable (no automatic connects to it) More...
 
bool IsReachable (enum Network net)
 
bool IsReachable (const CNetAddr &addr)
 
bool AddLocal (const CService &addr, int nScore=LOCAL_NONE)
 
bool AddLocal (const CNetAddr &addr, int nScore=LOCAL_NONE)
 
void RemoveLocal (const CService &addr)
 
bool SeenLocal (const CService &addr)
 vote for a local address More...
 
bool IsLocal (const CService &addr)
 check whether a given address is potentially local More...
 
bool GetLocal (CService &addr, const CNetAddr *paddrPeer=nullptr)
 
CService GetLocalAddress (const CNetAddr &addrPeer)
 
CService MaybeFlipIPv6toCJDNS (const CService &service)
 If an IPv6 address belongs to the address range used by the CJDNS network and the CJDNS network is reachable (-cjdnsreachable config is set), then change the type from NET_IPV6 to NET_CJDNS. More...
 
std::map< CNetAddr, LocalServiceInfo > mapLocalHost GUARDED_BY (g_maplocalhost_mutex)
 
void CaptureMessageToFile (const CAddress &addr, const std::string &msg_type, Span< const unsigned char > data, bool is_incoming)
 Dump binary message to file, with timestamp. More...
 

Variables

static const bool DEFAULT_WHITELISTRELAY = true
 Default for -whitelistrelay. More...
 
static const bool DEFAULT_WHITELISTFORCERELAY = false
 Default for -whitelistforcerelay. More...
 
static constexpr std::chrono::minutes TIMEOUT_INTERVAL {20}
 Time after which to disconnect, after waiting for a ping response (or inactivity). More...
 
static constexpr auto FEELER_INTERVAL = 2min
 Run the feeler connection loop once every 2 minutes. More...
 
static constexpr auto EXTRA_BLOCK_RELAY_ONLY_PEER_INTERVAL = 5min
 Run the extra block-relay-only connection loop once every 5 minutes. More...
 
static const unsigned int MAX_PROTOCOL_MESSAGE_LENGTH = 4 * 1000 * 1000
 Maximum length of incoming protocol messages (no message over 4 MB is currently acceptable). More...
 
static const unsigned int MAX_SUBVERSION_LENGTH = 256
 Maximum length of the user agent string in version message. More...
 
static const int MAX_OUTBOUND_FULL_RELAY_CONNECTIONS = 8
 Maximum number of automatic outgoing nodes over which we'll relay everything (blocks, tx, addrs, etc) More...
 
static const int MAX_ADDNODE_CONNECTIONS = 8
 Maximum number of addnode outgoing nodes. More...
 
static const int MAX_BLOCK_RELAY_ONLY_CONNECTIONS = 2
 Maximum number of block-relay-only outgoing connections. More...
 
static const int MAX_FEELER_CONNECTIONS = 1
 Maximum number of feeler connections. More...
 
static const bool DEFAULT_LISTEN = true
 -listen default More...
 
static const unsigned int DEFAULT_MAX_PEER_CONNECTIONS = 125
 The maximum number of peer connections to maintain. More...
 
static const std::string DEFAULT_MAX_UPLOAD_TARGET {"0M"}
 The default for -maxuploadtarget. More...
 
static const bool DEFAULT_BLOCKSONLY = false
 Default for blocks only. More...
 
static const int64_t DEFAULT_PEER_CONNECT_TIMEOUT = 60
 -peertimeout default More...
 
static const int NUM_FDS_MESSAGE_CAPTURE = 1
 Number of file descriptors required for message capture. More...
 
static constexpr bool DEFAULT_FORCEDNSSEED {false}
 
static constexpr bool DEFAULT_DNSSEED {true}
 
static constexpr bool DEFAULT_FIXEDSEEDS {true}
 
static const size_t DEFAULT_MAXRECEIVEBUFFER = 5 * 1000
 
static const size_t DEFAULT_MAXSENDBUFFER = 1 * 1000
 
bool fDiscover
 
bool fListen
 
std::string strSubVersion
 Subversion as sent to the P2P network in version messages. More...
 
GlobalMutex g_maplocalhost_mutex
 
const std::string NET_MESSAGE_TYPE_OTHER
 
std::function< void(const CAddress &addr, const std::string &msg_type, Span< const unsigned char > data, bool is_incoming)> CaptureMessage
 Defaults to CaptureMessageToFile(), but can be overridden by unit tests. More...
 

Typedef Documentation

◆ mapMsgTypeSize

using mapMsgTypeSize = std::map< std::string, uint64_t>

Definition at line 186 of file net.h.

◆ NodeId

typedef int64_t NodeId

Definition at line 93 of file net.h.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
LOCAL_NONE 
LOCAL_IF 
LOCAL_BIND 
LOCAL_MAPPED 
LOCAL_MANUAL 
LOCAL_MAX 

Definition at line 136 of file net.h.

Function Documentation

◆ AddLocal() [1/2]

bool AddLocal ( const CNetAddr addr,
int  nScore = LOCAL_NONE 
)

Definition at line 313 of file net.cpp.

Here is the call graph for this function:

◆ AddLocal() [2/2]

bool AddLocal ( const CService addr,
int  nScore = LOCAL_NONE 
)

Definition at line 285 of file net.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ CaptureMessageToFile()

void CaptureMessageToFile ( const CAddress addr,
const std::string &  msg_type,
Span< const unsigned char >  data,
bool  is_incoming 
)

Dump binary message to file, with timestamp.

Definition at line 2850 of file net.cpp.

Here is the call graph for this function:

◆ Discover()

void Discover ( )

Look up IP addresses from all interfaces on the machine and add them to the list of local addresses to self-advertise.

The loopback interface is skipped and only the first address from each interface is used.

Definition at line 2154 of file net.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetListenPort()

uint16_t GetListenPort ( )

Definition at line 128 of file net.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetLocal()

bool GetLocal ( CService addr,
const CNetAddr paddrPeer = nullptr 
)

Definition at line 159 of file net.cpp.

Here is the caller graph for this function:

◆ GetLocalAddress()

CService GetLocalAddress ( const CNetAddr addrPeer)

Definition at line 209 of file net.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetLocalAddrForPeer()

std::optional<CService> GetLocalAddrForPeer ( CNode node)

Returns a local address that we should advertise to this peer.

Definition at line 233 of file net.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GUARDED_BY()

std::map<CNetAddr, LocalServiceInfo> mapLocalHost GUARDED_BY ( g_maplocalhost_mutex  )

◆ IsLocal()

bool IsLocal ( const CService addr)

check whether a given address is potentially local

Definition at line 356 of file net.cpp.

Here is the caller graph for this function:

◆ IsPeerAddrLocalGood()

bool IsPeerAddrLocalGood ( CNode pnode)

Definition at line 226 of file net.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsReachable() [1/2]

bool IsReachable ( const CNetAddr addr)
Returns
true if the address is in a reachable network, false otherwise

Definition at line 339 of file net.cpp.

Here is the call graph for this function:

◆ IsReachable() [2/2]

bool IsReachable ( enum Network  net)
Returns
true if the network is reachable, false otherwise

Definition at line 333 of file net.cpp.

Here is the caller graph for this function:

◆ MaybeFlipIPv6toCJDNS()

CService MaybeFlipIPv6toCJDNS ( const CService service)

If an IPv6 address belongs to the address range used by the CJDNS network and the CJDNS network is reachable (-cjdnsreachable config is set), then change the type from NET_IPV6 to NET_CJDNS.

Parameters
[in]serviceAddress to potentially convert.
Returns
a copy of service either unmodified or changed to CJDNS.

Definition at line 553 of file net.cpp.

Here is the caller graph for this function:

◆ RemoveLocal()

void RemoveLocal ( const CService addr)

Definition at line 318 of file net.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SeenLocal()

bool SeenLocal ( const CService addr)

vote for a local address

Definition at line 345 of file net.cpp.

◆ SetReachable()

void SetReachable ( enum Network  net,
bool  reachable 
)

Mark a network as reachable or unreachable (no automatic connects to it)

Note
Networks are reachable by default

Definition at line 325 of file net.cpp.

Here is the caller graph for this function:

Variable Documentation

◆ CaptureMessage

std::function<void(const CAddress& addr, const std::string& msg_type, Span<const unsigned char> data, bool is_incoming)> CaptureMessage
extern

Defaults to CaptureMessageToFile(), but can be overridden by unit tests.

Definition at line 2885 of file net.cpp.

◆ DEFAULT_BLOCKSONLY

const bool DEFAULT_BLOCKSONLY = false
static

Default for blocks only.

Definition at line 81 of file net.h.

◆ DEFAULT_DNSSEED

constexpr bool DEFAULT_DNSSEED {true}
staticconstexpr

Definition at line 88 of file net.h.

◆ DEFAULT_FIXEDSEEDS

constexpr bool DEFAULT_FIXEDSEEDS {true}
staticconstexpr

Definition at line 89 of file net.h.

◆ DEFAULT_FORCEDNSSEED

constexpr bool DEFAULT_FORCEDNSSEED {false}
staticconstexpr

Definition at line 87 of file net.h.

◆ DEFAULT_LISTEN

const bool DEFAULT_LISTEN = true
static

-listen default

Definition at line 75 of file net.h.

◆ DEFAULT_MAX_PEER_CONNECTIONS

const unsigned int DEFAULT_MAX_PEER_CONNECTIONS = 125
static

The maximum number of peer connections to maintain.

Definition at line 77 of file net.h.

◆ DEFAULT_MAX_UPLOAD_TARGET

const std::string DEFAULT_MAX_UPLOAD_TARGET {"0M"}
static

The default for -maxuploadtarget.

0 = Unlimited

Definition at line 79 of file net.h.

◆ DEFAULT_MAXRECEIVEBUFFER

const size_t DEFAULT_MAXRECEIVEBUFFER = 5 * 1000
static

Definition at line 90 of file net.h.

◆ DEFAULT_MAXSENDBUFFER

const size_t DEFAULT_MAXSENDBUFFER = 1 * 1000
static

Definition at line 91 of file net.h.

◆ DEFAULT_PEER_CONNECT_TIMEOUT

const int64_t DEFAULT_PEER_CONNECT_TIMEOUT = 60
static

-peertimeout default

Definition at line 83 of file net.h.

◆ DEFAULT_WHITELISTFORCERELAY

const bool DEFAULT_WHITELISTFORCERELAY = false
static

Default for -whitelistforcerelay.

Definition at line 54 of file net.h.

◆ DEFAULT_WHITELISTRELAY

const bool DEFAULT_WHITELISTRELAY = true
static

Default for -whitelistrelay.

Definition at line 52 of file net.h.

◆ EXTRA_BLOCK_RELAY_ONLY_PEER_INTERVAL

constexpr auto EXTRA_BLOCK_RELAY_ONLY_PEER_INTERVAL = 5min
staticconstexpr

Run the extra block-relay-only connection loop once every 5 minutes.

Definition at line 61 of file net.h.

◆ fDiscover

bool fDiscover
extern

Definition at line 115 of file net.cpp.

◆ FEELER_INTERVAL

constexpr auto FEELER_INTERVAL = 2min
staticconstexpr

Run the feeler connection loop once every 2 minutes.

Definition at line 59 of file net.h.

◆ fListen

bool fListen
extern

Definition at line 116 of file net.cpp.

◆ g_maplocalhost_mutex

GlobalMutex g_maplocalhost_mutex
extern

Definition at line 117 of file net.cpp.

◆ MAX_ADDNODE_CONNECTIONS

const int MAX_ADDNODE_CONNECTIONS = 8
static

Maximum number of addnode outgoing nodes.

Definition at line 69 of file net.h.

◆ MAX_BLOCK_RELAY_ONLY_CONNECTIONS

const int MAX_BLOCK_RELAY_ONLY_CONNECTIONS = 2
static

Maximum number of block-relay-only outgoing connections.

Definition at line 71 of file net.h.

◆ MAX_FEELER_CONNECTIONS

const int MAX_FEELER_CONNECTIONS = 1
static

Maximum number of feeler connections.

Definition at line 73 of file net.h.

◆ MAX_OUTBOUND_FULL_RELAY_CONNECTIONS

const int MAX_OUTBOUND_FULL_RELAY_CONNECTIONS = 8
static

Maximum number of automatic outgoing nodes over which we'll relay everything (blocks, tx, addrs, etc)

Definition at line 67 of file net.h.

◆ MAX_PROTOCOL_MESSAGE_LENGTH

const unsigned int MAX_PROTOCOL_MESSAGE_LENGTH = 4 * 1000 * 1000
static

Maximum length of incoming protocol messages (no message over 4 MB is currently acceptable).

Definition at line 63 of file net.h.

◆ MAX_SUBVERSION_LENGTH

const unsigned int MAX_SUBVERSION_LENGTH = 256
static

Maximum length of the user agent string in version message.

Definition at line 65 of file net.h.

◆ NET_MESSAGE_TYPE_OTHER

const std::string NET_MESSAGE_TYPE_OTHER
extern

Definition at line 107 of file net.cpp.

◆ NUM_FDS_MESSAGE_CAPTURE

const int NUM_FDS_MESSAGE_CAPTURE = 1
static

Number of file descriptors required for message capture.

Definition at line 85 of file net.h.

◆ strSubVersion

std::string strSubVersion
extern

Subversion as sent to the P2P network in version messages.

Definition at line 120 of file net.cpp.

◆ TIMEOUT_INTERVAL

constexpr std::chrono::minutes TIMEOUT_INTERVAL {20}
staticconstexpr

Time after which to disconnect, after waiting for a ping response (or inactivity).

Definition at line 57 of file net.h.