Neil Alexander
63936c11b5
Update tuntap module, return pointers
2020-02-16 23:21:58 +00:00
Neil Alexander
c107f891d2
Implement pubkeys in API functions
2020-02-16 23:12:39 +00:00
Arceliar
657777881b
actually schedule the search cleanup code to run
2020-02-08 20:33:35 -06:00
Arceliar
8e05c6c6a7
better search cleanup, but needs more testing to make sure it really works
2020-02-08 20:26:37 -06:00
Arceliar
d0e6846173
work in progress to make searches use parallel threads per response, so one malicious node doesn't block progress from honest ones
2020-02-08 20:15:48 -06:00
Arceliar
d7d0c2629c
don't deduplicate search responses, but limit the max number of nodes handled per response
2020-02-08 17:04:00 -06:00
Arceliar
cd9613fddc
add some additional debug timing info and logging to dials, and fix an unnecessary delay in search startup
2020-02-07 22:34:54 -06:00
Arceliar
3faa0b2854
deduplicate the list of nodes to visit in a search (keeping newest rumors)
2020-02-06 20:47:53 -06:00
Arceliar
7c2cb9a02d
more search fixes/updates
2020-02-06 20:21:17 -06:00
Arceliar
cd856426e5
search timing changes
2020-02-06 18:37:58 -06:00
Arceliar
70659bfb91
sort search response results before sending requests
2020-02-06 17:38:42 -06:00
Arceliar
7e64f54c1f
log some info about searches and reduce search traffic (especially when things dead-end)
2020-02-01 13:58:08 -06:00
Neil Alexander
c48c4ddc80
Merge pull request #641 from Arceliar/misc
...
Misc tuning
2020-01-10 11:35:51 +00:00
Neil Alexander
2fc6f9a71d
Merge pull request #643 from adamruzicka/mtu
...
Unify MTU datatypes across the codebase
2020-01-07 22:39:38 +00:00
Neil Alexander
ef4d5553b6
Merge pull request #636 from cathugger/develop
...
util: fix possible OOB in IPv4 flowkey calc, use switch there
2020-01-07 22:38:31 +00:00
Arceliar
c3b1a6af65
some nodeinfo actor fixes and adjust search timeout
2020-01-06 18:37:43 -06:00
Neil Alexander
8c12fc4fdb
Merge branch 'develop' into misc
2020-01-05 23:04:51 +00:00
Neil Alexander
9304873047
Convert nodeinfo to actor
2020-01-05 22:15:52 +00:00
Adam Ruzicka
8358fe5c5c
Unify MTU datatypes across the codebase
...
The codebase uses int and unit16 to represent MTU randomly. This change
unifies it to a MTU type from types package, which is currently uint16.
2020-01-05 18:01:22 +00:00
Arceliar
8513f8f4dc
constant space searches that should play nicer if searching for an unreachable destination
2020-01-04 16:08:48 -06:00
Arceliar
201dbec63d
always keep the 2 closest nodes in each direction around the dht ring, possibly helps things recover faster after joins/leaves
2019-12-25 19:01:20 -06:00
Arceliar
9fac5355eb
make searches more parallel
2019-12-25 18:55:29 -06:00
cathugger
ff5de89762
util: fix possible OOB in IPv4 flowkey calc, use switch there
...
ihl may grow upto 15*4=60 so extract and check it before using it as offset in flowkey calculation.
also replace IFs with switches for protocol matching as it's less redundant and nicer to document.
2019-12-11 15:24:43 +02:00
Anatolii Kurotych
4159ccb893
Fix return value in Multicast.Stop()
2019-11-30 16:05:44 +02:00
Arceliar
729d2ca2ba
Update crypto.go
2019-11-29 17:14:27 -06:00
Dimitris Apostolou
73f50af3b7
Fix typos
2019-11-29 11:45:02 +02:00
Arceliar
c2a8b4bb57
get rid of an allocation in tunWriter's _write
2019-11-28 12:00:00 -06:00
Neil Alexander
ad8d30ce74
Revert "Force packets through the switch to be buffered (seems to help the reordering problem on Windows)"
...
This reverts commit 837e7da792
.
2019-11-26 09:44:35 +00:00
Neil Alexander
328dd6c054
Merge branch 'develop' into goodbyewater
2019-11-26 09:20:15 +00:00
Arceliar
98339cdc3f
possible fix if monotonic time resolution is related to packet reordering
2019-11-25 17:40:58 -06:00
Neil Alexander
837e7da792
Force packets through the switch to be buffered (seems to help the reordering problem on Windows)
2019-11-25 20:13:41 +00:00
Arceliar
3e07995518
it helps to actually set the flag...
2019-11-24 18:53:58 -06:00
Arceliar
27cc57dbbc
attempt to prevent incorrect idle notification in switch, needs testing
2019-11-24 18:24:17 -06:00
Arceliar
2e95a3131c
comment out pointless error that prints on some platforms and not others
2019-11-24 15:37:37 -06:00
Arceliar
2982b53555
make offset generic over TUN_OFFSET_BYTES so we can make this platform dependent
2019-11-24 15:09:28 -06:00
Arceliar
f6f9b3ef76
include offset in expected bytes written
2019-11-24 15:01:20 -06:00
Arceliar
6560aac1e9
fix error spam on shutdown
2019-11-24 13:42:56 -06:00
Neil Alexander
746fac6594
Fix go.mod/go.sum again and update DoAsSystem call
2019-11-23 13:56:48 +00:00
Neil Alexander
d0a307db97
Use Wireguard's DoAsSystem, fix build tags and go.mod/go.sum
2019-11-23 13:46:05 +00:00
Neil Alexander
0529910b01
Reuse GUID so Windows no longer keeps creating new networks each time Yggdrasil starts
2019-11-23 13:34:27 +00:00
Neil Alexander
baebaabc43
Fix typo
2019-11-22 20:16:24 +00:00
Neil Alexander
3a0870a448
Fix IfName 'auto' behaviour on Windows
2019-11-22 20:11:39 +00:00
Neil Alexander
f95ebeb821
Remove references to TAP
2019-11-22 20:08:19 +00:00
Neil Alexander
7d00206f4b
Update platform defaults, handling of 'auto' on Linux/Darwin
2019-11-22 20:07:08 +00:00
Neil Alexander
b27ada9191
Fix bad Name() calls
2019-11-22 18:39:27 +00:00
Neil Alexander
235b64345e
Configure addresses and MTUs, fix bugs
2019-11-22 18:34:43 +00:00
Neil Alexander
f5517acc81
Drop Water, use Wireguard tun library, drop TAP support
2019-11-22 16:43:50 +00:00
Arceliar
248a08b2f1
send a message to the sessions to update mtu instead of trying to update it directly
2019-11-21 19:23:44 -06:00
Neil Alexander
7c18c6806d
Further updates, notify sessions about updated MTU from API call
2019-11-21 09:54:36 +00:00
Neil Alexander
d1c445dc41
Thread safety for MTU API functions
2019-11-21 09:28:36 +00:00
Neil Alexander
e90be6f569
Add API functions for manipulating maximum session MTU, fix TUN/TAP to use that
2019-11-21 00:02:39 +00:00
Neil Alexander
d06c40ad19
Use existing constant
2019-11-20 22:40:48 +00:00
Neil Alexander
9fca3640f9
Fix couple of issues with MTU calculations
2019-11-20 22:11:52 +00:00
Arceliar
6b6a5a2906
Merge pull request #608 from neilalexander/mtu
...
Improve MTU handling
2019-11-19 19:37:25 -06:00
Arceliar
c0be481cde
Merge pull request #605 from wfleurant/src-version
...
Src version: return unknown not yggdrasilctl
2019-11-19 19:35:45 -06:00
Neil Alexander
f49d9de421
Fix setting up of MTU when value is outside of acceptable bounds, also account for ethernet headers in calculations, notify about clipping to stdout
2019-11-19 14:20:11 +00:00
Arceliar
5f1aea3636
fix deadlock when AddPeer fails
2019-11-12 21:01:32 -06:00
William Fleurant
49ba5bae17
yggdrasil: buildName should report unknown
2019-11-11 00:24:50 -05:00
Arceliar
6d3aefb825
fix a data race when an existing session's coords are updated in response to a successful search
2019-10-27 19:55:35 -05:00
Neil Alexander
cee28d11f8
Merge pull request #593 from Arceliar/bindtodevice
...
BindToDevice
2019-10-26 11:36:24 +01:00
Arceliar
710815fed5
add dummy functions for other platforms
2019-10-25 19:32:53 -05:00
Arceliar
cfc1e6b83d
fix a crash when shutting down if no multicast interfaces are configured
2019-10-25 18:40:09 -05:00
Arceliar
bcacfb0638
test adding BindToDevice to linux. if it works then we'll want to rethink slightly how we get the tcpContext on every platform, to make this compile everywhere and look a little cleaner
2019-10-25 18:33:23 -05:00
Arceliar
97a85e1d44
Merge pull request #583 from neilalexander/modules
...
Define module.Module interface
2019-10-24 21:48:05 -05:00
Neil Alexander
cd93969930
Fix isOpen for TUN/TAP actor
2019-10-24 23:37:39 +01:00
Neil Alexander
de3bdfa524
No longer use atomic for isOpen in multicast
2019-10-24 23:31:47 +01:00
Neil Alexander
d37133e311
Fix merge conflict from develop
2019-10-24 10:22:02 +01:00
Neil Alexander
5ca81f916e
Fix deadlocks
2019-10-24 09:54:57 +01:00
Neil Alexander
7341fcb9bc
Merge branch 'develop' into fix581
2019-10-24 09:29:29 +01:00
Neil Alexander
d58f88d29a
Update builds to Go 1.13 as this is required for TLS (apparently golang.org/x/crypto/ed25519 is not acceptable to the crypto/tls module and this prevents Yggdrasil from starting)
2019-10-24 09:28:09 +01:00
Neil Alexander
f784f33c2d
Backport fix for #581 from #583
2019-10-24 09:25:31 +01:00
Arceliar
c3dee478f5
fix ed25519 dependency for golang 1.12 and earlier, though we may want to update builds to 1.13 anyway...
2019-10-23 20:38:09 -05:00
Arceliar
996c6b4f47
add one TODO comment and run gofmt
2019-10-23 20:28:11 -05:00
Neil Alexander
cd77727c1e
Set TCP socket options before upgrading connection
2019-10-23 18:24:08 +01:00
Neil Alexander
6a22e6c9de
Initial connection upgrade/TLS peering support
2019-10-23 17:26:35 +01:00
Neil Alexander
337626a32c
Act multicast updates for safety
2019-10-23 11:12:51 +01:00
Neil Alexander
a072e063d8
Define module.Module interface, update admin/tuntap/multicast modules to comply with it, fix #581
2019-10-23 10:44:58 +01:00
Arceliar
ea085663ea
slight cleanup of dial's timeout
2019-10-21 20:52:16 -05:00
Arceliar
681c8ca6f9
safer dial timeout handling, in case it was used with a nil context or a context that had no timeout set
2019-10-21 20:47:50 -05:00
Arceliar
eccd9a348f
give yggdrasil.Dialer the same interface as a net.Dialer, so the only differences are what fields exist in the struct
2019-10-21 19:44:06 -05:00
Arceliar
efc0b9ef9f
Merge branch 'develop' into netconn
2019-10-21 18:47:40 -05:00
Arceliar
a81476f489
fix incorrectly held mutex in ckr getPublicKeyForAddress
2019-10-20 20:00:55 -05:00
Arceliar
cb40874f97
have listener return a net.Conn, adjust yggdrasil.Conn to match this interface
2019-10-19 15:10:28 -05:00
Arceliar
3491292599
code cleanup
2019-10-12 15:46:56 -05:00
Arceliar
31ce854835
update session when a search for an existing session finishes
2019-10-12 15:37:40 -05:00
Arceliar
a1c413f769
fix nil pointer dereference in yggdrasil.Conn.search
2019-10-06 11:53:14 -05:00
Arceliar
c38e40e8e3
actually use doCancel in writeNoCopy
2019-10-05 12:23:21 -05:00
Arceliar
83e3a24423
Merge pull request #562 from AwesomePatrol/dev/patrol/bench01
...
#60 Add simple tests and benchmark
2019-10-05 12:20:27 -05:00
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
Neil Alexander
c99ed9fb60
Merge pull request #491 from Arceliar/flowkey
...
Fix the old flowkey stuff so congestion control actually works...
2019-08-07 10:33:17 +01:00
Arceliar
d795ab1b65
minor allocation fix
2019-08-06 20:51:38 -05:00
Arceliar
790524bd1c
copy/paste old flowkey logic into a util function, add a struct of key and packet, make WriteNoCopy accept this instead of a slice
2019-08-06 19:25:55 -05:00
Arceliar
679866d5ff
have createSession fill the sessionInfo.cancel field, have Conn use Conn.session.cancel instead of storing its own cancellation, this should prevent any of these things from being both nil and reachable at the same time
2019-08-05 19:11:28 -05:00
Arceliar
8a85149817
remove src/.DS_Store
2019-08-05 18:50:08 -05:00
Arceliar
84a4f54217
temporary fix to nil pointer, better to make sure it's never nil
2019-08-05 18:49:15 -05:00
Neil Alexander
bd3b42022b
Merge pull request #480 from Arceliar/speedup
...
Speedup
2019-08-05 10:24:54 +01:00
Neil Alexander
2ee00fcc09
Return box_pub_key as hex string in JSON (replaces #481 )
2019-08-05 10:21:40 +01:00
Neil Alexander
3a2ae9d902
Update API to represent coords as []uint64
2019-08-05 10:17:19 +01:00
Neil Alexander
37533f157d
Make some API changes (currently broken)
2019-08-05 00:30:12 +01:00
Arceliar
979c3d4c07
move some potentially blocking operations out of session pool workers, minor cleanup
2019-08-04 16:29:58 -05:00
Arceliar
c55d7b4705
have the switch queue drop packts to ourself when the total size of all packets is at least queueTotalMaxSize, instead of an arbitrary unconfigurable packet count
2019-08-04 16:16:49 -05:00
Arceliar
6803f209b0
have tuntap code use Conn.ReadNoCopy and Conn.WriteNoCopy to avoid copying between slices
2019-08-04 15:59:51 -05:00
Arceliar
5d5486049b
add Conn.ReadNoCopy and Conn.WriteNoCopy that transfer ownership of a slice instead of copying, have Read and Write use the NoCopy versions under the hood and just manage copying as needed
2019-08-04 15:53:34 -05:00
Arceliar
07f14f92ed
disable crypto and switch buffer changes from testing
2019-08-04 15:25:14 -05:00
Arceliar
0ba8c6a34f
have the stream code use bufio instead of copying manually to an input buffer, slightly reduces total uses of memmove
2019-08-04 15:21:04 -05:00
Arceliar
75b931f37e
eliminate some more copying between slices
2019-08-04 14:50:19 -05:00
Arceliar
f52955ee0f
WARNING: CRYPTO DISABLED while speeding up stream writeMsg
2019-08-04 14:18:59 -05:00
Arceliar
1e6a6d2160
use session.cancel in the router to make blocking safe, reduce size of fromRouter buffer so the drops in the switch are closer to the intended front-drop behavior
2019-08-04 02:21:41 -05:00
Arceliar
7bf5884ac1
remove some lossy channel sends that should be safe to allow to block
2019-08-04 02:14:45 -05:00
Arceliar
6da5802ae5
don't block forever in Write if the session is cancelled, cleanup Conn.Read slightly
2019-08-04 02:08:47 -05:00
Arceliar
144c823bee
just use a sync.Pool as the bytestore to not overcomplicate things, the allocations from interface{} casting don't seem to actually hurt in practice right now
2019-08-04 00:28:13 -05:00
Arceliar
cbbb61b019
fix another drain on the bytestore
2019-08-04 00:00:41 -05:00
Arceliar
00e9c3dbd9
do session crypto work using the worker pool
2019-08-03 23:27:52 -05:00
Arceliar
befd1b43a0
refactor session worker code slightly
2019-08-03 23:14:51 -05:00
Arceliar
7a9ad0c8cc
add workerpool to util
2019-08-03 23:10:37 -05:00
Arceliar
b9987b4fdc
reduce time spent with a mutex held in sessionInfo.recvWorker
2019-08-03 22:47:10 -05:00
Arceliar
099bd3ae1e
reduce part of sendWorker that needs to keep a mutex
2019-08-03 22:35:10 -05:00
Arceliar
72ed541bf3
a little cleanup to Conn functions
2019-08-03 22:07:38 -05:00
Arceliar
5dfc71e1ee
put bytes back when done
2019-08-03 22:00:47 -05:00
Arceliar
df0090e32a
Add per-session read/write workers, work in progress, they still unfortunately need to take a mutex for safety
2019-08-03 21:46:18 -05:00
Neil Alexander
853054eb62
Merge pull request #475 from Arceliar/misc
...
Misc
2019-07-29 20:24:49 +01:00
Arceliar
406e143f7f
move some logic from TunAdapter.reader into a new function, TunAdapter.readerPacketHandler
2019-07-28 23:33:04 -05:00
Neil Alexander
7c4c1558ff
Merge pull request #474 from neilalexander/gomobile
...
Various API changes and simplifications to fix mobile builds
2019-07-28 19:34:06 +01:00
Neil Alexander
cbc8711dd3
Remove mobile module, since it can now be moved into another repository
2019-07-28 13:39:29 +01:00
Neil Alexander
c9554f82be
Formatting tweaks in api.go
2019-07-28 11:35:16 +01:00
Neil Alexander
24f4754f2b
Export NodeInfoPayload type, rename some API functions
2019-07-28 11:30:24 +01:00
Arceliar
38e1503b28
split up some of the tun reader logic into a separate worker, so the main loop can be mostly just syscalls
2019-07-27 20:09:43 -05:00
Arceliar
b66bea813b
rename a couple of things and move a PutBytes so it happens sooner
2019-07-27 18:23:55 -05:00
Arceliar
9e118884d4
remove some commented code
2019-07-27 18:12:06 -05:00
Arceliar
e0a3055c2f
get rid of session workers, new util.PutBytes/GetBytes logic
2019-07-27 18:10:32 -05:00
Neil Alexander
377f88512b
Remove commented out router function
2019-07-27 15:57:19 +01:00
Neil Alexander
de1005e4fa
Various API changes and simplifications to fix mobile builds
2019-07-27 15:00:09 +01:00
Neil Alexander
195d577151
Add IFF_NODAD/IFF_SECURED, define consts
2019-07-27 13:30:47 +01:00
Arceliar
e5bb9bcb8d
change how searches are initialized so we actually send a dhtReq to ourself and get a response, in case we're the destination
2019-07-26 17:44:40 -05:00
Neil Alexander
6263fa287c
Merge pull request #467 from neilalexander/debugtext
...
Send PPROF output text to stderr
2019-07-23 08:15:03 +01:00
Neil Alexander
f208b7f542
Merge pull request #469 from neilalexander/fix468
...
Don't send IP back twice with getPeers
2019-07-23 08:14:49 +01:00
Neil Alexander
de9d0a6cf1
Redirect Conn session closure errors to debug channel
2019-07-22 22:41:55 +01:00
Neil Alexander
8669091a08
Don't send IP back twice with getPeers
2019-07-22 19:45:48 +01:00
Neil Alexander
34ac5c9197
Send PPROF output text to stderr instead of stdout so that it doesn't break -genconf
2019-07-20 21:56:53 +01:00
Neil Alexander
48ad3c5d7f
Update water go.mod references, fix some bugs in TAP mode (which should hopefully fix Windows support too)
2019-07-20 16:13:54 +01:00
Neil Alexander
36201895e7
Don't mangle bs slice in TAP mode
2019-07-20 12:10:05 +01:00
Neil Alexander
2582df752d
Fix resetting Windows adapter (reverting previous change)
2019-07-20 11:43:30 +01:00
Neil Alexander
1a5c2a4942
Update Windows module a bit - capture TAP setup errors earlier, refer to newer version of water which should fix #456
2019-07-19 22:21:30 +01:00
Arceliar
cf3ebe04a7
have Conn use Cancellation instead of manually setting up timers
2019-07-17 21:37:45 -05:00
Arceliar
6bf182e341
add util.CancellationChild() and run gofmt
2019-07-17 21:15:02 -05:00
Arceliar
06e8403aaf
add cancellation code to util, like context but just the cancellation parts + some error logic
2019-07-17 21:09:22 -05:00
Arceliar
5301207480
fix possible unsafe memory use in Conn.Read
2019-07-17 18:25:38 -05:00
Neil Alexander
06330f503f
Recover if stillAlive fails
2019-07-18 00:02:16 +01:00
Neil Alexander
311c612f2e
Only flag stillAlive on successful write
2019-07-17 23:23:19 +01:00
Neil Alexander
307b24d8cb
Fix Conn.Read/Conn.Write behavior after Conn.Close, get rid of second TUN/TAP conn reader goroutine, no longer use deadlines
2019-07-17 21:42:17 +01:00
Neil Alexander
1bf1c6eb36
Revert "Remove stillAlive code from TUN/TAP conn as it is no longer required with the new deadlines"
...
This reverts commit eec70bf2f2
.
2019-07-17 19:43:29 +01:00
Neil Alexander
eec70bf2f2
Remove stillAlive code from TUN/TAP conn as it is no longer required with the new deadlines
2019-07-17 13:53:16 +01:00
Neil Alexander
7d1c03d2ac
Only call stillAlive if channel read succeeds
2019-07-17 12:07:16 +01:00
Neil Alexander
747b50bb7c
Try to improve handling of timeouts
2019-07-17 11:13:53 +01:00
Neil Alexander
d34600b5f9
Try to fix TUN/TAP conn reader leakage
2019-07-17 10:12:10 +01:00
Neil Alexander
145a43e5f0
Fix #413 by always generating public keys from private ones instead of trusting public keys supplied by config
2019-07-16 09:49:28 +01:00
Neil Alexander
ea9d5db16d
Make admin socket output a bit friendlier ( fixes #385 )
2019-07-07 19:41:53 +01:00
Neil Alexander
30c03369cd
Try to fix CKR setup deadlock, fix some Windows output formatting
2019-07-06 20:08:32 +01:00
Neil Alexander
a10c141896
Fix data race on peermacs
2019-07-06 15:15:43 +01:00
Neil Alexander
e8272926a4
Fix TAP mode
2019-07-06 15:08:17 +01:00
Neil Alexander
618d46a7b3
Don't block on adding peers in case one is unreachable and we are forced to wait for timeout
2019-07-06 12:12:30 +01:00
Neil Alexander
12486b0557
Try to more gracefully handle shutdowns on Windows
2019-07-06 11:52:30 +01:00
Arceliar
86c30a1fc4
fix another panic from a send on a closed session worker channel, from races between Conn.Read/Write/Close
2019-07-01 18:55:07 -05:00
Arceliar
cd29fde178
temporary workaround to concurrency bug in sessions.getSharedKey
2019-06-29 19:32:15 -05:00
Arceliar
fbe44ea973
fix bug in session api code
2019-06-29 19:25:34 -05:00
Arceliar
40553a6a44
make GetSessions use the session workers to avoid races
2019-06-29 18:56:26 -05:00
Arceliar
d39428735d
recover if we try to send to a closed session worker due to a race between a Conn.Write call and a Conn.Close call
2019-06-29 18:50:21 -05:00
Arceliar
28db566b37
fix concurrency bug in iface.go
2019-06-29 18:44:24 -05:00
Arceliar
7d58a7ef3e
fix channel multiple close bug and concurrency bug in the way sessionInfo.close was being called
2019-06-29 17:44:28 -05:00
Arceliar
818eca90db
fix nil pointer deref if searches fail, block dial until a search exceeds or a timeout passes (todo: replace timer with context)
2019-06-29 16:10:02 -05:00
Arceliar
8ecf99d8a9
Merge pull request #443 from Arceliar/dial
...
Bugfix in dial code
2019-06-29 12:21:19 -05:00
Arceliar
784acba823
I think this fixes the concurrent map read/write panic
2019-06-29 12:14:44 -05:00
Neil Alexander
0d23342358
Merge pull request #441 from Arceliar/dial
...
Dial
2019-06-29 10:52:05 +01:00
Arceliar
e88bef35c0
get rid of old buffered session packets
2019-06-28 20:02:58 -05:00
Arceliar
e7cb76cea3
clean up unused old session maps
2019-06-28 19:21:44 -05:00
Arceliar
c808be514f
make tunAdapter.wrap return the right thing
2019-06-28 19:11:28 -05:00
Arceliar
5df110ac79
make Dial block until the search finishes, and use it as such
2019-06-28 18:42:31 -05:00
Neil Alexander
ac8ff740ee
Merge pull request #438 from neilalexander/multicast
...
Try and solidify multicast interface behavior
2019-06-29 00:38:38 +01:00
Neil Alexander
27b3b9b49b
Return new copy of interfaces on each Interfaces() call
2019-06-29 00:12:56 +01:00
Neil Alexander
93a323c62c
Add support for logging to file or syslog instead of stdout
2019-06-28 23:45:04 +01:00
Arceliar
29a0f8b572
some minor refactoring to dht callbacks and searches, work in progress
2019-06-25 19:31:29 -05:00
Neil Alexander
54f1804101
Try and solidify multicast interface behavior
2019-06-20 15:11:55 +01:00
Neil Alexander
2fd3ac6837
Merge pull request #432 from neilalexander/gatekeeper
...
Implement session gatekeeper functions
2019-06-13 23:41:42 +01:00
Neil Alexander
f545060e89
Add notes on isSessionAllowed checks
2019-06-13 23:37:53 +01:00
Neil Alexander
9a7d350884
Fix expressions
2019-06-11 23:48:00 +01:00
Neil Alexander
e229ad6e2b
Update comments
2019-06-11 12:52:13 +01:00
Neil Alexander
720a078a35
Add SetSessionGatekeeper
...
This allows you to define a function which determines whether a session connection (either incoming or outgoing) is allowed based on the public key.
2019-06-11 10:52:21 +01:00
Neil Alexander
17175b49f2
Add multicast interfaces to platform-specific defaults (this makes it easier to avoid bringing AWDL up by default on macOS as an example, or over L2 VPNs when not expected)
2019-06-11 10:18:59 +01:00
Arceliar
4b56849b08
fix issue with sessions dying and never being fixed
2019-06-10 22:09:12 -05:00
Arceliar
1addf08ccd
don't have Conn.Read return an error for temorary crypto failures from e.g. out of order packets, just drop the packet and keep blocking until there's usable traffic
2019-05-31 17:51:01 -05:00
Neil Alexander
f0422dbd8b
Fix panic when determining if CKR is enabled
2019-05-30 17:33:59 +01:00
Neil Alexander
9e086e70f0
Don't indefinitely block TUN/TAP reader goroutine when a conn error happens
2019-05-30 12:44:47 +01:00
Neil Alexander
0096d1ae3e
Re-add ICMPv6 packet too big handling
2019-05-29 20:16:17 +01:00
Neil Alexander
3b6c726a3c
Fix bug where MTU was ignored by sessions, resulting in default 1280
2019-05-29 19:11:12 +01:00
Neil Alexander
78eb40cbad
Record session uptime (purely for the admin socket)
2019-05-29 12:59:36 +01:00
Arceliar
b2513fce56
have the tunConn close things after a 2 minute timeout
2019-05-28 18:35:52 -05:00
Arceliar
5ea864869a
don't spam searches for unused connections. todo: timeout old connections somehow
2019-05-23 20:27:52 -05:00
Neil Alexander
70774fc3de
Reimplement get/setTunnelRouting, add/removeSourceSubnet, add/removeRoute, getRoutes, getSourceSubnets, make CKR threadsafe
2019-05-20 21:45:33 +01:00
Neil Alexander
5b8d8a9341
Reimplement getNodeInfo, dhtPing, get/add/removeAllowedEncryptionPublicKey, add/removePeer
2019-05-20 19:51:44 +01:00
Neil Alexander
e9e2d7bc6f
Remove debug println
2019-05-19 22:03:20 +01:00
Neil Alexander
d575b83ec1
Refactor admin socket somewhat, allow modules to set up their own handlers
2019-05-19 22:02:04 +01:00