Commit Graph

54 Commits

Author SHA1 Message Date
emanuele-f
41bff29df6 Disable multicast peers discovery in windows 2019-06-22 16:50:11 +02:00
Teteros
ba38ab70de
Fix typo: 'enstablished' -> 'established' 2019-06-13 14:11:57 +01:00
emanuele-f
447c3ad8c3 Replace peers linked list with hash 2019-06-10 00:33:11 +02:00
emanuele-f
4eacea7d57 Little improvement 2019-06-10 00:32:38 +02:00
emanuele-f
f36814b152 Implement query peer to try p2p during send
When a lot of monodirection traffic is sent, p2p can be hard to
enstablish because a reply is needed in order to start the registration.
Now a sending peer can query the peer information via the supernode.

This is based on the following commits:
- 1236f37a70
- ad2d416510
- 5348671299
- b2806dcde8
2019-06-08 22:04:10 +02:00
emanuele-f
b36754eae0 Set last_p2p ib peer_set_p2p_confirmed 2019-06-08 21:41:28 +02:00
emanuele-f
3db1cab276 Split broadcast stats from other supernode stats 2019-06-08 18:49:47 +02:00
emanuele-f
0e6db6361e Fix connection stall when idle p2p refresh occurs
The edge received packets from the supernode and thought that the other
peer was still active, but the other peer had dropped the p2p connection
due to refresh
2019-06-08 17:50:48 +02:00
emanuele-f
f038f22a0b Fix too many registrations going on 2019-06-08 16:10:00 +02:00
emanuele-f
623a9e480c Improve log messages 2019-06-08 15:32:47 +02:00
fengdaolong
69e3b49bec eliminate compilation warnings 2019-06-04 00:09:15 +08:00
yunbox
f48c170c26 Fix supernode handling REGISTER message from edge and let edge ask supernode to forward REGISTER message in case of non-p2p-reflection.
This is reliable way to PUNCH UDP HOLE (following STUN spec)
2019-05-23 19:24:27 +08:00
emanuele-f
3aec02d3e6 Fix unidirectional P2P connection due to pending registration
If A is directly available and B is NATted and B sends the first message to A via the supernode S,
A will try to register to B via the port used by B to talk to S. This will not work as B is NAT-ted,
so A must discard such pending registration as soon as it receives a P2P Registration from B.
2019-05-23 00:46:29 +02:00
emanuele-f
fb813e5438 Fix "invalid transop ID" when encryption is disabled 2019-05-22 23:30:05 +02:00
emanuele-f
52d33ed880 Fix missing destination MAC in REGISTER preventing proper P2P
As explained in #109
2019-05-22 23:04:27 +02:00
Jiang Zihao
0edca7e16a Fix purge_expired_registrations to accept passed-in last_purge instead of static function var. 2019-05-22 22:46:23 +02:00
emanuele-f
59011308b2 Ignore invalid community when not received from supernode
The packet may be received from a multicast registration from a local peer.

Fixes #107
2019-05-22 22:40:42 +02:00
emanuele-f
04226c09c8 Fix compilation warnings and little leak 2019-05-21 22:53:55 +02:00
emanuele-f
bc904cfbcc Skip localhost received sockets 2019-05-06 00:40:26 +02:00
emanuele-f
e2861e5f71 Fix send error in peer registration refresh 2019-05-06 00:08:08 +02:00
emanuele-f
49fd9fc5da Discard idle known_peers to avoid connection blocking on disconnection
Fixes #103
2019-05-05 23:48:48 +02:00
emanuele-f
824b45a808 Add linux termination handler and print stats on shutdown 2019-05-05 21:47:50 +02:00
emanuele-f
d5387945b4 Add the -i option to specify registration interval on edge nodes
Registration is bound to UDP NAT hole punching, so the edges should choose their own value.
2019-05-05 21:24:53 +02:00
emanuele-f
856dbae44c Cosmetic changes to improve edge registration tracing 2019-05-05 19:09:51 +02:00
Luca Deri
fbc3754601 Compilation fix 2019-05-05 10:08:21 +02:00
emanuele-f
c89ece71ca Code rework changes
- Remove keyschedule leftover and adapt to new API
- Fix cleanup functions
- Remove unused random_device_mac
2019-04-27 15:55:07 +02:00
emanuele-f
f577d997a7 Drop keyschedule support
- Legacy features are now moved to the legacy directory with readme
- Keyschedule feature is not supported anymore
2019-04-27 12:42:06 +02:00
emanuele-f
e757f94efa Initial code rework (wip)
- The edge structure is now opaque
- The configuration is now exposed via an API
- Code cleanup: using multiple transops at once is not supported anymore
2019-04-27 01:56:57 +02:00
emanuele-f
bb07f0426e Properly initialize AES IV and hash the AES key
This implements the changes discussed in #68 and #72.
This breaks compatibility with the previous AES implementation.

