Commit Graph

46 Commits

Author SHA1 Message Date
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
switch_st
8c608ec3c4 bug fix 2018-06-26 15:25:32 +08:00
switch_st
463538a8df Add support for Android 2018-06-12 02:59:13 +08:00
Luca Deri
b6fdae38b9 Added termination variable to edge loop 2018-06-08 12:01:03 +02:00
Luca Deri
b00f329a31 Code cleanup 2018-06-08 08:19:06 +02:00