5
0
mirror of https://github.com/cwinfo/yggdrasil-go.git synced 2024-11-26 13:01:39 +00:00
Commit Graph

1061 Commits

Author SHA1 Message Date
Arceliar
f474869ad9 cleanup bad comment 2019-10-05 12:17:40 -05:00
Arceliar
fb3430207c don't fail if there's an error setting bbr, just log it and continue 2019-10-05 11:03:38 -05:00
Arceliar
8e22d7137a use bbr congestion control on linux, note that we're not doing anything intelligent with the errors right now if setting it fails 2019-10-05 10:47:15 -05:00
Arceliar
f22eac497b typo 2019-10-03 18:50:33 -05:00
Arceliar
b2922189b8 fix deadlock from use of phony.Block by actors when ckr is enabled 2019-10-03 18:44:47 -05:00
Aleksander Mistewicz
783959208c Add more comments to explain helper functions 2019-09-28 14:41:53 +02:00
Aleksander Mistewicz
8053766092 Add verbosity setting 2019-09-28 14:25:42 +02:00
Aleksander Mistewicz
21b236771b Add a simple transfer benchmark 2019-09-28 14:25:42 +02:00
Aleksander Mistewicz
8677a042cf Wait for nodes to negotiate 2019-09-28 14:25:42 +02:00
Aleksander Mistewicz
fffbbbcbd3 Pass message between nodes 2019-09-28 14:25:42 +02:00
Aleksander Mistewicz
d96fb27ab8 Add simple connection test 2019-09-28 14:25:42 +02:00
Arceliar
0f99d590a1 typo, ipv6->ipv4 2019-09-26 18:15:26 -05:00
Arceliar
e16d3efb0a check packet length before checking if it's an ipv6 packet, and add some trace level logging whenever a packet is rejected for being too short to parse 2019-09-26 18:11:58 -05:00
Arceliar
a87581b0fa
Merge pull request #556 from Arceliar/switch
Switch hack
2019-09-25 17:58:01 -05:00
Arceliar
ac58c3586e cleanup/comments 2019-09-25 17:53:25 -05:00
Neil Alexander
d27891aaf6
Merge pull request #528 from yggdrasil-network/documentation
Documentation updates
2019-09-25 17:09:09 +01:00
Arceliar
b9e74f34ec replace the send-to-self with a timer and an arbitrary timeout; i don't really like this but it seems to work better (1 ms is fast by human standards but an eternity for a syscall or the scheduler, so i think that's reasonable) 2019-09-24 18:28:13 -05:00
Arceliar
8c64e6fa09 explicitly notify the switch when a link appears to be blocked in a send instead of assuming this is the case for all idle links. how we decide when it's really blocked still needs testing/optimizing 2019-09-24 18:01:35 -05:00
Arceliar
691192ff5a weird scheduler hack, seems to tend to make things more stable without actually locking streams to any particular link 2019-09-21 14:33:45 -05:00
Arceliar
87658f83e9 Revert "force things to buffer in the switch if the best link is currently busy. note that other links can end up sending if they become non-idle for other reasons. this is a temporary workaround to packet reordering, until we can figure out a better solution"
This reverts commit 80ba24d512.
2019-09-20 23:09:12 -05:00
Arceliar
8003ea0f3e use a separate multicast beacon interval per multicast interface 2019-09-20 17:42:42 -05:00
Neil Alexander
1cd4b6e8dd
Increase multicast interval at startup from 1s to 15s 2019-09-20 10:08:41 +01:00
Arceliar
f9163a56b6 fix race between listener accepting and shutting down 2019-09-19 19:50:45 -05:00
Arceliar
eeb34ce4e4 modify TcpListener 2019-09-19 19:45:17 -05:00
Arceliar
93e81867fd have link.stop signal active links to close, have tcp.stop wait for all listeners and active connections to close 2019-09-19 19:15:59 -05:00
Neil Alexander
681e9afc79
Merge develop into bugfixes 2019-09-19 09:05:56 +01:00
Neil Alexander
7b1678a11d
Goroutines in _addPeerLoop from bugfixes 2019-09-19 09:04:25 +01:00
Neil Alexander
5a382e7e0b
Cherrypick fixes for _addPeerLoop memory leak for now 2019-09-19 08:55:55 +01:00
Arceliar
995d67cca8 fix leak in _addPeerLoop 2019-09-18 18:46:03 -05:00
Arceliar
92d9274f3f resolve conflicts 2019-09-18 18:40:01 -05:00
Arceliar
2d64a6380a misc other fixes 2019-09-18 18:33:51 -05:00
Neil Alexander
909e4e29a8
Don't spawn goroutines for addPeerLoop, TCP connect timeout of 5 seconds for now 2019-09-18 23:44:28 +01:00
Neil Alexander
64570a8d3e
Merge pull request #542 from Arceliar/switch
Switch
2019-09-18 20:26:48 +01:00
Neil Alexander
0a12e4b1c1
Revert "Catch a nil pointer when sending a session packet to a conn, this shouldn't happen but it's caused multiple crashes in conn.recvMsg"
This reverts commit be35675d0f.
2019-09-18 20:26:06 +01:00
Neil Alexander
ddaaa865cb
Be more verbose when a peer or listener is badly formatted 2019-09-18 19:58:41 +01:00
Neil Alexander
94cf2854a9
Fix panic where slice goes out of bounds because iface.Read returns less than zero (which might happen when the TUN/TAP interface is closed) 2019-09-18 19:48:53 +01:00
Neil Alexander
ae0b2672ff
Fix #539 2019-09-18 19:48:16 +01:00
Neil Alexander
2dc136f94a
Multicast actor to prevent races 2019-09-18 16:51:46 +01:00
Neil Alexander
b959f53fee
Shut down listeners when stopping 2019-09-18 16:32:22 +01:00
Neil Alexander
b0df9e2f31
Fix race when adding peers 2019-09-18 16:15:33 +01:00
Neil Alexander
c78a4cb28f
Only stop timers if they are running 2019-09-18 15:34:26 +01:00
Neil Alexander
366fe7e772
Allow multicast to be shut down more sanely 2019-09-18 15:31:43 +01:00
Neil Alexander
00a972b74e
Disconnect peers when stopping, stop modules before core 2019-09-18 15:22:17 +01:00
Neil Alexander
846df4789a
Be more verbose when a peer or listener is badly formatted 2019-09-18 15:01:19 +01:00
Neil Alexander
200b3623b2
Fix #539 2019-09-18 14:32:28 +01:00
Neil Alexander
e9bacda0b3
Catch a nil pointer when sending a session packet to a conn, this shouldn't happen but it's caused multiple crashes in conn.recvMsg 2019-09-18 14:07:26 +01:00
Neil Alexander
c3016e680c
Fix panic where slice goes out of bounds because iface.Read returns less than zero (which might happen when the TUN/TAP interface is closed) 2019-09-18 14:05:18 +01:00
Neil Alexander
40204caab6
Try to fix race condition in sessions.reset 2019-09-18 14:03:31 +01:00
Neil Alexander
be35675d0f
Catch a nil pointer when sending a session packet to a conn, this shouldn't happen but it's caused multiple crashes in conn.recvMsg 2019-09-18 13:37:01 +01:00
Arceliar
80ba24d512 force things to buffer in the switch if the best link is currently busy. note that other links can end up sending if they become non-idle for other reasons. this is a temporary workaround to packet reordering, until we can figure out a better solution 2019-09-17 19:42:07 -05:00
Arceliar
0141180279 cleanup 2019-09-09 19:25:10 -05:00
Arceliar
10a828af2c when forwarding traffic, break distance ties by favoring the link that sent the most recent switch update the fastest 2019-09-09 19:20:46 -05:00
Arceliar
2426a87ccc really finish initializing the session before returning it / giving up control of the router, in the Conn.search function used by Dial 2019-09-03 19:03:12 -05:00
Neil Alexander
af3dcb44d8
Update config.go godoc 2019-09-02 09:45:11 +01:00
Arceliar
b3361d4bbc package level documentation for address/crypto/util 2019-09-01 19:01:33 -05:00
Arceliar
cd99d04bd4 document address, crypto, and util 2019-09-01 18:53:45 -05:00
Neil Alexander
903a8921fc
Update api.go godoc 2019-09-01 23:47:47 +01:00
Neil Alexander
935324efe1
Update conn.go godoc 2019-09-01 23:33:51 +01:00
Neil Alexander
9e8e1c5a41
Documentation updates 2019-09-01 23:10:46 +01:00
Neil Alexander
01517e5dc3
Create doc.go for godoc preamble 2019-09-01 22:43:27 +01:00
Arceliar
8c52ccadf9 make dial fail if a session to the same node already exists, fixes race between simultaneous connections to a node's 200 address and one of its 300 addresses, should also fix races between a search and an accepted listen 2019-09-01 14:07:00 -05:00
Arceliar
8d2c31d39c add some artifical delay to windows netsh commands, since it seems like maybe they don't take effect immediately, and this was leading to races when setting MTU 2019-09-01 13:20:48 -05:00
Arceliar
c53831696b make tun stop check that iface is not nil, in case it wasn't set for some reason (windows bugs) 2019-09-01 13:06:25 -05:00
Arceliar
d08c2eb237 stop exporting ReadNoCopy and WriteNoCopy, since we use the actor functions / callbacks and everything else should use Read and Write instead... 2019-09-01 13:04:10 -05:00
Arceliar
3a493fe894 gc more often on mobile 2019-09-01 11:08:25 -05:00
Arceliar
cabdc27a54 change how nonce is tracked, so we allow packets if we've recently received a highest nonce ever, but don't bother tracking all received nonce values, this means duplicate packets are possible but only for a small window of time (and significantly reduces memory usage per session) 2019-08-31 17:39:05 -05:00
Arceliar
a64f7320d8 update phony, add mobile versions of util bytes functions that don't try to store anything 2019-08-31 16:27:36 -05:00
Arceliar
7649ea0f9f remove sessionInfo.doFunc, have the api just use phony.Block instead 2019-08-29 21:59:28 -05:00
Neil Alexander
1f658cce76
Add Core actor 2019-08-28 19:53:52 +01:00
Neil Alexander
aa0770546e
Move responsibility for configuring max queue size into switch 2019-08-28 19:39:23 +01:00
Neil Alexander
fc9a1c6c31
Simplify reconfiguration 2019-08-28 19:31:04 +01:00
Neil Alexander
764f9c8e11
Remove legacy debug functions 2019-08-28 17:24:41 +01:00
Neil Alexander
881d0a1ada
Fix DEBUG_getDHTSize 2019-08-28 12:46:49 +01:00
Neil Alexander
e553f3e013
Reconfigure functions now ran by actors 2019-08-28 12:46:12 +01:00
Neil Alexander
607c906820
Pointer receivers for phony.Block 2019-08-28 12:26:44 +01:00
Neil Alexander
5d7d84f827
Remove router.doAdmin and switchTable.doAdmin 2019-08-28 12:17:19 +01:00
Arceliar
a8b323acdd have an actor manage the crypto worker pool instead of each session trying to use it directly, this should result in a fairer round-robin behavior in cases where crypto congestion is the bottleneck 2019-08-27 20:01:37 -05:00
Arceliar
3845f81357 update to latest phony, adjust interface use accordingly 2019-08-27 19:43:54 -05:00
Arceliar
4d9c6342a7 more link updates 2019-08-26 18:37:38 -05:00
Arceliar
c97dd4ad28 fix dial bug 2019-08-26 00:38:14 -05:00
Arceliar
ab59129557 have the writer clean things up. note that their still seem to be bugs in the main linkInterface actor's state machine--links sometimes just die, presumably because they're dropped from the switch and never replaced 2019-08-25 23:24:18 -05:00
Arceliar
bd3eaefb72 more link migration 2019-08-25 22:55:17 -05:00
Arceliar
b5b179904b ugly work-in-progress to migrate link to the actor model 2019-08-25 22:19:20 -05:00
Arceliar
dffd70119d remove session shutdown goroutine, just send a message instead 2019-08-25 19:13:47 -05:00
Arceliar
b2a2e251ad more TunAdapter migration 2019-08-25 18:53:11 -05:00
Arceliar
aaf34c6304 start migrating the TunAdapter to the actor model 2019-08-25 18:08:43 -05:00
Arceliar
502f2937a9 a couple race fixes and use timer.AfterFunc instead of sleeping goroutines or ticker in a few places 2019-08-25 17:00:02 -05:00
Arceliar
a3d4d8125b make the main library reconfiguration more actor-friendly 2019-08-25 12:10:59 -05:00
Arceliar
aa30c6cc98 upgrade phony dependency and switch to its new interface 2019-08-25 10:36:09 -05:00
Arceliar
5312b21665 Merge branch 'develop' of https://github.com/yggdrasil-network/yggdrasil-go into actors 2019-08-24 18:30:15 -05:00
Arceliar
f62bc842ae fix memory leak in session nonce map 2019-08-24 18:23:54 -05:00
Arceliar
48bbdac9b3 add a helper actor to the link reader to make it play nicer with backpressure 2019-08-24 16:27:12 -05:00
Arceliar
99be6b037d stop synchronizing message reads for now, not 100% safe but I don't have any better ideas 2019-08-24 16:13:34 -05:00
Arceliar
209d2ffea5 correctly call peer.sendPacketsFrom in the switch 2019-08-24 16:04:05 -05:00
Arceliar
8c7e9ec7c0 fix debug builds 2019-08-24 15:32:19 -05:00
Arceliar
c573170886 remove switch doworker loop, start a dummy loop to respond to (unused) reconfiguration instead 2019-08-24 15:27:56 -05:00
Arceliar
998c76fd8c more switch migration 2019-08-24 15:22:46 -05:00
Arceliar
555b4c18d4 a little switch cleanup 2019-08-24 15:05:18 -05:00
Arceliar
498bc395e2 start migrating switch to the actor model 2019-08-24 14:56:33 -05:00
Arceliar
b337228aa4 minor fixes to peer stuff 2019-08-24 14:24:42 -05:00
Arceliar
0539dee900 warning about possible deadlock in legacy channel send, need to migrate the link code to fix it 2019-08-24 13:25:38 -05:00
Arceliar
034fece33f more peer migration 2019-08-24 13:15:29 -05:00
Arceliar
ecd23ce9fc safer linkloop 2019-08-24 12:59:20 -05:00
Arceliar
88161009e9 more peer migration 2019-08-24 12:55:49 -05:00
Arceliar
775fb535dc start converting the peer struct into an actor 2019-08-24 12:46:24 -05:00
Arceliar
ef15a6bd79 tunConn cleanup 2019-08-24 11:44:21 -05:00
Arceliar
4893a07696 start migrating tunConn to the actor model 2019-08-24 11:38:47 -05:00
Arceliar
b582c444f8 minor cleanup 2019-08-24 01:57:08 -05:00
Arceliar
1e346aaad0 have the conn actor receive messages from the session actor and either pass them to a callback or buffer them in a channel for Read to use if no callback was set 2019-08-24 01:52:21 -05:00
Arceliar
9948e3d659 add Conn.WriteFrom to allow actor-based sending 2019-08-24 00:44:02 -05:00
Arceliar
da9f7151e3 more conn migration 2019-08-24 00:17:37 -05:00
Arceliar
6ecbc439f0 start migrating Conn to be an actor 2019-08-23 23:36:00 -05:00
Arceliar
cac3444d9a fix debug builds 2019-08-23 22:40:13 -05:00
Arceliar
cf9880464b explicitly consider the session finished case, and make a note that we could fix the packet drop situation by making the Conn into an actor too 2019-08-23 22:36:59 -05:00
Arceliar
e3603c0462 clean up unused session code 2019-08-23 22:25:40 -05:00
Arceliar
533da351f9 fix actor EnqueueFrom stack overflow (use nil now to send from self) and replace session send/recv workers with actor functions 2019-08-23 22:23:01 -05:00
Arceliar
436c84ca33 refactor sessions to store a pointer to router instead of core 2019-08-23 20:53:00 -05:00
Arceliar
5bb85cf07b refactor searches to store a pointer to router instead of core 2019-08-23 20:42:38 -05:00
Arceliar
e7024a00e7 have dht store a pointer to router instead of core 2019-08-23 20:35:54 -05:00
Arceliar
ebd806f27a move router member initialization into router.init 2019-08-23 20:29:16 -05:00
Arceliar
9835c63818 refactor things the router owns (dht, sessions, searches) into that struct, to make the ownership more explicit 2019-08-23 20:26:15 -05:00
Arceliar
bbcbbaf3b1 start migrating sessionInfo to be an actor 2019-08-23 20:05:18 -05:00
Arceliar
8e89816099 more router migration: rename functions that should only be called internally by the actor 2019-08-23 18:59:34 -05:00
Arceliar
232e6d3cb3 more router migration 2019-08-23 18:55:41 -05:00
Arceliar
9d7e7288c6 start migrating the router to an actor 2019-08-23 18:47:15 -05:00
Arceliar
12ce8c6a0a
Merge pull request #512 from neilalexander/cryptokey
Cryptokey routing changes
2019-08-20 20:23:00 -05:00
Arceliar
226dd6170d hopefully prevent a deadlock 2019-08-20 18:49:53 -05:00
Arceliar
4156aa3003 move ckr checks into the tunConn code 2019-08-20 18:10:08 -05:00
Neil Alexander
b79829c43b
Merge branch 'develop' into cryptokey 2019-08-20 09:43:17 +01:00
Neil Alexander
b6e67bc0ba
Check CKR remotes when receiving traffic 2019-08-20 09:38:46 +01:00
Neil Alexander
2b6462c8a9
Strict checking of Yggdrasil source/destination addresses 2019-08-20 09:38:27 +01:00
Arceliar
834a6a6f1a don't allocate a new child cancellation in Conn read/write calls if no deadline is set 2019-08-19 18:06:05 -05:00
Neil Alexander
2a629880fd
Rename crypto-key config options, improve control flow 2019-08-19 10:28:30 +01:00
Arceliar
8af1a7086c when a link becomes idle and packet are buffered that the link could send, send at least 65535 bytes worth instead of 1 packet, this reduces syscall overhead when small packets are sent through the network 2019-08-18 12:29:07 -05:00
Arceliar
62337bcd64 allow links to send multiple packets at once, currently we still only bother to send 1 at a time from the switch level 2019-08-18 12:17:54 -05:00
Arceliar
fd5f3ca764 fix heap pop order 2019-08-16 23:07:40 -05:00
Arceliar
03b8af9f1a keep track of recent nonces with a heap and a map instead of a fixed-size bitmask 2019-08-16 18:37:16 -05:00
Neil Alexander
5b054766a2
Update comments in handleIn, add switch_getFlowLabelFromCoords helper (in case it is useful if we try to consider flowlabels in multi-link scenarios) 2019-08-15 10:54:04 +01:00
Arceliar
1a2b7a8b60 test a change to how switch hops are selected when multiple links are idle 2019-08-14 17:57:36 -05:00
Neil Alexander
f26f071901
Merge pull request #497 from Slex/issues/488
Implement feature from https://github.com/yggdrasil-network/yggdrasil
2019-08-14 20:11:15 +01:00
Neil Alexander
33cd10c463
Merge branch 'issues/488' of github.com:slex/yggdrasil-go into issues/488 2019-08-14 19:58:45 +01:00
Neil Alexander
4702da2bcb
Use new netlink library (fixes #493) 2019-08-14 19:32:40 +01:00
Neil Alexander
d9fabad8bc
Merge pull request #502 from Arceliar/linkleak
Try to fix leaks in #501
2019-08-14 07:17:39 +01:00
Arceliar
46c5df1c23 when we abandon a link because we already have a connection to that peer, only wait for the connection to close if it's an *outgoing* link, otherwise incomming connection attempts can cause us to leak links 2019-08-13 18:49:49 -05:00
Arceliar
b2cb1d965c avoid leaking sessions when no listener exists, or blocking if it's busy 2019-08-12 18:22:30 -05:00
Arceliar
277da1fe60 make sure searches don't end if try to continue (in parallel) with nowhere left to send, but we just sent a search and are still waiting for a response 2019-08-11 13:11:14 -05:00
Arceliar
7a28eb787e try to fix a few edge cases with searches that could lead them to ending without the callback being run or without cleaning up the old search info 2019-08-11 13:00:19 -05:00
Slex
589ad638ea Implement feature from https://github.com/yggdrasil-network/yggdrasil-go/issues/488 2019-08-11 00:31:22 +03:00
Arceliar
5e81a0c421 Use a separate buffer per session for incoming packets, so 1 session that floods won't block other sessions 2019-08-07 18:08:31 -05:00
Arceliar
9ab08446ff make sure the sessionInfo.recvWorker doesn't block if sinfo.recv somehow fills 2019-08-07 17:40:50 -05:00