This also fixes two problems reported by valgrind:

==4887== Invalid write of size 2
==4887==    at 0x483E9DB: memmove (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4887==    by 0x10E37F: setup_aes_key (transform_aes.c:378)
==4887==    by 0x10E451: add_aes_key (transform_aes.c:401)
==4887==    by 0x10ED10: transop_aes_setup_psk (transform_aes.c:580)
==4887==    by 0x10A547: main (benchmark.c:92)
==4887==  Address 0x4d574a0 is 0 bytes after a block of size 16 alloc'd
==4887==    at 0x4839B65: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4887==    by 0x10E337: setup_aes_key (transform_aes.c:374)
==4887==    by 0x10E451: add_aes_key (transform_aes.c:401)
==4887==    by 0x10ED10: transop_aes_setup_psk (transform_aes.c:580)
==4887==    by 0x10A547: main (benchmark.c:92)

==13057== Use of uninitialised value of size 8
==13057==    at 0x49023B3: ??? (in /usr/lib/libcrypto.so.1.1)
==13057==    by 0x490346A: AES_cbc_encrypt (in /usr/lib/libcrypto.so.1.1)
==13057==    by 0x11270A: transop_encode_aes (transform_aes.c:230)
==13057==    by 0x10F5CD: send_packet2net (edge_utils.c:1224)
==13057==    by 0x10F813: readFromTAPSocket (edge_utils.c:1278)
==13057==    by 0x1106A8: run_edge_loop (edge_utils.c:1596)
==13057==    by 0x10B9F7: main (edge.c:701)
2019-04-16 02:09:13 +02:00
emanuele-f
d689691599 n2n.h cleanup 2019-04-14 18:08:51 +02:00
emanuele-f
3149a77753 Replace fprintf with traceEvent 2019-04-14 17:33:57 +02:00
emanuele-f
49d5ecf2a8 Reduce duplicated code in quick_edge_init 2019-04-14 17:21:47 +02:00
emanuele-f
f5b2d00b06 Show multicast group join error code 2019-03-27 21:42:40 +01:00
emanuele-f
03761fc84c Handle WSAECONNRESET to avoid stopping the supernode on Windows 2019-03-27 01:13:58 +01:00
emanuele-f
03dbedd52b Change supernode registration messages log to info 2019-03-26 22:24:28 +01:00
emanuele-f
77392f8e53 Add check for SO_REUSEPORT
Fixes #51
2019-03-01 20:34:44 +01:00
Emanuele Faranda
d7b3b2c06b
Merge pull request #66 from csheely/windows-cmake-build
Submit minor changes to enable Windows CMake builds w/o requiring additional local mods.
2019-03-01 18:57:20 +00:00
Emanuele Faranda
585ed22a5d
Merge pull request #67 from emanuele-f/fix_aes_multiedge
Fixes packet drops while communicating with multiple nodes in AES PSK
2019-03-01 18:53:47 +00:00
emanuele-f
5f4dfdc683 Reduce the registration timeout to keep the connection open 2019-02-25 23:42:46 +01:00
emanuele-f
37233553a4 Fixes packet drops while communicating with multiple nodes in AES PSK
Per-node AES structures must be kept as CBC cannot work with a single structure across multiple nodes
2019-02-20 01:26:18 +01:00
Chris Sheely
ba0ecabbf6 Submit minor changes to enable Windows CMake builds w/o further mods. 2019-02-11 16:49:37 -05:00
emanuele-f
e4601590aa Add -A option to enable AES CBC psk encryption 2019-01-28 00:27:54 +01:00
emanuele-f
e07ae72c17 Fix multicast self registration
Trace: (192.168.1.10/AE:C4:1F:99:D7:16 is the edge node itself)

02/Dec/2018 23:01:44 [edge_utils.c:175] Registering with multicast group 224.0.0.68:1968
02/Dec/2018 23:01:44 [edge_utils.c:533] send REGISTER 224.0.0.68:1968
02/Dec/2018 23:01:44 [edge_utils.c:463] sendto sent=36 to
02/Dec/2018 23:01:44 [edge_utils.c:1500] Received packet from multicast socket
02/Dec/2018 23:01:44 [edge_utils.c:1296] ### Rx N2N UDP (36) from 192.168.1.10:48122
02/Dec/2018 23:01:44 [edge_utils.c:1341] Rx REGISTER src=AE:C4:1F:99:D7:16 dst=00:00:00:00:00:00 from peer 192.168.1.10:48122 (192.168.1.10:48122)
02/Dec/2018 23:01:44 [edge_utils.c:567] send REGISTER_ACK 192.168.1.10:48122
02/Dec/2018 23:01:44 [edge_utils.c:463] sendto sent=36 to
02/Dec/2018 23:01:44 [edge_utils.c:1296] ### Rx N2N UDP (36) from 192.168.1.10:48122
02/Dec/2018 23:01:44 [edge_utils.c:1367] Rx REGISTER_ACK src=AE:C4:1F:99:D7:16 dst=AE:C4:1F:99:D7:16 from peer 192.168.1.10:48122 (192.168.1.10:48122)
02/Dec/2018 23:01:44 [edge_utils.c:266] set_peer_operational: AE:C4:1F:99:D7:16 -> 192.168.1.10:48122
02/Dec/2018 23:01:44 [edge_utils.c:318] Failed to find sender in pending_peers.
2018-12-03 00:00:12 +01:00
emanuele-f
7fd1778d7c Fix packets from clients being routed when routing is disabled 2018-10-31 13:08:39 +01:00
Luca Deri
1c7b14995b When multiple supernodes are specified, the edge registers to all of them 2018-09-29 13:08:01 +02:00
Luca Deri
3acd7a0e89 Implemented local peer discovery over multicast. In case two peers are on the same network
edge detects it and bypsses the supernode

deri@Lucas-iMac.local 132> ping 192.168.254.126
PING 192.168.254.126 (192.168.254.126): 56 data bytes
64 bytes from 192.168.254.126: icmp_seq=0 ttl=64 time=84.314 ms <<== via supernode
64 bytes from 192.168.254.126: icmp_seq=1 ttl=64 time=0.989 ms <<== local network announce detected
64 bytes from 192.168.254.126: icmp_seq=2 ttl=64 time=0.642 ms
64 bytes from 192.168.254.126: icmp_seq=3 ttl=64 time=0.727 ms
^C
--- 192.168.254.126 ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.642/21.668/84.314/36.169 ms
2018-09-29 10:03:28 +00:00
Luca Deri
57b728a4dd Improved multicast edge registation 2018-09-29 11:19:36 +02:00
Luca Deri
dd899b3a4d Initial work for local multicast registering (work in progress) 2018-09-28 22:32:36 +00:00
Luca Deri
fd356cde64 Added the ability to specify (-c) on the supernode the list of allowed communities
kill -HUP on the supernode lists the registered edges
2018-09-28 22:31:45 +02:00
Luca Deri
1888a0c55a Merge of https://github.com/ntop/n2n/pull/26 2018-08-17 14:27:11 +02:00