Commit Graph

1419 Commits

Author SHA1 Message Date
Adam Ierymenko
2258e36a59 Move replication of COMs to avoid race condition. 2015-10-20 16:34:21 -07:00
Adam Ierymenko
59e1444b27 Finish wiring up Cluster, fix some issues with other recent changes. 2015-10-20 16:31:41 -07:00
Adam Ierymenko
eb79d4a2f3 Wire up peer announcement in cluster. 2015-10-20 16:24:21 -07:00
Adam Ierymenko
57e29857cf Cluster work -- integrating with the rest of the code. 2015-10-20 15:27:53 -07:00
Adam Ierymenko
5e6eae620b Make _members dynamically allocated due to static array limit on ARM. 2015-10-19 16:18:57 -07:00
Adam Ierymenko
69dad37d8f Restore default World for commit to upstream 2015-10-19 15:23:43 -07:00
Adam Ierymenko
cfdcce6d12 Fix very obscure IP scope classification logic bug. 2015-10-19 15:19:04 -07:00
Adam Ierymenko
0b2e5ed499 Fix some broken logic in Path::reliable() 2015-10-19 15:11:43 -07:00
Adam Ierymenko
9150778757 . 2015-10-19 15:04:26 -07:00
Adam Ierymenko
50f3ccd3c9 . 2015-10-19 15:03:58 -07:00
Adam Ierymenko
584072fa6a Fix for V4/V6 stable addressing. 2015-10-19 14:04:36 -07:00
Adam Ierymenko
3adb183c5f Fix bad COM attachment bug and eliminate an unnecessary redundant check. 2015-10-19 13:38:27 -07:00
Adam Ierymenko
95953b48f9 Do not allow VERB_RENDEZVOUS from non-upstream peers to block potential DOS vector. 2015-10-19 12:56:29 -07:00
Adam Ierymenko
aa6e3c79a0 Some test stuff that will not be pushed elsewhere. 2015-10-19 10:49:31 -07:00
Adam Ierymenko
738fa5a5e5 . 2015-10-16 12:10:57 -07:00
Adam Ierymenko
cc4d0199e7 Fix vProto init. 2015-10-16 10:58:59 -07:00
Adam Ierymenko
781f06ef82 Accept OK for confirm of HELLO or ECHO. 2015-10-16 10:48:38 -07:00
Adam Ierymenko
f9f60f89d9 Peer save/restore fix. 2015-10-16 10:45:58 -07:00
Adam Ierymenko
5ce3aac929 Add rate limit on receive of DIRECT_PATH_PUSH to prevent DOS exploitation. 2015-10-16 10:28:09 -07:00
Adam Ierymenko
2229e91b57 IPv6 support fixes. 2015-10-16 10:10:12 -07:00
Adam Ierymenko
2debde3451 GitHub issue #235, and I also see no reason not to communicate with people from other Worlds. 2015-10-15 07:22:17 -07:00
Adam Ierymenko
9ece8c465e decrypt fix 2015-10-14 15:49:41 -07:00
Adam Ierymenko
59389b3dce Untested cluster code, not enabled. 2015-10-14 14:17:55 -07:00
Adam Ierymenko
619e113748 Work in progress on Cluster for new root infrastructure, multi-homing. 2015-10-14 14:12:12 -07:00
Adam Ierymenko
c312ae221f Fix for world size in OK(HELLO) 2015-10-14 10:45:33 -07:00
Adam Ierymenko
719233617c Add uint16_t key to Hashtable, and make Salsa20 zero its keyspace on destruction. 2015-10-14 10:14:07 -07:00
Adam Ierymenko
489e1a5b83 Don't keep connections up longer than the alive timeout (unless they are relays or roots) 2015-10-13 13:51:54 -07:00
Adam Ierymenko
824ed99160 . 2015-10-13 12:42:54 -07:00
Adam Ierymenko
70d8e3ad94 Expose world ID and world timestamp in ZT_NodeStatus 2015-10-13 12:31:38 -07:00
Adam Ierymenko
e268d9492a cleanup 2015-10-13 12:18:47 -07:00
Adam Ierymenko
123c466843 Full integration of World and World updates. 2015-10-13 12:17:47 -07:00
Adam Ierymenko
5d2f523e81 World stuff... 2015-10-13 12:10:44 -07:00
Adam Ierymenko
05677f57e2 Add C output to mkworld. 2015-10-13 08:55:21 -07:00
Adam Ierymenko
cae58f43f1 More World stuff, and mkworld. 2015-10-13 08:49:36 -07:00
Adam Ierymenko
1b1945c63e Work in progress on refactoring root-topology into World and adding in-band updates. 2015-10-12 18:25:29 -07:00
Adam Ierymenko
70fe7dd1fd cleanup 2015-10-12 16:40:57 -07:00
Adam Ierymenko
eff1fe3c61 Create files for each hop (more convenient) and fix a packet parse bug. 2015-10-09 16:22:34 -07:00
Adam Ierymenko
aec13b50fd Be a bit more verbose in circuit test reports to more clearly track current and upstream hop in graph traversal history. 2015-10-09 15:05:26 -07:00
Adam Ierymenko
a95fa379cc Circuit tests basically work but need some tweaks, and fix some issues found with valgrind. 2015-10-09 14:51:38 -07:00
Adam Ierymenko
0c498556d5 Unroll Salsa20 fully for a little more speed (non-SSE now almost as fast as SSE) 2015-10-09 09:39:27 -07:00
Adam Ierymenko
3fa6dd377f docs 2015-10-09 08:51:57 -07:00
Adam Ierymenko
160278c489 Little bit of reorg in Salsa20 which seems to speed things up very slightly. 2015-10-08 17:42:53 -07:00
Adam Ierymenko
558775d544 Merge branch 'adamierymenko-dev' of http://10.6.6.2/zerotier/ZeroTierOne into adamierymenko-dev 2015-10-08 13:26:43 -07:00
Adam Ierymenko
a3876353ca Abiltiy to post a test via the controller web API, and parsing of CIRCUIT_TEST_REPORT messages. 2015-10-08 13:25:38 -07:00
Adam Ierymenko
273f0d18b0 docs 2015-10-08 09:05:25 -07:00
Grant Limberg
9347d6c866 Make it so ZeroTierOne.h can be used with a C compiler again. 2015-10-07 18:04:40 -07:00
Adam Ierymenko
fea1b6b2c3 docs 2015-10-07 16:25:08 -07:00
Adam Ierymenko
0ce0bc00d2 Make sure received() gets called for some new messages, and docs. 2015-10-07 16:20:54 -07:00
Adam Ierymenko
69b44bf9a5 Finally add an ECHO. 2015-10-07 16:11:50 -07:00
Adam Ierymenko
73cafbe0ec Limit proof of work difficulty to something sane. 2015-10-07 13:46:44 -07:00
Adam Ierymenko
e5f168f599 Add proof of work request for future DDOS mitigation use. 2015-10-07 13:35:46 -07:00
Adam Ierymenko
7d62dbe9f7 Tune NAT-t keepalives so that timing is better obeyed, clean up a build warning, and fix a potential source of network recursion (though harmless). 2015-10-07 11:57:59 -07:00
Adam Ierymenko
13f14c2f4c Kill debug line. 2015-10-07 10:56:47 -07:00
Adam Ierymenko
c952fbbd8d Only enable 128-bit Poly1305 on X86_64 right now. Has compilation issues on ARM, but the 64-bit version should be fine. 2015-10-07 10:40:59 -07:00
Adam Ierymenko
ab0228f626 More cleanup and simple refactoring, consolidate InetAddres serialize/deserialize into the class. 2015-10-07 10:30:47 -07:00
Adam Ierymenko
1b2cac0cc5 Trim some cruft that is not used and probably never would be. 2015-10-07 09:38:33 -07:00
Adam Ierymenko
598a1d8dd7 Try reopening /dev/urandom if there is a problem. 2015-10-06 18:10:40 -07:00
Adam Ierymenko
64aaea3978 Cleanup, and add an even faster Poly1305 on systems that support it. 2015-10-06 18:04:53 -07:00
Adam Ierymenko
477feee8a3 Some work on CIRCUIT_TEST, and a significant speedup to Poly1305. 2015-10-06 17:55:57 -07:00
Adam Ierymenko
3593fb3462 Send initial CIRCUIT_TEST packet. 2015-10-06 15:16:41 -07:00
Adam Ierymenko
d3f29d09e8 Plumbing through circuit test stuff. 2015-10-06 14:42:51 -07:00
Adam Ierymenko
5341afcdcd Handling of CIRCUIT_TEST, should be ready to test. 2015-10-06 11:47:16 -07:00
Adam Ierymenko
57c857e89a Fix TRACE output. 2015-10-06 06:57:00 -07:00
Grant Limberg
c16ad053b6 no toString() method on peer. Commenting out for now. 2015-10-02 19:39:46 -07:00
Grant Limberg
6080a45c9c change cert to com. no variable named cert. 2015-10-02 19:39:13 -07:00
Adam Ierymenko
5384f185ae Simplify Dictionary and reduce memory usage, now no more std::maps in core. 2015-10-01 18:12:16 -07:00
Adam Ierymenko
76a95dc58f The return of peer peristence. 2015-10-01 17:09:01 -07:00
Adam Ierymenko
5076c49210 Peer serialization and related changes. 2015-10-01 15:40:54 -07:00
Adam Ierymenko
2fa21aa676 . 2015-10-01 13:43:57 -07:00
Adam Ierymenko
3999e468b7 Need to hold nconf so *com does not die while being used. 2015-10-01 13:43:15 -07:00
Adam Ierymenko
6693149f3e Send COM with MULTICAST_GATHER for future use. 2015-10-01 13:34:12 -07:00
Adam Ierymenko
2c196307ee --bugs; 2015-10-01 13:01:18 -07:00
Adam Ierymenko
d6676a9d6c Always announce multicast groups, not just to peers with direct links, and push network COMs to any MULTICAST_LIKE recipient for future use. 2015-10-01 12:50:19 -07:00
Adam Ierymenko
a7409850d6 Get trim() out of core where it is not needed. 2015-10-01 12:37:18 -07:00
Adam Ierymenko
53e5f94b99 . 2015-10-01 12:25:43 -07:00
Adam Ierymenko
64bf3ffe6c Mutex cleanup. 2015-10-01 11:44:09 -07:00
Adam Ierymenko
9405150b11 Restore group announcement on Peer::receive() but centralize packet composition in one place. 2015-10-01 11:37:02 -07:00
Adam Ierymenko
a3db7d0728 Refactor: move network COMs out of Network and into Peer in prep for tightening up multicast lookup and other things. 2015-10-01 11:11:52 -07:00
Adam Ierymenko
11ff96ba1d Consider IPv6 paths reliable (no constant keepalives needed) 2015-09-30 15:20:08 -07:00
Adam Ierymenko
0d0039674f Add new verb names, and fix some Mac compiler flags. 2015-09-30 14:48:07 -07:00
Adam Ierymenko
789046ca57 Speed up Salsa20 just a bit. 2015-09-30 14:35:05 -07:00
Adam Ierymenko
1a4f16e0ed More work on circuit testing... 2015-09-30 13:59:05 -07:00
Adam Ierymenko
2d0adb562d Specify circuit test messages. 2015-09-27 11:37:39 -07:00
Adam Ierymenko
f69454ec98 (1) Make ZT_ naming convention consistent (get rid of ZT1_), (2) Make local interface a full sockaddr_storage instead of an int identifier, which turns out to be better for multi-homing and other uses. 2015-09-24 16:21:36 -07:00
Adam Ierymenko
0e5aac6a11 Prefer IPv6 paths if available. 2015-09-23 16:16:36 -07:00
Adam Ierymenko
a3ed5277ef Make sure ZT_NO_TYPE_PUNNING also obeyed here. 2015-09-23 14:09:27 -07:00
Adam Ierymenko
2a527ea82e Fix for timer jitter problem. 2015-09-23 14:01:41 -07:00
Adam Ierymenko
367ffde00c Plumb through localInterfaceId to track local interfaces corresponding with remote addresses. 2015-09-23 13:49:56 -07:00
Adam Ierymenko
4464fa5d39 Eliminate another warning. 2015-09-23 10:29:05 -07:00
Adam Ierymenko
86996d4315 Eliminate compiler warning. 2015-09-23 10:27:53 -07:00
Adam Ierymenko
d656e87395 Send a random small payload for NAT keepalives, since zero byte packets seem to fail to keep associations alive behind some NATs. 2015-09-22 15:58:00 -07:00
Adam Ierymenko
3664966340 Generate local IPv6 addresses from network IDs and addresses. 2015-09-17 21:30:32 -07:00
Adam Ierymenko
c1a53a2653 ARP cache and responder agent code for use in netcon and iOS. 2015-09-11 11:45:04 -07:00
Adam Ierymenko
0d386f1c31 Add a bit of useful testing instrumentation to SqliteNetworkController. 2015-09-08 11:35:55 -07:00
Adam Ierymenko
85b90f122a Final std::map<> from Switch, and add some smallish default values for hash size. 2015-09-04 15:35:43 -07:00
Adam Ierymenko
3dba016a93 Almost done... very few std::map<>s remaining in any spot that matters. 2015-09-04 15:21:22 -07:00
Adam Ierymenko
db0369e9b8 Remove way-overkill multimap from Switch. 2015-09-04 14:56:39 -07:00
Adam Ierymenko
0ab3e49be9 Starting in on Switch... kill map in defrag queue, which will probably improve performance pretty decently under high load with lots of peers. 2015-09-04 14:44:22 -07:00
Adam Ierymenko
f116c4b9c0 ... and another ... 2015-09-04 14:24:31 -07:00
Adam Ierymenko
307e44f7c8 Two for one! (std::map removal) 2015-09-04 14:14:32 -07:00
Adam Ierymenko
d1341578d8 ... and another one! 2015-09-04 13:53:48 -07:00
Adam Ierymenko
7b8ce16057 Another std::map<> dies. 2015-09-04 13:42:19 -07:00
Adam Ierymenko
3a959a7763 Swap out std::map<> for Hashtable<> for main peer database in Topology. (ongoing std::map-ectomy) 2015-09-04 12:14:21 -07:00
Adam Ierymenko
cfd101c9b8 Add entries() to go with keys() for future use. 2015-09-04 11:50:12 -07:00
Adam Ierymenko
da9a720c3f Hash table bug fix, and add copy constructor and assignment operator for principle of least surprise. 2015-09-03 17:33:06 -07:00
Adam Ierymenko
b11ffc9635 Integrate Hashtable into Multicaster, where @mwarning found heaviest std::map() overhead. 2015-08-27 16:17:21 -07:00
Adam Ierymenko
3947807b1f A simple and fast Hashtable, tested but not yet integrated with anything. 2015-08-27 15:36:13 -07:00
Adam Ierymenko
5fcef91278 Ignore old root-topology if present -- fix for upgrading on Linux and possibly elsewhere. 2015-08-25 09:42:37 -07:00
Adam Ierymenko
facb009a1d Add security notice to auto-update info in -h output, and fix a missing paren. 2015-07-31 09:50:55 -07:00
Adam Ierymenko
8d09c37140 Remove a bit of redundant logic, and also announce MULTICAST_LIKEs to controllers (for future use). 2015-07-31 09:37:13 -07:00
Adam Ierymenko
f6ced547be Dead code removal. 2015-07-31 08:56:31 -07:00
Adam Ierymenko
eea8d58afa docs,cleanup 2015-07-28 12:39:03 -07:00
Adam Ierymenko
21e6850722 Cancel NAT-t attempts if peer is no longer "alive" 2015-07-28 12:18:59 -07:00
Adam Ierymenko
5986d83738 Kill more kittens. 2015-07-28 12:04:14 -07:00
Adam Ierymenko
4564dd95ff Revert... no luck with any of that. 2015-07-28 12:00:50 -07:00
Adam Ierymenko
d2bfdfa6e7 Play with NAT-t tweaks some more. 2015-07-28 11:57:18 -07:00
Adam Ierymenko
b69afa010e Disable type punning on ARM by ifdef. 2015-07-28 11:50:01 -07:00
Adam Ierymenko
708aac1ea7 Remove some left over debug code, and fix attempt to send to self if we are an active bridge. 2015-07-28 11:43:09 -07:00
Adam Ierymenko
17bfd4d55e Add TRACE for NAT-t debugging. 2015-07-28 11:32:34 -07:00
Adam Ierymenko
b31071463c Try another NAT traversal improvement. 2015-07-28 11:28:47 -07:00
Adam Ierymenko
dda376c9eb Nuke some abandoned code. 2015-07-28 11:16:43 -07:00
Adam Ierymenko
821f1f366e Fix to NAT escalation sequence. 2015-07-27 17:34:58 -07:00
Adam Ierymenko
e99eda4a4a Fix IP scoping bug, and disable remotely reported surface push... not helping. :( 2015-07-27 17:28:13 -07:00
Adam Ierymenko
fadb291962 Fix infinite loop typo. 2015-07-27 17:14:49 -07:00
Adam Ierymenko
f0003ea922 Push remote surface as reported by peers along with known interface direct paths to assist with (some) NAT traversal. (trying this, may back out if not effective) 2015-07-27 17:02:43 -07:00
Adam Ierymenko
e30ba3e138 Eliminate some aggressive port scanning NAT-t behavior that has proven ineffective. 2015-07-27 16:43:27 -07:00
Adam Ierymenko
7a15d8a7e3 Fix leaving of networks to actually call Network::destroy(). 2015-07-24 14:50:44 -07:00
Adam Ierymenko
d647a587a1 (1) Fix updating of network revision counter on member change.
(2) Go back to timestamp as certificate revision number. This is simpler
    and more robust than using the network revision number for this and
    forcing network revision fast-forward, which could cause some peers
    to fall off the horizon when you don't want them to.
2015-07-23 17:18:20 -07:00
Adam Ierymenko
b3516c599b Add a rate limiting circuit breaker to the network controller to prevent flooding attacks and race conditions. 2015-07-23 10:10:17 -07:00
Adam Ierymenko
3ba54c7e35 Eliminate some poorly thought out optimizations from the netconf/controller interaction,
and go ahead and bump version to 1.0.4.

For a while in 1.0.3 -dev I was trying to optimize out repeated network controller
requests by using a ratcheting mechanism. If the client received a network config
that was indeed different from the one it had, it would respond by instantlly
requesting it again.

Not sure what I was thinking. It's fundamentally unsafe to respond to a message
with another message of the same type -- it risks a race condition. In this case
that's exactly what could happen.

It just isn't worth the added complexity to avoid a tiny, tiny amount of network
overhead, so I've taken this whole path out.

A few extra bytes every two minutes isn't worth fretting about, but as I recall
the reason for this optimization was to save CPU on the controller. This can be
achieved by just caching responses in memory *there* and serving those same
responses back out if they haven't changed.

I think I developed that 'ratcheting' stuff before I went full time on this. It's
hard to develop stuff like this without hours of sustained focus.
2015-07-23 09:50:10 -07:00
Adam Ierymenko
8c18c60c00 sp. 2015-07-17 15:30:13 -07:00
Adam Ierymenko
88949a750f Workaround for uclibc missing map::operator==() 2015-07-13 11:39:55 -07:00
Adam Ierymenko
547b1c6157 Add additional TRACE output in pushDirectPaths. 2015-07-13 10:35:33 -07:00
Adam Ierymenko
0b354803f3 Clean up some YAGNI issues with implementation of GitHub issue #180, and make best path choice aware of path rank. 2015-07-13 10:03:04 -07:00
Adam Ierymenko
0b9524f23d Merge branch 'adamierymenko-dev' of http://git.int.zerotier.com/zerotier/zerotierone into adamierymenko-dev 2015-07-13 09:30:02 -07:00
Adam Ierymenko
4bf3bcbd55 Fixes to PUSH_DIRECT_PATHS. 2015-07-13 09:29:51 -07:00
Adam Ierymenko
3f0eca72f7 ZT_TRACE build fix. 2015-07-13 08:36:22 -07:00
Adam Ierymenko
fe20f0d7cd Put back legacy code to listen for LAN announcements to support same network location with pre-1.0.4 clients. 2015-07-13 08:33:02 -07:00
Adam Ierymenko
a297e4a5bf Add build def ZT_NO_TYPE_PUNNING, which when defined disables type punning code that might cause unaligned access errors on architectures that care (e.g. Android/ARM) 2015-07-08 09:12:51 -07:00
Adam Ierymenko
412389ec75 Implement ERROR_UNWATNED_MULTICAST 2015-07-07 11:49:38 -07:00
Adam Ierymenko
cf6f30963c Kill a potential source of type punning BUS errors on Android, and besides that hack probably did not improve performance at all given the short lenghts of things compared with secureEq() 2015-07-07 10:59:59 -07:00
Adam Ierymenko
3f567a07ca Save a little bit of RAM by getting rid of overkill CMWC4096 non-crypto PRNG and replacing it with a simple non-crypto PRNG that just uses Salsa20. 2015-07-07 10:49:50 -07:00
Adam Ierymenko
41fc08b330 etherTypeName() is only used in Switch and only with ZT_TRACE 2015-07-07 10:06:05 -07:00
Adam Ierymenko
07ea4fd4f9 Fix potential bug in controller config request. 2015-07-07 10:02:48 -07:00
Adam Ierymenko
778c7e6e70 More cleanup to direct path push, comment fixes, etc. 2015-07-07 10:00:34 -07:00
Adam Ierymenko
c863ff3f02 A bunch of comments and cleanup, including some to yesterday's direct path pushing changes. Move path viability check to one place, and stop trying to use link-local addresses since they are not reliable. 2015-07-07 08:54:48 -07:00
Adam Ierymenko
f398952a6c Revert some bad docs in Packet -- I think we will still use that. Also rename addMembershipCertificate to more security-descriptive validateAndAddMembershipCertificate, give it a return value, and drop unused force parameter. 2015-07-07 08:14:41 -07:00
Adam Ierymenko
6da9d2d36f Remove debug printf(). 2015-07-06 17:23:22 -07:00
Adam Ierymenko
f881cdd767 Add new .h file to VS build, and Windows side of local interface address enumeration. 2015-07-06 17:22:37 -07:00
Adam Ierymenko
84ba365c77 Fix bug in direct path push send. 2015-07-06 17:20:41 -07:00
Adam Ierymenko
cac55105c3 Fix a regression. 2015-07-06 16:40:23 -07:00
Adam Ierymenko
a87cd2d094 Unix side of local interface address awareness for GitHub issue #180. 2015-07-06 16:32:34 -07:00
Adam Ierymenko
235f4762b7 Plumbing for local interface addresses -- GitHub issue #180 2015-07-06 15:51:04 -07:00
Adam Ierymenko
79e9a8bcc2 Almost everything for GitHub issue #180 except direct path map setup. 2015-07-06 15:28:48 -07:00
Adam Ierymenko
fad9dff2db Almost all of GitHub issue #180 2015-07-06 15:05:04 -07:00
Adam Ierymenko
1632aec102 Check Network::isAllowed() always on multicast send. 2015-07-06 14:53:27 -07:00
Adam Ierymenko
255320e2a6 pushDirectPaths() implementation 2015-07-06 14:39:28 -07:00
Adam Ierymenko
93bb934d4e Some cleanup, docs, and Path -> Path > RemotePath refactor. 2015-07-06 14:08:13 -07:00
Adam Ierymenko
feddd946f9 For curiosity add Salsa20/8 to benchmarks. 2015-07-06 13:51:25 -07:00
Adam Ierymenko
6bfbc43e3c Include COM with EXT_FRAME in bridged case. 2015-07-06 12:46:27 -07:00
Adam Ierymenko
35b5dcf89d Kill debug line. 2015-07-06 12:39:20 -07:00
Adam Ierymenko
9743db3538 docs 2015-07-06 12:37:37 -07:00
Adam Ierymenko
e5f7c55c54 Documentation in Packet, more work on path push, and clean up ancient legacy support code in Switch. 2015-07-06 12:34:35 -07:00
Adam Ierymenko
f19c3c51d3 Revert slow non-SSE Salsa20 modification since it did not fix Android/ARM issue. Also update Salsa20 comments and clean up a bit. 2015-07-02 09:00:00 -07:00
Adam Ierymenko
7c9949eea3 For @glimberg -- a *possible* fix to the alignment headaches on Android/ARM. If this works we should find a define that can be used to enable it there since it will slow things down on non-x86 other architectures. 2015-07-01 12:29:23 -07:00
Adam Ierymenko
0cbbcf2884 Rename VERB_CMA to the more descriptive VERB_PHYSICAL_ADDRESS_PUSH 2015-06-29 16:01:01 -07:00
Adam Ierymenko
dbee1b38b3 Fix semantics of std::unique() to actually remove duplicates (hidden memory leak?) 2015-06-29 10:21:28 -07:00
Adam Ierymenko
3f71afd0fb Put multicast txQueue back to list. 2015-06-26 14:26:35 -07:00
Kees Bos
8a68624dae Fix cert verification check for self signed signatures 2015-06-26 07:22:13 +02:00
Adam Ierymenko
57c7992c78 GitHub issue #191 - kill intra-network multicast rate limits (which were not well supported or easily configurable anyway) -- this is really left over from the old collaborative multicast propagation algorithm. New algorithm (in for a while) has been sender-side replication in which sender "pays" all bandwidth, which intrinsically limits multicast. 2015-06-26 12:36:45 -07:00
Adam Ierymenko
c287ae4d1d Redo conversion of _networks to a vector. Just use a simple linear search and put the nwid in a pair with the pointer so linear search can be done without pointer chasing. This should be the fastest option for anything less than dozens of networks, and should save memory over the old map. 2015-06-26 11:38:31 -07:00
Moritz Warning
def9cf2a6a replace vector::erase, was missed in a previous commit (ref #186) 2015-06-23 00:09:15 +02:00
Adam Ierymenko
4aa8449fe1 Merge branch '_networks_vector' of https://github.com/mwarning/ZeroTierOne into adamierymenko-dev 2015-06-22 10:34:55 -07:00
Moritz Warning
787608b568 use _network function to reduce source code complexity 2015-06-20 16:34:19 +02:00
Moritz Warning
2b04ac5e9b replace _networks map by vector
_networks is usually quite small, using binary search on a vector might be faster comapred to std::map.
This is especially true when using uClibc++, which uses a list.
2015-06-20 16:25:21 +02:00
Adam Ierymenko
7bae95836c Root server terminology cleanup, and tighten up a security check by checking full identity of peers instead of just address. 2015-06-19 10:23:25 -07:00
Adam Ierymenko
be4f08a548 Merge pull request #186 from mwarning/txQueue_vector
replace txQueue list by vector for faster memory access and less allo…
2015-06-18 15:42:12 -07:00
Moritz Warning
0073d0f694 replace txQueue list by vector for faster memory access and less allocations 2015-06-19 00:28:51 +02:00
Adam Ierymenko
87bb0086de Almost certain fix for GitHub issue #184 on -dev 2015-06-17 12:46:12 -07:00
Adam Ierymenko
a9a390a930 Apply @marning suggested SSE auto-detect to make builds easier on non-x86 platforms: aa2fd044cb 2015-06-01 19:43:06 -07:00
Adam Ierymenko
aab17d9f1f Kill obsolete amSupernode method -- we now have no differing behaviors. 2015-06-01 19:18:26 -07:00
Adam Ierymenko
ecb6a1d84f docs 2015-06-01 19:12:20 -07:00
Adam Ierymenko
5341e32729 Fix to GitHub issue #140 -- network preferred relays. Also go ahead and allow RENDEZVOUS from regular peers. 2015-06-01 19:05:27 -07:00
Adam Ierymenko
960ceb4791 Rest of GitHub issue #140 implementation. 2015-06-01 17:50:44 -07:00
Adam Ierymenko
318c2f025b Call it _relays since there might be other kinds later. 2015-06-01 17:09:37 -07:00
Adam Ierymenko
5bc89034bc Always ping / contact network preferred relays (if any). 2015-06-01 16:53:58 -07:00
Adam Ierymenko
b3b9af0dd8 Fix for GitHub issue #170 2015-06-01 11:56:15 -07:00
Adam Ierymenko
5e3c6d9e0d Some nodeJS work, and apply fix from GitHub issue #166 plus a small optimization to avoid repeated calls to _allMulticastGroups(). 2015-05-25 14:21:05 -07:00
Adam Ierymenko
af1d29cc6f Remove obsolete method. 2015-05-25 11:54:32 -07:00
Adam Ierymenko
d8783b14eb Build fix. 2015-05-22 15:46:06 -07:00
Adam Ierymenko
6867922d9e typo 2015-05-22 15:33:33 -07:00
Adam Ierymenko
9774f789f2 TCP fallback tunneling is now working. That hurt more than expected. 2015-05-22 14:52:23 -07:00
Adam Ierymenko
cdec05af24 One second delay between NAT-t events. 2015-05-22 13:12:14 -07:00
Adam Ierymenko
196f27f1f0 Add delay to NAT-t escalation stuff to try to address GitHub issue #167 2015-05-22 13:11:55 -07:00
Adam Ierymenko
d9006712f6 Completely factor out "desperation" from the core. I thought of a significantly simpler way to move all of this logic entirely into the containing service, liberating the core from any concern over the nature of its pipe to the outside world. 2015-05-21 15:58:26 -07:00
Adam Ierymenko
1213073916 Apple auto-update stuff, now for Windows. 2015-05-20 19:38:49 -07:00
Adam Ierymenko
2810cd7c15 Build fixes for G++, building without SQLite3 present, and warning removal. 2015-05-17 23:56:47 +00:00
Adam Ierymenko
0bdd56ebd6 A few revisions to PFS design. 2015-05-15 09:04:39 -07:00
Adam Ierymenko
d0e0f5dd12 Basic OpenBSD compile fixes -- still need to update BSDEthernetTap, will do that later. Should be able to re-use FreeBSD port for OpenBSD, but we will see. 2015-05-15 08:48:53 -07:00
Adam Ierymenko
e94518590d First stab of PFS design work with PKC security -- may not implement in 1.0.3 but stubbing out. 2015-05-14 17:41:05 -07:00
Adam Ierymenko
a8835cd8b3 Some prep work to make room for perfect forward security (PFS). Will not affect existing clients. 2015-05-13 18:53:37 -07:00
Adam Ierymenko
bdce679d84 Should fix deadlock issue in GitHub issue #166 2015-05-13 16:55:18 -07:00
Kees Bos
a425bbc673 Renamed supernode to rootserver 2015-05-06 12:05:20 +02:00
Adam Ierymenko
845955dea5 Add definition for VERB_CMA -- GitHub issue #180 2015-06-13 18:08:00 +02:00
Adam Ierymenko
8aa68cd5f1 Add new fields in operator== 2015-06-13 13:13:19 +02:00
Adam Ierymenko
edbc5d3588 Gateways support in NetworkConfig object. 2015-06-13 13:06:49 +02:00
Adam Ierymenko
96a58becf8 Gateways support in network controller schema and database (not implemented yet in client) toward GitHub issue #178 2015-06-13 11:34:31 +02:00
Adam Ierymenko
40f312a827 When we reset within scope, erase the other entries for that scope so we won't keep resetting the same scope repeatedly. 2015-05-04 19:02:36 -07:00
Adam Ierymenko
18ca6f34ff Always update timestamp. 2015-05-04 18:45:39 -07:00
Adam Ierymenko
59fa687830 Make timeout also apply to null check in iam() 2015-05-04 18:43:24 -07:00
Adam Ierymenko
e922324bc6 Stop inlining all the Packet armor/dearmor stuff to reduce binary bloat. This stuff is called all over the place. 2015-05-04 18:39:53 -07:00
Adam Ierymenko
b4b067bf12 So we need to keep track of external surface per reporter, since some NATs assign different external IPs for each external destination. Keeping just one known surface could create a race condition. 2015-05-04 18:34:30 -07:00
Adam Ierymenko
da254d967f Hack around GitHub issue #165 (?) 2015-05-04 14:11:54 -07:00
Adam Ierymenko
9279bac385 Fix deadlock in SelfAwareness by deferring reconnects. 2015-04-30 21:09:41 -07:00
Adam Ierymenko
604576075e Add some missing includes that older G++ cares about. 2015-04-30 20:40:33 -07:00
Adam Ierymenko
d3820049b8 Add reported external address to OK(HELLO) TRACE to verify SN behavior. 2015-04-30 18:25:31 -07:00
Adam Ierymenko
9eb7698f0e Learn external IP addresses on OK(HELLO) too. 2015-04-30 16:40:04 -07:00
Adam Ierymenko
9a34fde8a5 Make sure identity.public exists and stays in sync, cleanup extra new in Node, and test script for local testnets. 2015-04-30 16:03:44 -07:00
Adam Ierymenko
a1005ca858 Do not unite() peers across different IP scopes as this would pretty much never work. 2015-04-26 16:03:16 -07:00
Adam Ierymenko
f5848972f9 Windows now builds and runs selftest correctly, and fixed a Windows (and possibly other platforms) issue in Phy<>. 2015-04-24 15:05:28 -07:00
Adam Ierymenko
54954f5b88 First pass of Windows cleanup and build fixes... 2015-04-24 13:35:17 -07:00
Adam Ierymenko
ddebe2d4c7 Network controller CRUD... :P 2015-04-21 16:41:35 -07:00
Adam Ierymenko
8a13cfdace Add per-network relays to NetworkConfig. 2015-04-20 17:14:16 -07:00
Adam Ierymenko
60f05518aa (1) now builds and works on Linux, (2) fix a threading problem causing carsh on shutdown, (3) cleanup in selftest, re-enable Phy and Http tests. 2015-04-20 15:12:31 -07:00
Adam Ierymenko
417f56de2f Add some TRACE instrumentation to external surface address awareness. 2015-04-17 12:19:01 -07:00
Adam Ierymenko
d2503172d8 Add some additional detail to the peer record in CAPI and JSON control plane. 2015-04-15 19:00:26 -07:00
Adam Ierymenko
ea1859541c More cleanup, and fix for the extremely unlikely case of identity collision. 2015-04-15 18:32:25 -07:00
Adam Ierymenko
f7b1437154 Putting the main binary back together... 2015-04-15 17:00:26 -07:00
Adam Ierymenko
6369c264e2 Rename netconf to controller and NetworkConfigMaster to NetworkController for consistency. 2015-04-15 15:12:09 -07:00
Adam Ierymenko
98bcc3d4b5 Disable a few noisy TRACEs, and limit how often we confirm new paths to avoid flooding. 2015-04-15 13:15:09 -07:00
Adam Ierymenko
1c9ca73065 Fix some deadlock issues, move awareness of broadcast subscription into core, other bug fixes. 2015-04-15 13:09:20 -07:00
Adam Ierymenko
c9af603b9f Add beacon broadcasting back into Node. 2015-04-14 18:20:03 -07:00
Adam Ierymenko
67f1f1892f Bunch of tap stuff, IP address assignment hookups, etc. 2015-04-14 17:57:51 -07:00
Adam Ierymenko
347e98dcd2 Just return files from listDirectory() since that is all we need, fix network request on network restore logic, and remember saved networks in service/One 2015-04-14 15:32:05 -07:00
Adam Ierymenko
49d31613b9 Fix some minor issues, now to reintegrate taps. 2015-04-14 15:16:04 -07:00
Adam Ierymenko
758b5caf94 Fix < logic. 2015-04-14 14:52:23 -07:00
Adam Ierymenko
6f4b30add8 Turns out you do have to unpack and compare sockaddr structures due to sin_len / sin6_len not present on all platforms and other junk. 2015-04-14 14:49:34 -07:00
Adam Ierymenko
1cfa67bbdd Bunch more control plane work, and shelve old UI -- React FTW. 2015-04-14 13:56:28 -07:00
Adam Ierymenko
a2605561af Basic control plane queries working. 2015-04-13 18:43:33 -07:00
Adam Ierymenko
b888e033c0 JSON control plane, almost done... 2015-04-13 18:12:45 -07:00
Adam Ierymenko
9e651b39e4 Add some TRACE around pinging (for now), and refactor service/One to just run in the foreground as some platforms may not require threads at all. 2015-04-10 11:40:45 -07:00
Adam Ierymenko
5e331d6733 Restrict unite() to desperation==0 since NAT-t only works right now with direct links. 2015-04-10 10:13:50 -07:00
Adam Ierymenko
068d311ecc TRACE compile fixes, other fixes, and it basically works! It says HELLO. 2015-04-09 20:54:00 -07:00
Adam Ierymenko
46ecad451c Starting on new service/ code to encapsulate node/ with osdep/ stuff, and add a user pointer to the CAPI. 2015-04-09 18:14:27 -07:00
Adam Ierymenko
7192fe6d15 osdep/ compile fixes, and remove some lingering OS-specific stuff from node/Defaults 2015-04-08 19:03:30 -07:00
Adam Ierymenko
ccc73b920e Node peer list function for CAPI, and some Peer cleanup. 2015-04-08 18:45:21 -07:00
Adam Ierymenko
d9e9b60a98 Node status and network list. 2015-04-08 18:25:40 -07:00
Adam Ierymenko
e34bc961db Add awareness of online status, and put old OS-dep utils in OSUtils. 2015-04-08 17:10:21 -07:00
Adam Ierymenko
0751eaabd8 Clean OS-dep stuff out of node/Utils. 2015-04-08 16:55:00 -07:00
Adam Ierymenko
4d5a6a25d3 Add events for packet decode errors, etc., and re-implement TRACE as an event. 2015-04-08 16:49:21 -07:00
Adam Ierymenko
9d9d0ef12c Rename StatusCallback to more descriptive EventCallback. 2015-04-08 16:07:47 -07:00
Adam Ierymenko
c894710ac1 Remove Logger.hpp references. 2015-04-08 16:00:48 -07:00
Adam Ierymenko
37bd6fdb9c Move Logger to attic -- last bit of OS-specific stuff to get out of core. 2015-04-08 15:56:11 -07:00
Adam Ierymenko
7529d050c7 All of node/ now compiles again! 2015-04-08 15:42:23 -07:00
Adam Ierymenko
bf2ff964e1 Utils::now() removal and a bunch of compile fixes. 2015-04-08 15:26:45 -07:00
Adam Ierymenko
ee2f51f48e Make Toplogy use dataStoreXX() methods from Node, and get rid of old TCP stuff. 2015-04-08 15:12:04 -07:00
Adam Ierymenko
40bfe37a19 Use max of core or most recent path desperation for pings. 2015-04-08 14:58:23 -07:00
Adam Ierymenko
59af674e74 Announce multicast groups on multicast subscribe. 2015-04-07 19:35:16 -07:00
Adam Ierymenko
6de7996218 Math fix. 2015-04-07 19:32:26 -07:00
Adam Ierymenko
49f031ccb4 Tons of refactoring, change to desperation algorithm to use max of core or link, porting over core loop code from old Node.cpp to new CAPI version, etc. 2015-04-07 19:31:11 -07:00
Adam Ierymenko
9e55f882d3 Starting to port from old Node() -- identity generation. 2015-04-07 16:41:56 -07:00
Adam Ierymenko
8210ed4805 Implement read from object store. 2015-04-07 14:11:47 -07:00
Adam Ierymenko
0a90681849 Add ping(), and a logic fix in SelfAwareness. 2015-04-07 12:32:05 -07:00
Adam Ierymenko
24608d5ca3 Always use HELLO to contact, and we now confirm newly learned paths via a two-way handshake to prevent half-connects. 2015-04-07 12:22:33 -07:00
Adam Ierymenko
eae2c89b09 Mutex locking fix. 2015-04-07 11:58:41 -07:00
Adam Ierymenko
52c3b7c34e Implemented empirical determination of external addressing, paritioned per scope. 2015-04-07 11:56:10 -07:00
Adam Ierymenko
817824b88b Some external surface awareness work, and IP scope classification. 2015-04-07 10:57:59 -07:00
Adam Ierymenko
a2821e9000 Add code to check external surface against reported surface from other trusted peers, and also rename ExternalSurface to SelfAwareness because lulz. 2015-04-06 20:17:21 -07:00
Adam Ierymenko
76ad19f411 Use binary_search for multicast groups, which are kept in sorted order. 2015-04-06 19:41:55 -07:00
Adam Ierymenko
758bf949db Check for subscribed multicast groups should be able to check groups bridged behind me. 2015-04-06 19:34:36 -07:00
Adam Ierymenko
4e691c8e22 build fixes 2015-04-06 18:56:08 -07:00
Adam Ierymenko
6807ccd710 Don't need to announce on multicast leave. 2015-04-06 18:28:18 -07:00
Adam Ierymenko
51f46a009a Multicast group join/leave and group membership announcement. 2015-04-06 18:27:24 -07:00
Adam Ierymenko
8001b2c0cb Network now calls port config function as per new API. 2015-04-06 16:52:52 -07:00
Adam Ierymenko
a86300c58f Network build fixes and cleanup of remaining internal references to _tap 2015-04-06 15:47:57 -07:00
Adam Ierymenko
488f5bf977 More build fixes, and attic/ some stuff. 2015-04-06 15:14:54 -07:00
Adam Ierymenko
197d272287 More NAT strategy cleanup. 2015-04-06 15:08:45 -07:00
Adam Ierymenko
be4683a96d Get rid of random port strategy -- research does not support. 2015-04-06 15:03:08 -07:00
Adam Ierymenko
5f351f2f6b build fixes. 2015-04-06 14:55:40 -07:00
Adam Ierymenko
f4fd2d4971 Bring IncomingPacket into line with new changes. 2015-04-06 14:50:53 -07:00
Adam Ierymenko
a95f1e1418 Eliminate redundant SharedPtr assignment. 2015-04-03 17:01:07 -07:00
Adam Ierymenko
6eb9289367 Bunch more cleanup, improvements to NAT traversal logic, finished updating Switch. 2015-04-03 16:52:53 -07:00
Adam Ierymenko
ee0f56355b Send path simplification. 2015-04-03 13:14:37 -07:00
Adam Ierymenko
a69e1876f1 The concept of link desperation (escalating to less desirable transports) simplifies a ton of stuff. Loads of spaghetti logic can die since we no longer have to make these decisions down in the core. 2015-04-02 17:54:56 -07:00
Adam Ierymenko
5f51653f9c More cleanup. 2015-04-01 19:16:07 -07:00
Adam Ierymenko
0214dbc277 More cleanup. 2015-04-01 19:15:21 -07:00
Adam Ierymenko
1f28ce3980 Tons more refactoring: simplify Network, move explicit management of Tap out, redo COM serialization, etc. 2015-04-01 19:09:18 -07:00
Adam Ierymenko
49349470a0 ... 2015-04-01 16:27:14 -07:00
Adam Ierymenko
8130848020 More refactoring... and update the API a bit... turns out my strategy for reducing indirect function calls also increased memcpy()s which are more expensive. This is simpler and faster. 2015-04-01 14:59:44 -07:00
Adam Ierymenko
7ff0cab1b7 docs 2015-03-31 18:33:39 -07:00
Adam Ierymenko
b723855751 Refactoring... lalalala... 2015-03-31 18:17:11 -07:00
Adam Ierymenko
36eab4f1a9 Whole heap more cleanup and refactoring... 2015-03-31 17:53:34 -07:00
Adam Ierymenko
647ce82b86 Move more stuff into osdep/ -- node/ will not use threads directly. 2015-03-31 15:23:14 -07:00
Adam Ierymenko
2c5dbecb3c More CAPI work, and move old control/ and old node/Node to attic. 2015-03-31 13:54:50 -07:00
Adam Ierymenko
fe94c9460b Phy is a better name than Wire, and other cleanup. 2015-03-31 11:52:10 -07:00
Adam Ierymenko
fe87c1db67 Work on new simplified C API -- required for embedded, language bindings, mobile (language bindings again), etc. 2015-03-30 19:46:07 -07:00
Adam Ierymenko
60158aa5dd Turns out that node/ likely has no business with or need for the system IP routing table. So shelve that code for now. 2015-03-30 17:48:48 -07:00
Adam Ierymenko
a8a92c5b89 A whole lot of Sqlite netconf master work, and some fixes elsewhere in the code. 2015-03-18 16:10:48 -07:00
Adam Ierymenko
278c8fd9f1 Wire up externally specified NetworkConfigMaster 2015-03-13 13:53:15 -07:00
Adam Ierymenko
b6fba5934a RedisNetworkConfigMaster in its own folder. Also fix some hex/decimal Redis database confusion. 2015-02-24 14:17:57 -08:00
Adam Ierymenko
ff255a34de Make NetworkConfigMaster a plugin to get Redis and other non-endpoint code out of node/ 2015-02-24 12:28:58 -08:00
Adam Ierymenko
93012b0ee5 Re-incorporation: ZeroTier Networks -> ZeroTier, Inc. [Delaware] 2015-02-17 13:11:34 -08:00
Adam Ierymenko
89f0c948f8 Physical address change message verb. 2015-02-04 11:59:02 -08:00
Adam Ierymenko
eeed31b396 Ping supernodes on surface change, and also reset TCP flag. 2015-02-02 17:02:23 -08:00
Adam Ierymenko
b7148c107d Rip out network environment fingerprint. This will be replaced by constant monitoring of actual external address surface. 2015-02-02 16:40:57 -08:00
Adam Ierymenko
b1bf3f68c3 Drop support for legacy P5 multicast, as there are fewer than 1% of these remaining on the network. 2015-02-02 16:34:01 -08:00
Adam Ierymenko
37d23336ed Surface logic in Topology. 2015-02-02 16:23:26 -08:00
Adam Ierymenko
61cff47f5b Code to track externally visible address surface. 2015-02-02 15:24:05 -08:00
Adam Ierymenko
c30bf7957e Hash code method for InetAddress 2015-02-02 14:44:24 -08:00
Adam Ierymenko
c8c5d3b06e Create netconf master if redis options are in local.conf. 2015-01-09 18:25:41 -05:00
Adam Ierymenko
0b84c10ccc Add confirmation step to new netconf, with the caveat that it will be disabled for older netconf servers to avoid race. Also add some comments. 2015-01-09 16:35:20 -05:00
Adam Ierymenko
afea153a0b Build fixes. 2015-01-08 18:17:02 -05:00
Adam Ierymenko
64ba596e0b C++ network config master ready to test. 2015-01-08 14:27:55 -08:00
Adam Ierymenko
60fb28a90a Cleanup, new C++ netconf code is almost ready to test! 2015-01-06 17:16:54 -08:00
Adam Ierymenko
a369c69091 C++ netconf master Redis plumbing. 2015-01-06 13:45:10 -08:00
Adam Ierymenko
b644d2a893 Add timestamp field to network config requests. 2015-01-05 17:51:50 -08:00
Adam Ierymenko
4e95384ad6 Cleanup, add tristate to config code in Network, and happy new year! 2015-01-05 17:47:59 -08:00
Adam Ierymenko
96e9a90e8e docs 2015-01-05 16:19:56 -08:00
Adam Ierymenko
87c599df5c Back out service message type -- YAGNI violation. 2015-01-05 15:52:02 -08:00
Adam Ierymenko
56cfe1d603 Strip out old Service code, add new service message type. 2015-01-05 11:47:22 -08:00
Adam Ierymenko
f60dfe4963 FreeBSD works, and some documentation fixes. 2014-12-19 15:18:20 -08:00
Adam Ierymenko
ff539c22f9 locallyValidate() is expensive -- stop doing it on every HELLO since in most cases we already know the identity and know it is valid 2014-12-16 09:29:40 -08:00
Adam Ierymenko
149dbff3ea Windows Visual Studio meaningless-warning-ectomy. 2014-12-02 16:50:53 -08:00
Adam Ierymenko
30e82a4d9c Fix network enumeration buffer size bug -- reported by user Neal Symms via LiveAgent 2014-12-02 12:53:30 -08:00
Adam Ierymenko
8c64046a53 docs 2014-11-26 14:59:43 -08:00
Adam Ierymenko
04e4c5263e Remove more legacy code -- just doing the supernode redist for old multicast is now good enough given the small number of legacy nodes left. 2014-11-26 13:39:57 -08:00
Adam Ierymenko
4303376ba6 cleanup and docs 2014-11-26 13:30:00 -08:00
Adam Ierymenko
cda61fe2d9 docs and cleanup 2014-11-26 13:14:18 -08:00
Adam Ierymenko
0f505411cf Enable legacy multicast in Constants. 2014-11-25 14:12:33 -08:00
Adam Ierymenko
15d3e383e6 Add ZT_SUPPORT_LEGACY_MULTICAST ifdef to enable the legacy code to all be toggled. 2014-11-25 12:46:51 -08:00
Adam Ierymenko
6888c6482c Re-enable legacy multicast distribution -- still too many pre1.0.0 nodes online. 2014-11-24 10:37:34 -08:00
Adam Ierymenko
d772639cc6 Multicast code cleanup. 2014-11-24 10:05:16 -08:00
Adam Ierymenko
acac88cf77 A few more tweaks to MC algo... 2014-11-23 14:00:27 -08:00
Adam Ierymenko
0bcac1fd79 Add a bunch of high-resolution try/catch safety in Node main loop to attempt to snare gremlin. 2014-11-21 11:54:06 -08:00
Adam Ierymenko
959f611a65 Fix thinko in multicast changes... works now! 2014-11-21 11:27:53 -08:00
Adam Ierymenko
7619b0ecbd Send multicasts in random order.
This should not affect most users, but on large networks it should cause service
announcements to work a lot better. This is the result of a prolonged discussion
with a user about the visibility of game servers on a large network. The old
multicast algorithm was de-facto randomized due to its distributed nature, while
the new algorithm is more deterministic. This will restore some randomization
beyond limit-overflow conditions.

It won't affect small networks at all.
2014-11-21 10:50:27 -08:00
Adam Ierymenko
0c85b4ef5f Tweak to symmetric NAT buster to add one to the number of ports above the current one it attempts. 2014-11-20 13:42:18 -08:00
Adam Ierymenko
ee9e6a3c6b Change path selection logic to exclude non-fixed and non-active paths -- possible fix for "NAT traversal coma" issue. Also fix a typo. 2014-11-20 13:20:16 -08:00
Adam Ierymenko
7b6f10e859 Optimization: we don't need to verify signatures on certs if they're certs we already have and have verified. 2014-11-13 12:40:51 -08:00
Adam Ierymenko
c61e9c0ef9 Prevent "software laser" in legacy multicast support. Already hotpatched in supernodes. 2014-11-13 14:21:06 -05:00
Adam Ierymenko
1bd5a1ebcd Make selftest build and run on FreeBSD 10 with gmake 2014-11-04 11:20:38 -08:00
Adam Ierymenko
0e84eb3852 Back off default multicast limit just a little. 2014-10-29 18:25:24 -07:00
Adam Ierymenko
5484cf4309 More cleanup, and fix a bug in Multicaster::gather() 2014-10-29 16:24:19 -07:00
Adam Ierymenko
22d8aa4dc9 Moderate efficiency improvement on multicast gather result parsing, and go ahead and keep track of total known peers. 2014-10-29 15:26:32 -07:00
Adam Ierymenko
95f421024a Code cleanup, and fix some unsafe pointer handling in Network. 2014-10-29 13:57:37 -07:00
Adam Ierymenko
5bb854e504 Fix a nasty bug introduced in packet fragmentation a while back during refactoring, and a few other things related to multicast. 2014-10-28 17:25:34 -07:00
Adam Ierymenko
4dec598fb8 Make multicast gather slightly more aggressive, and add total to list command in testnet. 2014-10-28 15:33:10 -07:00
Adam Ierymenko
3d85a615fb NULL dereference on still-initializing node bug fix in status query commands, and doc updates. 2014-10-28 14:17:39 -07:00
Adam Ierymenko
934a575a74 Testnet seems to work a bit better now... 2014-10-27 18:23:10 -07:00
Adam Ierymenko
fe7b429866 ... 2014-10-27 17:32:37 -07:00
Adam Ierymenko
3857116724 More testnet work. 2014-10-24 16:35:06 -07:00
Adam Ierymenko
4fbb098daa Testnet work... getting there! 2014-10-23 16:46:09 -07:00
Adam Ierymenko
0a195e7bc0 Some work on simulated net... 2014-10-22 09:52:29 -07:00
Adam Ierymenko
ae228ade8c Starting on simulated socket manager. 2014-10-21 17:00:25 -07:00
Adam Ierymenko
2436e22f46 More work on abstracting socket manager. 2014-10-21 15:18:50 -07:00
Adam Ierymenko
128a131070 About halfway there in refactoring to support pluggable SocketManager. 2014-10-21 14:26:10 -07:00
Adam Ierymenko
6bc9a938cf Move socket manager implementation into osnet/ 2014-10-21 11:25:31 -07:00
Adam Ierymenko
0e47f13f14 Simplify locking semantics some more to address a deadlock. 2014-10-21 10:42:04 -07:00
Adam Ierymenko
7c0f5e97e1 Don't need to check peer version for every item in txQueue since there is only one peer. 2014-10-19 15:20:19 -07:00
Adam Ierymenko
8730d30575 Now for some clang compile fixes... 2014-10-19 13:07:50 -07:00
Adam Ierymenko
74f36f5dc0 Windows build fixes. 2014-10-19 12:56:39 -07:00
Adam Ierymenko
a8bd8fff93 Make several changes to eliminate potential deadlock or recursive lock conditions, and add back rescan of multicast groups on network startup. 2014-10-14 16:38:27 -07:00
Adam Ierymenko
a94b0e6a43 Get rid of rescanMulticastGroups() in Network thread since this can deadlock... the fact that this can happen is probably bad design. 2014-10-14 15:58:03 -07:00
Adam Ierymenko
7a37326cc0 Fix sleeper bug that probably did nothing in setSupernodes(). 2014-10-14 14:59:17 -07:00
Adam Ierymenko
42d644a57e More fixes to legacy support, and to a potential issue on quit. 2014-10-14 12:37:35 -07:00
Adam Ierymenko
2416491cbc Permanently retire peers.persist, but make iddb.d always enabled instead since identities are what we really want to cache. 2014-10-13 14:12:51 -07:00
Adam Ierymenko
6e23986bb3 Another build fix. 2014-10-13 13:09:02 -07:00
Adam Ierymenko
52314dcdf6 GitHub issue #111 2014-10-13 11:47:14 -07:00
Adam Ierymenko
05309037a8 Yank potentially costly support for TTL out of UdpSocket since we dont use this anymore. 2014-10-13 09:37:17 -07:00
Adam Ierymenko
6316011024 Make crypto and compression build optimized in debug, and also try disabling peers.persist -- might ship this way as it seems more trouble than its worth. 2014-10-12 11:42:49 -07:00
Adam Ierymenko
8b0846d077 Delete bunch of commented out code. 2014-10-11 16:53:21 -07:00
Adam Ierymenko
0d017c043f Stop persisting last announcement time since Multicaster is volatile. Also some more legacy multicast fixes. 2014-10-11 16:26:02 -07:00
Adam Ierymenko
c2aac69a9f Fixes to legacy peer support. 2014-10-11 15:49:31 -07:00
Adam Ierymenko
e071c05f1b Add a sanity limit to legacy multicast repeater function in supernode-mode nodes, and change netconf-master to issue multicast limit (ml) instead of old p5 stuff. 2014-10-10 14:59:07 -07:00
Adam Ierymenko
03dc823ad7 (1) Back off a little on default max multicast limit since 128 is pretty bandwidth heavy, (2) add a little to default multicast rate limit since new MC algo is fairerererer, (3) decided not to involve netconf masters in multicast so take that out of list of who gets LIKEs. 2014-10-10 12:55:06 -07:00
Adam Ierymenko
1774e615a1 <= MTU 2014-10-10 09:09:56 -07:00
Adam Ierymenko
56f8f8aa24 Return self in GATHER requests if self is a member of multicast group, and reinstate legacy support. 2014-10-09 18:32:05 -07:00
Adam Ierymenko
4941c8a1f3 New multicast bug fixes, TRACE improvements, and temporarily disable legacy multicast for debugging purposes. 2014-10-09 17:58:31 -07:00
Adam Ierymenko
d5e0f7e3e4 Reorg multicast packet, and a whole bunch of refactoring around the pushing of certificates of membership. 2014-10-09 12:42:25 -07:00
Adam Ierymenko
620e64c58f Supernode propagation of legacy multicast frames was brokezored. 2014-10-09 09:03:12 -07:00
Adam Ierymenko
3f15752f73 Add IPv4 address assignment to ffffffffffffffff test network. 2014-10-07 14:34:00 -07:00
Adam Ierymenko
87f1b1b1e3 Bug fix in new multicast frame handler, handling of old "P5" multicast frames in new way. 2014-10-06 13:16:16 -07:00
Adam Ierymenko
ab22feba9a Bump version to 1.0.0, add legacy support code to Multicaster to not send new frame to known-to-be-old peers. 2014-10-05 10:34:25 -07:00
Adam Ierymenko
10c196df50 Send a VERB_P5_MULTICAST_FRAME to the supernode for each multicast -- for now. This will allow supernodes to echo these down to pre-1.0.0 peers. 2014-10-04 13:46:29 -07:00
Adam Ierymenko
2c8321be1f Pull logic to always send new multicasts to supernode since we need to do that differently, re-add support for active bridges, and remove some gratuitous use of std::set where not needed. 2014-10-04 13:15:02 -07:00
Adam Ierymenko
62da7e67b6 Add some rate limiting to implicit gathers, and always send multicasts to at least one supernode so they can broadcast to old peers (temporary). 2014-10-03 22:30:10 -07:00
Adam Ierymenko
e7c81ef34e Turns out that needed to be a list after all. Also clean up Multicaster::gather(). 2014-10-03 22:03:19 -07:00
Adam Ierymenko
3f7e7e8a88 Do not multicast to self. 2014-10-03 18:42:41 -07:00
Adam Ierymenko
496109fdcc Announce multicast group changes on network rescanMulticastGroups() 2014-10-03 18:27:42 -07:00
Adam Ierymenko
aad344bb84 Add test network support to Network. 2014-10-03 16:14:34 -07:00
Adam Ierymenko
351db7f1a0 Plumb injectPacketFromHost through to API. 2014-10-03 14:49:11 -07:00
Adam Ierymenko
67aa23530b More work on adding testnet and user-mode capabilities for local network simulation. 2014-10-03 11:59:50 -07:00
Adam Ierymenko
96fa3f7550 Work on in-place testnet support. 2014-10-02 16:33:08 -07:00
Adam Ierymenko
1109046782 Last steps before test: parse OK(MULTICAST_GATHER) and OK(MULTICAST_FRAME) 2014-10-02 13:50:37 -07:00
Adam Ierymenko
49dc47ff38 Make multicast gathering a bit smarter. 2014-10-02 11:35:37 -07:00
Adam Ierymenko
dee86e2448 But since we are now using middle 3 bits we can assign sane values for the cipher suite enum. 2014-10-02 11:13:53 -07:00
Adam Ierymenko
17da733f97 Gotta support old encrypted flag, move cipher spec to middle 3 bits... due to some shortsighted design early-on. In the future this can die once there are no old peers. 2014-10-02 11:08:59 -07:00
Adam Ierymenko
23836d4c11 Change "encrypted" flag to full cipher suite selector. Go ahead and reserve AES256-GCM which might be added in the future. 2014-10-02 10:54:34 -07:00
Adam Ierymenko
e53d208ea4 Improve security posture by eliminating non-const data() accessor from Buffer. 2014-10-02 10:06:29 -07:00
Adam Ierymenko
e8c5495b61 Yes, zero my secret key data. Yes I really, really mean it. 2014-10-02 09:08:31 -07:00
Adam Ierymenko
28646eee0a A bit more IncomingPacket cleanup... almost ready to test, just need OK() handling. 2014-10-01 16:29:52 -07:00
Adam Ierymenko
e1882b614b Some cleanup, Multicaster now sends multicasts as it gets additional members. 2014-10-01 14:05:25 -07:00
Adam Ierymenko
ae082c3cb8 Yay... now everything compiles! Getting close to testing on this. Still have not added backward compatibility support for relaying of multicasts to 0.9.X clients yet but that will be easy. Will test with heterogenous 1.0.0 clients only first. 2014-10-01 12:41:48 -07:00
Adam Ierymenko
ea6124dd2f IncomingPacket builds! 2014-09-30 17:33:20 -07:00
Adam Ierymenko
b41437780b Add origin to new MULTICAST_FRAME, move security check for certs into Network to remove redundant code and bug-proneness, more work on IncomingPacket... 2014-09-30 17:26:34 -07:00
Adam Ierymenko
2659427864 Multicaster needs to be global, not per-network, and a bunch of other stuff. 2014-09-30 16:28:25 -07:00
Adam Ierymenko
8607aa7c3c Everything in for new multicast except IncomingPacket parsing... 2014-09-30 08:38:03 -07:00
Adam Ierymenko
ed0ba49502 A few more revisions to new multicast verbs. 2014-09-26 14:18:25 -07:00
Adam Ierymenko
2d41055bdc Some Network code cleanup. 2014-09-26 12:23:43 -07:00
Adam Ierymenko
027060dad1 Most of new multicast code builds... now on to packet parsing. 2014-09-25 22:13:31 -07:00
Adam Ierymenko
0778332747 . 2014-09-25 22:08:52 -07:00
Adam Ierymenko
9e186bbd89 . 2014-09-25 15:57:43 -07:00
Adam Ierymenko
050a0ce85d . 2014-09-25 15:08:29 -07:00
Adam Ierymenko
6c87f9f765 Rename MulticastTopology to Multicaster -- same name as old multicast controller but different code. More descriptive though. 2014-09-24 14:02:16 -07:00
Adam Ierymenko
81b12b6826 Rename the ubiquitous _r pointer to RuntimeEnvironment to RR just to be a little more consistent about using _ to denote private member variables. 2014-09-24 13:53:03 -07:00
Adam Ierymenko
431476e2e4 Some more multicast algo work... 2014-09-24 13:45:58 -07:00
Adam Ierymenko
557801a09e Rename PacketDecoder to much more descriptive IncomingPacket 2014-09-24 09:04:09 -07:00
Adam Ierymenko
9180a30986 . 2014-09-24 09:01:58 -07:00
Adam Ierymenko
61d0f27d2a Make MulticastTopology have its own mutex. 2014-09-23 10:26:30 -07:00
Adam Ierymenko
c49e253e21 . 2014-09-22 15:03:16 -07:00
Adam Ierymenko
954f9cbc13 Yet more WIP on mulitcast algo... 2014-09-22 13:18:24 -07:00
Adam Ierymenko
d9abd4d9be Work on defining new direct broadcast multicast algorithm. 2014-09-18 18:28:14 -07:00
Adam Ierymenko
4708231046 Fix for GitHub issue #122 and other fixes 2014-09-18 10:01:30 -07:00
Adam Ierymenko
6b76cac6cf Back off from thrashing shutdownIfUnreadableCheck, fix bug in control service. 2014-09-17 14:19:58 -07:00
Adam Ierymenko
2762db8408 More work on control bus refactor... 2014-09-17 12:54:39 -07:00
Adam Ierymenko
73dd9d3b74 Make sure open() has third argument 2014-09-16 08:58:49 -07:00
Adam Ierymenko
8d2e20ede6 Get rid of __align stuff in Salsa20 -- not portable, does not seem to help much on newer chips. 2014-09-16 08:53:18 -07:00
Adam Ierymenko
5c1c70a604 cleanup 2014-09-16 08:19:39 -07:00
Adam Ierymenko
fb22ef053b Move rest of NodeControl stuff out of node/ and into control/ 2014-09-15 16:32:55 -07:00
Adam Ierymenko
13aba7640b refactoring for SDK 2014-09-15 09:43:57 -07:00
Adam Ierymenko
1d37204a37 Refactoring in progress... pardon our dust... 2014-09-12 16:57:37 -07:00
Adam Ierymenko
6b4346d1ac work in progress on API refactor 2014-09-10 17:16:40 -07:00
Adam Ierymenko
4e9280fc7a Rip out dead "firewall opener" code, replace in pipeline with anti-symmetric-NAT tactics. 2014-09-05 16:23:24 -07:00
Adam Ierymenko
d02ecfb288 IP assignment and change cleanup -- leave IPs that were never configured via ZT static assignment alone. 2014-09-05 15:35:09 -07:00
Adam Ierymenko
3afc629ac5 Bit of network config parser cleanup. 2014-09-05 14:56:11 -07:00
Adam Ierymenko
7d4b6767eb Old-school GCC build fix -- make sure __GCC__ is defined 2014-09-05 17:48:59 +00:00
Adam Ierymenko
93f9b4392d Enable configuration of multicast algorithm parameters in netconf 2014-09-04 14:25:07 -07:00
Adam Ierymenko
6df9546742 Fix for missing broadcast address on Linux Ethernet taps. 2014-09-04 13:36:25 -04:00
Adam Ierymenko
dcea212e40 Add noupdate flag in root topologies, add ability for mktopology to read from a template. 2014-09-03 11:56:36 -07:00
Adam Ierymenko
00b16f6aa6 Fix for GitHub issue #110 -- failure to bind IPv6 now non-fatal 2014-08-27 20:09:56 -04:00
Adam Ierymenko
eadff71d37 Another fix to Network life cycle. 2014-08-21 18:07:27 -07:00
Adam Ierymenko
de4e29288d Fix for crazy Windows threading bug... repeatedly adding and removing a network now doesn't leave networks in limbo. 2014-08-21 17:49:05 -07:00
Adam Ierymenko
721625d512 Add MAC to listnetworks, and some other make stuff. 2014-08-19 14:11:02 -07:00
Adam Ierymenko
282114e96c Makefile changes, and make Topology::getBestSupernode() return the "next" supernode if I am a supernode. Also some comment cleanup. 2014-08-19 10:09:21 -07:00
Adam Ierymenko
95d123cfc2 Do HttpClient refactoring for Windows. 2014-08-18 14:34:04 -07:00
Adam Ierymenko
f5cbb45ab9 Increase sleep/wake detection threshold... might want to switch to using native interfaces to really detect this in the future since this is not 100% reliable. 2014-08-18 10:13:25 -04:00
Adam Ierymenko
715afc0314 Default to built-in root topology if signature check fails (instead of exiting) 2014-08-16 14:01:25 -07:00
Adam Ierymenko
f281886bfd Small thread safety fix in HttpClient. 2014-08-16 13:32:33 -07:00
Adam Ierymenko
4f0fcc582e Refactor HttpClient a bit. 2014-08-16 09:08:52 -07:00
Adam Ierymenko
aa59cfd545 Web request part of supernode resync (not quite done, needs test) 2014-08-15 23:37:35 -04:00
Adam Ierymenko
c2187c8759 (1) distribute default root-topology in new dictionary format, (2) bump peer serialization version to force obsolescence of old supernodes, (3) stop outputting a log message every time we poll for software updates 2014-08-14 19:52:22 -04:00
Adam Ierymenko
be6b61b1bc Accept supernode dictionaries in Topology, also fix (unused) field name in one of these. 2014-08-14 18:06:18 -04:00
Adam Ierymenko
f8d4611d15 (1) Tweak LAN locator beacon frequencies, (2) Windows virtual networks
now show up as *real* networks and prompt the user to set their
location and firewall status (public, private, home/work, etc.).

The hack used to achieve #2 should not be examined by children or those
suffering from epilepsy or heart conditions.
2014-08-12 17:20:34 -07:00
Adam Ierymenko
fe3ad5e2cc Fix a Windows bug in refactored tap code, and always make sure we have a firewall exception rule on startup. 2014-08-08 14:57:13 -07:00
Adam Ierymenko
502ea66f15 Kill ugly old getSecureRandom() and replace with simple wrapper for Windows CAPI and *nix /dev/urandom, and some build fixes. 2014-08-08 11:53:55 -07:00
Adam Ierymenko
673aab5ba2 Fix an oversight in signed dictionaries: the timestamp and signing identity should themselves be part of the signature. Also include the raw dictionary in addition to the bin2c version in root-topology/ 2014-08-08 12:46:00 -04:00
Adam Ierymenko
77457cbff1 Windows compile fixes, compiler warning fix, unfreed memory fix in main.c (though it would not have mattered since program exits immediately after). 2014-08-07 19:08:41 -07:00
Adam Ierymenko
adfb71fa6b Compile for for TRACE, remove old TESTNET cruft. 2014-08-07 08:49:43 -07:00
Adam Ierymenko
b3491f9de1 ifdef out Unix-only output redirect function on Windows 2014-08-07 06:36:46 -07:00
Adam Ierymenko
80fc584923 Fix for GitHub issue #97 2014-08-07 06:35:54 -07:00
Adam Ierymenko
92d9ad4a7f Some tap interface changes and integration into main.cpp for *nix systems. 2014-08-06 16:24:30 -07:00
Adam Ierymenko
8a804b5257 (1) Disable firewall openers (its easy to re-enable), (2) Do some prep work for making supernode topology hot-updatable. 2014-08-05 14:05:50 -07:00
Adam Ierymenko
e3c5ada3a7 Add signatures to Dictionary, and fix unhex() API in Utils to be a little safer. 2014-08-05 09:56:49 -07:00
Adam Ierymenko
98d426e1d5 Path fixes in osnet/ stuff 2014-07-31 14:31:32 -07:00
Adam Ierymenko
b80c229d87 Tons of code cleanup, refactor Network to use EthernetTapFactory, probably also fix GitHub issue #90 2014-07-31 14:09:32 -07:00
Adam Ierymenko
9b93141dd0 Upgrade LZ4 to latest version. 2014-07-30 15:34:15 -07:00
Adam Ierymenko
f2d372545a Salsa20 SSE Windows build fix -- turns out you can't be as loose with SSE intrinsics in Visual Studio 2014-07-26 20:07:38 -07:00
Adam Ierymenko
538e8a86c8 Move node/osdep/ to sys/ 2014-07-26 13:10:41 -07:00
Adam Ierymenko
27aa6ea44e Linux routing table support work. 2014-07-25 16:16:05 -04:00
Adam Ierymenko
7475c4047e A bunch more osdep/ work... 2014-07-23 09:14:53 -07:00
Adam Ierymenko
5e58a7d54a Split UnixEthernetTap by platform to get rid of ifdef spaghetti. 2014-07-21 09:18:33 -07:00
Adam Ierymenko
6a174483d8 Ethernet tap factory interface. 2014-07-18 17:26:08 -07:00
Adam Ierymenko
a76d9d4408 Move OS-dependent implementations of generic interfaces to osdep/ in preparation for TapFactory refactor. 2014-07-17 17:19:18 -07:00
Adam Ierymenko
1189f4a568 Set/delete functionality in BSD routing table. 2014-07-17 17:17:59 -07:00
Adam Ierymenko
51766e6549 BSD routing table works... that hurt much worse than it should have. 2014-07-17 13:08:37 -07:00
Adam Ierymenko
d315156733 BSD routing table implementation work. 2014-07-16 15:13:53 -07:00
Adam Ierymenko
4c4675e3ac Cleanup, add __BSD__ 2014-07-15 20:49:13 -07:00
Adam Ierymenko
12692c551e SSE optimized Salsa20 -- anywhere from 20% to 50% faster than plain C version 2014-07-15 17:56:09 -07:00
Adam Ierymenko
00f9305ad8 Routing table base class. 2014-07-15 13:48:42 -07:00
Adam Ierymenko
0097949ba9 . 2014-07-15 12:32:06 -07:00
Adam Ierymenko
1b33a9e807 . 2014-07-15 12:21:24 -07:00
Adam Ierymenko
4a0b33561c Starting to define system network stack interface. 2014-07-13 12:57:30 -07:00
Adam Ierymenko
f82c7006ea Leave IP addresses alone instead of deleting them from tap if they are not members of any of the networks under management. 2014-07-02 15:59:08 -07:00
Adam Ierymenko
681af253ef Fix for GitHub issue #88 - actually do in the code what the web UI expects it to do. 2014-07-01 09:27:33 -07:00
Adam Ierymenko
88bdb81791 Keep track of basic aliveness for peers regardless if direct or indirect connectivity and use this for multicast propagation. Also consolidate adding of active bridges via the same functor as regular multicast next hops. 2014-06-30 11:31:04 -07:00
Adam Ierymenko
458f6ae7c3 Only add active bridges to top of MC propagation list if they are alive. Otherwise a dead active bridge might kill multicast for us. 2014-06-26 18:13:48 -07:00
Adam Ierymenko
38433e85bf More little stuff in crypto code. 2014-06-26 17:23:10 -07:00
Adam Ierymenko
c3cbc92757 Some crypto comment fixes. 2014-06-26 17:15:20 -07:00
Adam Ierymenko
45a1e048bb Add enabled/disabled status to network. 2014-06-26 17:05:07 -07:00
Adam Ierymenko
40bd460b1c Some comment revisions and additional sanity checks. 2014-06-23 08:19:41 -07:00
Adam Ierymenko
ae7143d693 Comments and cleanup. 2014-06-21 12:19:10 -07:00
Adam Ierymenko
aead1050fb Bridging (GitHub issue #68) does indeed work! Just needed to fix a packet size thinko. 2014-06-21 12:29:33 -04:00
Adam Ierymenko
6e485833ef . 2014-06-21 12:25:10 -04:00
Adam Ierymenko
be0a8ec1f1 . 2014-06-21 12:16:25 -04:00
Adam Ierymenko
11e1f7a3fb . 2014-06-21 12:01:26 -04:00
Adam Ierymenko
0b0d5fabac Bridging #68 should work now! 2014-06-21 11:59:08 -04:00
Adam Ierymenko
35aa0921ee . 2014-06-21 11:47:26 -04:00
Adam Ierymenko
2f8936181c Debug code -- temporary. 2014-06-21 08:36:23 -07:00
Adam Ierymenko
c3cea55493 Some cleanup in PacketDecoder. 2014-06-18 09:00:53 -07:00
Adam Ierymenko
5d467f0f45 Some TRACE improvements and comment revs. 2014-06-18 08:25:30 -07:00