aboutsummaryrefslogtreecommitdiff
path: root/src/net.h
AgeCommit message (Collapse)Author
2016-06-16Merge #8113: Rework addnode behaviourWladimir J. van der Laan
1a5a4e6 Randomize name lookup result in ConnectSocketByName (Pieter Wuille) f9f5cfc Prevent duplicate connections where one is by name and another by ip (Pieter Wuille) 1111b80 Rework addnode behaviour (Pieter Wuille)
2016-06-16Merge #8084: Add recently accepted blocks and txn to AttemptToEvictConnection.Wladimir J. van der Laan
6ee7f05 Allow disconnecting a netgroup with only one member in eviction. (Gregory Maxwell) 5d0ca81 Add recently accepted blocks and txn to AttemptToEvictConnection. (Gregory Maxwell)
2016-06-15Add recently accepted blocks and txn to AttemptToEvictConnection.Gregory Maxwell
This protects any not-already-protected peers who were the most recent four to relay transactions and most recent four to send blocks to us.
2016-06-13Rework addnode behaviourPieter Wuille
* Use CNode::addeName to track whether a connection to a name is already open * A new connection to a previously-connected by-name addednode is only opened when the previous one closes (even if the name starts resolving to something else) * At most one connection is opened per addednode (even if the name resolves to multiple) * Unify the code between ThreadOpenAddedNodeConnections and getaddednodeinfo * Information about open connections is always returned, and the dns argument becomes a dummy * An IP address and inbound/outbound is only reported for the (at most 1) open connection
2016-06-13Introduce REQUIRED_SERVICES constantPieter Wuille
2016-06-13Introduce enum ServiceFlags for service flagsPieter Wuille
2016-06-13Verify that outbound connections have expected servicesPieter Wuille
2016-06-08Merge #8173: Use SipHash for node eviction (cont'd)Pieter Wuille
eebc232 test: Add more test vectors for siphash (Wladimir J. van der Laan) 8884830 Use C++11 thread-safe static initializers (Pieter Wuille) c31b24f Use 64-bit SipHash of netgroups in eviction (Pieter Wuille) 9bf156b Support SipHash with arbitrary byte writes (Pieter Wuille) 053930f Avoid recalculating vchKeyedNetGroup in eviction logic. (Patrick Strateman)
2016-06-08Merge #8065: Addrman offline attemptsWladimir J. van der Laan
6182d10 Do not increment nAttempts by more than one for every Good connection. (Gregory Maxwell) c769c4a Avoid counting failed connect attempts when probably offline. (Gregory Maxwell)
2016-06-07Use 64-bit SipHash of netgroups in evictionPieter Wuille
2016-06-07Avoid recalculating vchKeyedNetGroup in eviction logic.Patrick Strateman
Lazy calculate vchKeyedNetGroup in CNode::GetKeyedNetGroup.
2016-05-31Defer inserting into maprelay until just before relaying.Gregory Maxwell
This reduces the rate of not founds by better matching the far end expectations, it also improves privacy by removing the ability to use getdata to probe for a node having a txn before it has been relayed.
2016-05-31Merge #8080: Do not use mempool for GETDATA for tx accepted after the last ↵Wladimir J. van der Laan
mempool req. 7e908c7 Do not use mempool for GETDATA for tx accepted after the last mempool req. (Gregory Maxwell)
2016-05-26Merge #8049: Expose information on whether transaction relay is enabled in ↵Pieter Wuille
`getnetwork` 1ab1dc3 rpc: Add `relaytxes` flag to `getnetworkinfo` (Wladimir J. van der Laan) 581ddff net: Add fRelayTxes flag (Wladimir J. van der Laan)
2016-05-26Avoid counting failed connect attempts when probably offline.Gregory Maxwell
If a node is offline failed outbound connection attempts will crank up the addrman counter and effectively blow away our state. This change reduces the problem by only counting attempts made while the node believes it has outbound connections to at least two netgroups. Connect and addnode connections are also not counted, as there is no reason to unequally penalize them for their more frequent connections -- though there should be no real effect from this unless their addnode configureation is later removed. Wasteful repeated connection attempts while only a few connections are up are avoided via nLastTry. This is still somewhat incomplete protection because our outbound peers could be down but not timed out or might all be on 'local' networks (although the requirement for multiple netgroups helps).
2016-05-25Do not use mempool for GETDATA for tx accepted after the last mempool req.Gregory Maxwell
The ability to GETDATA a transaction which has not (yet) been relayed is a privacy loss vector. The use of the mempool for this was added as part of the mempool p2p message and is only needed to fetch transactions returned by it.
2016-05-18Merge #7906: net: prerequisites for p2p encapsulation changesWladimir J. van der Laan
5d5e7a0 net: No need to export ConnectNode (Cory Fields) e9ed620 net: No need to export DumpBanlist (Cory Fields) 8b8f877 net: make Ban/Unban/ClearBan functionality consistent (Cory Fields) cca221f net: Drop CNodeRef for AttemptToEvictConnection (Cory Fields) 563f375 net: use the exposed GetNodeSignals() rather than g_signals directly (Cory Fields) 9faa490 net: remove unused set (Cory Fields) 52cbce2 net: don't import std namespace (Cory Fields)
2016-05-17Merge #7696: Fix de-serialization bug where AddrMan is left corruptedPieter Wuille
1475ecf Fix de-serialization bug where AddrMan is corrupted after exception * CAddrDB modified so that when de-serialization code throws an exception Addrman is reset to a clean state * CAddrDB modified to make unit tests possible * Regression test created to ensure bug is fixed * StartNode modifed to clear adrman if CAddrDB::Read returns an error code. (EthanHeilman)
2016-05-16Remove unneeded feerate param from RelayTransaction/AcceptToMemoryPool.Gregory Maxwell
2016-05-12net: Add fRelayTxes flagWladimir J. van der Laan
Add a fRelayTxes to keep track of the relay transaction flag we send to other peers.
2016-05-10net: No need to export ConnectNodeCory Fields
2016-05-10net: No need to export DumpBanlistCory Fields
2016-05-04Fix de-serialization bug where AddrMan is corrupted after exceptionEthanHeilman
* CAddrDB modified so that when de-serialization code throws an exception Addrman is reset to a clean state * CAddrDB modified to make unit tests possible * Regression test created to ensure bug is fixed * StartNode modifed to clear adrman if CAddrDB::Read returns an error code.
2016-04-21Move bloom and feerate filtering to just prior to tx sending.Gregory Maxwell
This will avoid sending more pointless INVs around updates, and prevents using filter updates to timetag transactions. Also adds locking for fRelayTxes.
2016-04-21Handle mempool requests in send loop, subject to tricklePieter Wuille
By eliminating queued entries from the mempool response and responding only at trickle time, this makes the mempool no longer leak transaction arrival order information (as the mempool itself is also sorted)-- at least no more than relay itself leaks it.
2016-04-21Split up and optimize transaction and block inv queuesPieter Wuille
2016-04-15Merge #7856: Only send one GetAddr response per connection.Wladimir J. van der Laan
66b0724 Only send one GetAddr response per connection. (Gregory Maxwell)
2016-04-14Change mapRelay to store CTransactionsPieter Wuille
2016-04-11Use txid as key in mapAlreadyAskedForSuhas Daftuar
Previously we used the CInv that would be sent to the peer announcing the transaction as the key, but using the txid instead allows us to decouple the p2p layer from the application logic (which relies on this map to avoid duplicate tx requests).
2016-04-11Only send one GetAddr response per connection.Gregory Maxwell
This conserves resources from abusive peers that just send getaddr in a loop. Also makes correlating addr messages against INVs less effective.
2016-03-21Implement "feefilter" P2P message.Alex Morcos
The "feefilter" p2p message is used to inform other nodes of your mempool min fee which is the feerate that any new transaction must meet to be accepted to your mempool. This will allow them to filter invs to you according to this feerate.
2016-02-17Remove vfReachable and modify IsReachable to only use vfLimited.Patrick Strateman
We do not know that a class of Network is reachable, only that it is not.
2016-02-12fix spelling of advertise in src and docjloughry
2016-02-04Fix spelling: misbeha{b,v}ingMatt
2016-01-05Merge pull request #7205Wladimir J. van der Laan
fa71669 [devtools] Use git pretty-format for year parsing (MarcoFalke) fa24439 Bump copyright headers to 2015 (MarcoFalke) fa6ad85 [devtools] Rewrite fix-copyright-headers.py (MarcoFalke)
2015-12-13Bump copyright headers to 2015MarcoFalke
2015-12-11Replace trickle nodes with per-node/message Poisson delaysPieter Wuille
We used to have a trickle node, a node which was chosen in each iteration of the send loop that was privileged and allowed to send out queued up non-time critical messages. Since the removal of the fixed sleeps in the network code, this resulted in fast and attackable treatment of such broadcasts. This pull request changes the 3 remaining trickle use cases by random delays: * Local address broadcast (while also removing the the wiping of the seen filter) * Address relay * Inv relay (for transactions; blocks are always relayed immediately) The code is based on older commits by Patrick Strateman.
2015-12-07log bytes recv/sent per commandJonas Schnelli
2015-12-03Merge pull request #7133Wladimir J. van der Laan
aa4b0c2 When not filtering blocks, getdata sends more in one test (Pieter Wuille) d41e44c Actually only use filterInventoryKnown with MSG_TX inventory messages. (Gregory Maxwell) b6a0da4 Only use filterInventoryKnown with MSG_TX inventory messages. (Patick Strateman) 6b84935 Rename setInventoryKnown filterInventoryKnown (Patick Strateman) e206724 Remove mruset as it is no longer used. (Gregory Maxwell) ec73ef3 Replace setInventoryKnown with a rolling bloom filter. (Gregory Maxwell)
2015-12-01Merge pull request #7079Wladimir J. van der Laan
ebb25f4 Limit setAskFor and retire requested entries only when a getdata returns. (Gregory Maxwell) 5029698 prevent peer flooding request queue for an inv (kazcw)
2015-11-30Only use filterInventoryKnown with MSG_TX inventory messages.Patick Strateman
Previously this logic could erroneously filter a MSG_BLOCK inventory message.
2015-11-30Rename setInventoryKnown filterInventoryKnownPatick Strateman
2015-11-30Remove mruset as it is no longer used.Gregory Maxwell
2015-11-30Replace setInventoryKnown with a rolling bloom filter.Gregory Maxwell
Mruset setInventoryKnown was reduced to a remarkably small 1000 entries as a side effect of sendbuffer size reductions in 2012. This removes setInventoryKnown filtering from merkleBlock responses because false positives there are especially unattractive and also because I'm not sure if there aren't race conditions around the relay pool that would cause some transactions there to be suppressed. (Also, ProcessGetData was accessing setInventoryKnown without taking the required lock.)
2015-11-29Allow block announcements with headersSuhas Daftuar
This replaces using inv messages to announce new blocks, when a peer requests (via the new "sendheaders" message) that blocks be announced with headers instead of inv's. Since headers-first was introduced, peers send getheaders messages in response to an inv, which requires generating a block locator that is large compared to the size of the header being requested, and requires an extra round-trip before a reorg can be relayed. Save time by tracking headers that a peer is likely to know about, and send a headers chain that would connect to a peer's known headers, unless the chain would be too big, in which case we revert to sending an inv instead. Based off of @sipa's commit to announce all blocks in a reorg via inv, which has been squashed into this commit. Rebased-by: Pieter Wuille
2015-11-28Constrain constant values to a single location in codeLuke Dashjr
2015-11-23Limit setAskFor and retire requested entries only when a getdata returns.Gregory Maxwell
The setAskFor duplicate elimination was too eager and removed entries when we still had no getdata response, allowing the peer to keep INVing and not responding.
2015-11-23prevent peer flooding request queue for an invkazcw
mapAlreadyAskedFor does not keep track of which peer has a request queued for a particular tx. As a result, a peer can blind a node to a tx indefinitely by sending many invs for the same tx, and then never replying to getdatas for it. Each inv received will be placed 2 minutes farther back in mapAlreadyAskedFor, so a short message containing 10 invs would render that tx unavailable for 20 minutes. This is fixed by disallowing a peer from having more than one entry for a particular inv in mapAlreadyAskedFor at a time.
2015-11-20Add relaytxes status to getpeerinfoPeter Todd
2015-11-14Fix fRelayTxs commentPatick Strateman