-
Notifications
You must be signed in to change notification settings - Fork 37.7k
IPv6 support #427
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
IPv6 support #427
Conversation
A simple "-connect=[ipv6address]" test was succesful on Ubuntu, OSX and Win7 (mingw build). Incoming connections are only tested on Ubuntu now. A test IPv6 node is running on 2a02:348:5e:5a29::1, with 16 connection slots reserved for IPv6 connections. |
Been discussing some alternate connection logic and anti-DDoS stuff wrt filling addr.dat on IRC, just something that needs done first. |
This commit introduces IPv6 support (selectable at compile time), General changes (even when IPv6 support is not compiled in): * Valid, routable IPv6 addresses are stored and forwarded * Name lookups are done using the general getaddrinfo() call * The detection system for the local address is improved. (addresses are classified according to their 'reachability', and the most reachable local address encountered is used). * The rule that no two connections to addresses within the same /16 should be attempted, was generalized by defining address groups: * IPv4 addresses are grouped in /16 blocks * IPv6 addresses are grouped in /32 blocks * Tunneled IPv6 addresses use the encapsulated IPv4 address (teredo, 6to4, SIIT, well-known prefix) * Hostnames can be given using the "[host]:port" format. * Support for the "checkorder" message was removed (obsolete, and not worth porting) Behaviour changes when IPv6 support is enabled: * DNS lookups also return IPv6 matches * The listening socket is bound to the IPv6 ANY address (::/128) instead of the IPv4 ANY address (0.0.0.0) * Connections to non-IPv4 addresses are attempted, using IPv6 sockets (connections to IPv4 addresses still use IPv4 sockets) * A local IPv6 address is used instead of an IPv4 one if no routable IPv4 address is available. In this case, it is not advertized through IRC (obsolete). Internal changes: * CAddress's "ip" and "port" fields are made private. To inspect them, use GetSockAddrIPv4(), GetSockAddrIPv6() and GetPort(). * CAddress's "vchReserved" field was removed, in favor of a full 16-byte "ip" field. The serialized format is unchanged. * The IsLocal() and IsRoutable() calls have been extended to support IPv6 address classes (including documentation IP's, private networks, auto configuration, and unique local addresses) * IP addresses are never passed as ints anymore, but as CAddresses. * No IRC nickname format is defined for IPv6 - IPv6 addresses are expected to be propagated using DNS seeding and the P2P network. Inspired by Luke Dashjr's earlier IPv6 patch.
@TheBlueMatt: Would you mind summarizing the results of your discussion back then here? I'm afraid that they might get lost otherwise, as no one seems to be working on them at the moment. |
Here are the IRC logs I have for that night (sorry, I dont feel like going through and actually parsing this): **** BEGIN LOGGING AT Sat Jul 23 22:53:17 2011 Jul 24 00:00:36 and under my control (and 1 more /64 and /48 could be which would also be in diff /40s ... without multiple accounts) |
The World IPv6 Launch is coming. Ideally, Bitcoin should support IPv6 before that day. |
Most of the changes in this pull request are in the already-merged netbase (network stack refactor). I'm working on tackling the address issue, but this pull request can be closed until then. |
8225239 Merge bitcoin#433: Make the libcrypto detection fail the newer API. 12de863 Make the libcrypto detection fail the newer API. 2928420 Merge bitcoin#427: Remove Schnorr from travis as well 8eecc4a Remove Schnorr from travis as well a8abae7 Merge bitcoin#310: Add exhaustive test for group functions on a low-order subgroup b4ceedf Add exhaustive test for verification 83836a9 Add exhaustive tests for group arithmetic, signing, and ecmult on a small group 20b8877 Add exhaustive test for group functions on a low-order subgroup 80773a6 Merge bitcoin#425: Remove Schnorr experiment e06e878 Remove Schnorr experiment 04c8ef3 Merge bitcoin#407: Modify parameter order of internal functions to match API parameter order 6e06696 Merge bitcoin#411: Remove guarantees about memcmp-ability 40c8d7e Merge bitcoin#421: Update scalar_4x64_impl.h a922365 Merge bitcoin#422: Restructure nonce clearing 3769783 Restructure nonce clearing 0f9e69d Restructure nonce clearing 9d67afa Update scalar_4x64_impl.h 7d15cd7 Merge bitcoin#413: fix auto-enabled static precompuatation 00c5d2e fix auto-enabled static precompuatation 91219a1 Remove guarantees about memcmp-ability 353c1bf Fix secp256k1_ge_set_table_gej_var parameter order 541b783 Fix secp256k1_ge_set_all_gej_var parameter order 7d893f4 Fix secp256k1_fe_inv_all_var parameter order git-subtree-dir: src/secp256k1 git-subtree-split: 8225239
8225239 Merge bitcoin#433: Make the libcrypto detection fail the newer API. 12de863 Make the libcrypto detection fail the newer API. 2928420 Merge bitcoin#427: Remove Schnorr from travis as well 8eecc4a Remove Schnorr from travis as well a8abae7 Merge bitcoin#310: Add exhaustive test for group functions on a low-order subgroup b4ceedf Add exhaustive test for verification 83836a9 Add exhaustive tests for group arithmetic, signing, and ecmult on a small group 20b8877 Add exhaustive test for group functions on a low-order subgroup 80773a6 Merge bitcoin#425: Remove Schnorr experiment e06e878 Remove Schnorr experiment 04c8ef3 Merge bitcoin#407: Modify parameter order of internal functions to match API parameter order 6e06696 Merge bitcoin#411: Remove guarantees about memcmp-ability 40c8d7e Merge bitcoin#421: Update scalar_4x64_impl.h a922365 Merge bitcoin#422: Restructure nonce clearing 3769783 Restructure nonce clearing 0f9e69d Restructure nonce clearing 9d67afa Update scalar_4x64_impl.h 7d15cd7 Merge bitcoin#413: fix auto-enabled static precompuatation 00c5d2e fix auto-enabled static precompuatation 91219a1 Remove guarantees about memcmp-ability 7a49cac Merge bitcoin#410: Add string.h include to ecmult_impl 0bbd5d4 Add string.h include to ecmult_impl 353c1bf Fix secp256k1_ge_set_table_gej_var parameter order 541b783 Fix secp256k1_ge_set_all_gej_var parameter order 7d893f4 Fix secp256k1_fe_inv_all_var parameter order c5b32e1 Merge bitcoin#405: Make secp256k1_fe_sqrt constant time 926836a Make secp256k1_fe_sqrt constant time e2a8e92 Merge bitcoin#404: Replace 3M + 4S doubling formula with 2M + 5S one 8ec49d8 Add note about 2M + 5S doubling formula 5a91bd7 Merge bitcoin#400: A couple minor cleanups ac01378 build: add -DSECP256K1_BUILD to benchmark_internal build flags a6c6f99 Remove a bunch of unused stdlib #includes 65285a6 Merge bitcoin#403: configure: add flag to disable OpenSSL tests a9b2a5d configure: add flag to disable OpenSSL tests b340123 Merge bitcoin#402: Add support for testing quadratic residues e6e9805 Add function for testing quadratic residue field/group elements. efd953a Add Jacobi symbol test via GMP fa36a0d Merge bitcoin#401: ecmult_const: unify endomorphism and non-endomorphism skew cases c6191fd ecmult_const: unify endomorphism and non-endomorphism skew cases 0b3e618 Merge bitcoin#378: .gitignore build-aux cleanup 6042217 Merge bitcoin#384: JNI: align shared files copyright/comments to bitcoinj's 24ad20f Merge bitcoin#399: build: verify that the native compiler works for static precomp b3be852 Merge bitcoin#398: Test whether ECDH and Schnorr are enabled for JNI aa0b1fd build: verify that the native compiler works for static precomp eee808d Test whether ECDH and Schnorr are enabled for JNI 7b0fb18 Merge bitcoin#366: ARM assembly implementation of field_10x26 inner (rebase of bitcoin#173) 001f176 ARM assembly implementation of field_10x26 inner 0172be9 Merge bitcoin#397: Small fixes for sha256 3f8b78e Fix undefs in hash_impl.h 2ab4695 Fix state size in sha256 struct 6875b01 Merge bitcoin#386: Add some missing `VERIFY_CHECK(ctx != NULL)` 2c52b5d Merge bitcoin#389: Cast pointers through uintptr_t under JNI 43097a4 Merge bitcoin#390: Update bitcoin-core GitHub links 31c9c12 Merge bitcoin#391: JNI: Only call ecdsa_verify if its inputs parsed correctly 1cb2302 Merge bitcoin#392: Add testcase which hits additional branch in secp256k1_scalar_sqr d2ee340 Merge #388: bench_ecdh: fix call to secp256k1_context_create 093a497 Add testcase which hits additional branch in secp256k1_scalar_sqr a40c701 JNI: Only call ecdsa_verify if its inputs parsed correctly faa2a11 Update bitcoin-core GitHub links 47b9e78 Cast pointers through uintptr_t under JNI f36f9c6 bench_ecdh: fix call to secp256k1_context_create bcc4881 Add some missing `VERIFY_CHECK(ctx != NULL)` for functions that use `ARG_CHECK` 6ceea2c align shared files copyright/comments to bitcoinj's 70141a8 Update .gitignore 7b549b1 Merge bitcoin#373: build: fix x86_64 asm detection for some compilers bc7c93c Merge bitcoin#374: Add note about y=0 being possible on one of the sextic twists e457018 Merge bitcoin#364: JNI rebased 86e2d07 JNI library: cleanup, removed unimplemented code 3093576 JNI library bd2895f Merge pull request bitcoin#371 e72e93a Add note about y=0 being possible on one of the sextic twists 3f8fdfb build: fix x86_64 asm detection for some compilers e5a9047 [Trivial] Remove double semicolons c18b869 Merge pull request bitcoin#360 3026daa Merge pull request bitcoin#302 03d4611 Add sage verification script for the group laws a965937 Merge pull request bitcoin#361 83221ec Add experimental features to configure 5d4c5a3 Prevent damage_array in the signature test from going out of bounds. 419bf7f Merge pull request bitcoin#356 03d84a4 Benchmark against OpenSSL verification git-subtree-dir: src/secp256k1 git-subtree-split: 8225239
8eecc4a Remove Schnorr from travis as well (Pieter Wuille)
Add automatic source formatting checking
Bump to v0.14.10
06f1b42 Don't edit Chainparams after initialization (Jorge Timón) 875a47c MOVEONLY: Move versionbits info out of versionbits.o (Jorge Timón) Pull request description: This is a backport of bitcoin#13311 since it's already merged, merging this in elements-0.17 should at least make the next rebase slightly easier. And since we're heavily touching chainparams in elements, I think it's a good thing. Tree-SHA512: 177f6396a34ecf87b609b39a108cc2b1e5b49bd8d12b705a4ae0241c7a5007db754ff01d6d045ee1e6a219ec6c6767663cd98558752c83961c4aff3378aef5a2
…for rpc tests a1e0c56 QA: Use resgtest2 chain instead of regtest for rpc tests (Jorge Timón) 4454c52 QA: Adapt BitcoinTestFramework for chains other than "regtest" (Jorge Timón) a06be15 Testchains: Introduce custom chain whose constructor... (Jorge Timón) 46749eb Testchains: Qt: Simplify network/chain styles and add a default purple (Jorge Timón) c0c1e38 Testchains: Generic selection with -chain=<str> in addition of -testnet and -regtest (Jorge Timón) 56515c3 9102: Really don't validate genesis block (Gregory Sanders) Pull request description: Backport of bitcoin#8994 The tests seem to pass with: ``` python3 ./test/functional/test_runner.py -j4 --extended ``` Let's please try to keep all general review things on bitcoin#8994 and elements-specific things here. Dependencies: - [x] [0.17] Don't edit Chainparams after initialization bitcoin#427 - [x] [0.17] Test: Fix example_test.py bitcoin#434 Tree-SHA512: e216587b6f9d3a462372915e01c8eb3c65a61e4ea29f398e65a7fc03a3ea5676c4711527b5cc2c115893591e7cd5b0ecd2f1fac4faf7ef747a022e2657bc99d4
This commit introduces IPv6 support (selectable at compile time),
General changes (even when IPv6 support is not compiled in):
Behaviour changes when IPv6 support is enabled:
For internal changes, see the commit message.
Possible future improvements: