64 Commits
Author SHA1 Message Date
Hamish Coleman 83078c8104 Simplify win32 build process
When building on win32 systems, simply add the win32 specific functions
to the libn2n.a, which simplifies the commands needed.

By moving the win32 source code into the src directory, the source code
is better consolidated.
2023-07-31 20:56:49 +01:00
Hamish Coleman b22c57a16f Dont require special build flags for just one header 2023-07-03 02:51:20 +08:00
Hamish Coleman 473b89c963 Simplify build system by using standard macro
Most environments have predefined macros that identify the environment
to the source code.  If we use these macros instead of defining our own
then there is one less parameter difference to keep track of with
different builds

cf:
    http://web.archive.org/web/20191012035921/http://nadeausoftware.com/articles/2012/01/c_c_tip_how_use_compiler_predefined_macros_detect_operating_system
    https://sourceforge.net/p/predef/wiki/OperatingSystems/
2023-07-01 19:08:43 +08:00
Hamish Coleman a2c78e140a Minor fixes for FreeBSD 2023-06-25 19:25:00 +08:00
Hamish Coleman cfc9c8c10d Simplify and make more consistant the pthread library 2023-06-25 17:56:09 +08:00
TonyandGitHub 76cbff370e Fix purgeable is always false on supernode peer list (#1117)
* Fix purgeable is always false on sn peer list
- And change sn_purge to bool

* Change all keep_on_running to bool

* Fix wrong `keep_running` type
2023-06-18 08:58:49 +01:00
Hamish ColemanandGitHub 40c99fcdee Merge pull request #1094 from hamishcoleman/autoconf
Autoconf Refactoring
2023-05-04 11:03:00 +08:00
e01daf4a85 support linux l2 bridge (#1044)
* support linux l2 bridge

* unified timeout name

* typo

* minor code style adaptions

* feature define

* feature define

* feature define

* feature define

* added hint to bridging to help output

* added hint to bridging

* drafted bridging documentation

* added bridging hint

---------

Co-authored-by: Logan oos Even <46396513+Logan007@users.noreply.github.com>
2023-05-04 11:00:38 +08:00
Hamish Coleman 1accc76ad3 Fix the building the win32 subdir.
It looks like the github windows build environment is not correctly
inheriting environment variables.  Which is strange, as that has not
been changed with the recent updates.  Include the vars directly as a
workaround (and plan to refactor later)
2023-04-30 20:40:50 -05:00
Logan oos EvenandGitHub cf23457d3b added sock type field to data structure (#1031) 2022-06-28 19:09:04 +02:00
Logan oos EvenandGitHub 053ab381b3 fixed endianess issue in federated sn socket forwarding (#1030) 2022-06-28 16:53:12 +02:00
Logan oos EvenandGitHub 95cfbca5a9 more sockaddr generalization (#1028) 2022-06-27 22:21:03 +02:00
Logan oos EvenandGitHub ffb4e31b8a encapsulated several fillings of n2n_sock_t in single function (#1025)
* encapsulated several fillings of n2n_sock_t in single function

* Windows specifics...

* stuck to the project's style code
2022-06-26 00:07:29 +02:00
Logan oos EvenandGitHub 7927bd7294 added optional choice of bind address (-p) to supernode (#1016) 2022-06-16 12:00:48 +02:00
Logan oos EvenandGitHub 51a3a71f95 introduced n2n-portfwd tool (#1008)
* moved dev to version 3.1.1

* introduced n2n-portfwd tool

* moved port-forwarding source to tool

* adjusted tiny things, seemingly works with ./configure's  --enable-miniupnp  and  --enable-natpmp

* adjusted for Windows

* wished for better typing skills

* applied some finishing touch

* typo
2022-06-05 18:05:40 +02:00
Logan oos EvenandGitHub 99b6b6b66d added n2n-route tool (#982)
* moved dev to version 3.1.1

* laid ground for n2n-route tool

* adapted code style

* overhauled n2n-route's tool program logic and removed route code from edge

* added missing initialization of federation's purgeable field

* lifted un/purgeable confusion

* added warning about removed -n cli option

* realized that Windows does not offer inet_aton()

* removed -n option documentation from edge's man page

* slightly simplified n2n-route program logic

* applied more logic changes to n2n-route tool

* added 'info' read command to edge's management port

* corrected indention

* added Linux route control to n2n-route tool

* temporarily restricted n2n-route tool to Linux only

* We must be over the routing!

* pulled default gateway change detection into main loop to cover mobile use, and added devstr_t type

* corrected use of new UNPURGEABLE - so far gone unnoticed

* addresses possiible address issue

* i broke it

* reverted bad ideas

* added command line options, help text, and prevented vpn gateway being used for supernode/peer traffic routes

* added option to manually provide default gateway, also verbosity options

* getting there

* added option to limit networks to be routed (-n), adapted documentation

* fine-tuned minor things
2022-05-24 20:38:51 +02:00
Luca Deri aecb97042e Added missing dependency #989 2022-05-06 22:29:49 +02:00
Hamish Coleman 16f7f4dc59 Fiddle with windows headers 2022-04-17 00:37:02 +01:00
Hamish Coleman 9728a36a56 Increase includes reusability and consistency 2022-04-17 00:25:04 +01:00
Logan oos EvenandGitHub e686b9592c (C) update (#965) 2022-03-12 10:22:42 +01:00
Logan oos EvenandGitHub f59c6900a1 moved compression code into transforms (#961) 2022-02-21 10:09:06 +01:00
e6e8cb038a added port forwarding (upnp and natpmp) (#905)
* UPnP port redirection is supported.

* compile fixes

* compile fix

* optimize reconnection code

* prepared upnp threadification to counter main loop stall at supernode change

* NAT-PMP port forwarding support, temporarily merge codes to resolve conflicts.

* make compile fix

* prepared threadification in more detail

* adopted threadification to new file setup

* cleaned up

* renamed functions and data structures

* fixes

* differentiated between miniupnp and natpmp and added corresponding lib support to makefile

* name

* commented unused header includes

* comments

* license

* fixes

* fixes

* fixes

* NAT-PMP is already available.

* added CLI parameter to disable port forwarding if required

* preliminary made use of multithreading

* adjusted log level

* added man page documentation

* def'ed conf

* made pmpnat adjustments

Co-authored-by: fengdaolong <fengdaolong@gmail.com>
2021-12-23 12:27:55 +01:00
Logan oos EvenandGitHub f4e7e513a8 added MAC address based supernode selection (#885) 2021-11-01 16:35:05 +05:45
Logan oos EvenandGitHub 3b187b4ac8 updated JSON API password handling '--management-password <pw>' (#869) 2021-10-24 15:22:36 +05:45
Logan oos EvenandGitHub c61b62ab1b choose supernode selection strategy at run-time '--select-rtt' (#864) 2021-10-24 12:53:25 +05:45
Hamish ColemanandGitHub ae502d9181 JSON Reply Management API - feature parity with old management interfaces (#861)
* Ensure that recent code additions pass the linter

* Include some of the more obviously correct lint fixes to edge_utils.c

* Refactor edge JSON api into its own source file

* Use shorter names for static management functions

* Implement a JSON RPC way of managing the verbosity

* Tidy up help display in n2nctl script

* Make note of issue with implementing the stop command

* Implement a JSON RPC call to fetch current community

* Make n2nhttpd time value be more self-contained

* Make n2nhttpd order more closely match the existing management stats output

* Wire up status page to the verbosity setting

* Add JSON versions of the remainder of the edge management stats

* Add new file to cmake

* Properly define management handler

* Only update the last updated timestamp after a successful data fetch

* Function and types definition cleanup

* Force correct type for python scripts mgmt port

* Implement initial JSON API for supernode

* Fix whitespace error

* Use helper function for rendering peers ip4 address

* Proxy the auth requirement back out to the http client, allowing normal http auth to be used

* Ensure that we do not leak the federation community

* Use the same rpc method name and output for both edge and supernode for peers/edges

* Allow n2nctl to show raw data returned without resorting to tricks

* Make n2nctl pretty printer understandable with an empty table

* Use the full name for supernodes RPC call

* Use same RPC method name (but some missing fields) for getting communities from both edge and supernode

* Add *_sup_broadcast stats to edge packet stats output

* Refacter the stats into a packetstats method for supernode RPC

* Even if I am not going to prettyprint the timestamps, at least make all the timestamps on the page the same unit

* Simplify the RPC handlers by flagging some as writable and checking that in the multiplexer

* Remove invalid edges data

* Avoid crash on bad data to verbose RPC

* Avoid showing bad or inconsistant protocol data in communities RPC

* Minor clarification on when --write is handled

* Make linter happy

* Fix changed method name in n2nhttpd

* Move mainloop stop flag into the n2n_edge_t structure, allowing access from management commands

* Implement edge RPC stop command

* Move mainloop stop flag into the n2n_sn_t structure, allowing access from management commands

* Implement supernode RPC stop command

* Allow multiple pages to be served from mini httpd

* Extract common script functions into a separate URL

* Handle an edge case in the python rpc class

With a proper tag-based demultiplexer, this case should be a nop,
but we are single-threaded and rely on the packet ordering in this
library.

* Add n2nhttpd support to query supernode using urls prefixed with /supernode/

* Handle missing values in javascript table print

* Add another less filtering javascript key/value renderer

* Add a supernode.html page to the n2nhttpd

* Address lint issue

* Mention the second html page on the Scripts doc

* Remove purgable column from supernode edges list - it looks like it is rarely going to be set

* Add a simple one-line example command at the top of the API documentation

* Acknowledge that this is not the most efficient protocol, but point out that it was not supposed to be

* Make it clear that the n2nctl script works for both edge and supernode

* Fight with inconsistant github runner results

* Turn off the /right/ coverage generator
2021-10-23 11:05:05 +05:45
Hamish ColemanandGitHub e6fcf1c55b Cleanup and Documentation for JSON management API (#856)
* Reimplement JSON mgmt with clear separation of read/write actions

* Reduce boilerplate by using a table driven command definition for json mgmt commands

* Port tools to use new json api

* Add a basic authentication for json mgmt commands

* If a auth key is given, it must match

* Add auth key to management scripts

* Add a flag bitfield to clearly turn the tag param into a options list

* Allow simple pass-through of any command from n2nctl

* Convert the n2nctl to use an object oriented interface

* Handle sigpipe in the n2nhttpd - this happens if the remote client disconnects unexpectely

* Remove some repetition from the server

* Use the correct options to allow reuseaddr

* Dont generate a scary message on ctrl-c

* Convert n2nhttpd to use object based RPC

* Use the same longopt for both tools

* Pass any extra args through to the RPC

* Add some documentation for the scripts in the repository

* Spelling fix

* Add documentation for the JSON reply mangement API
2021-10-18 02:01:42 +05:45
Logan oos EvenandGitHub db5adc2038 fine-tuned REGISTER cookie handling (#837) 2021-10-03 18:19:29 +05:45
Logan oos EvenandGitHub ebb357245a added a flag field to QUERY_PEER (#835) 2021-10-02 23:17:45 +05:45
Logan oos EvenandGitHub dd41689bb9 added supernode version and uptime information to edge management port output (#796) 2021-09-17 02:34:09 +05:45
Logan oos EvenandGitHub 7f1fe9a499 allowed edge to optionally auto-detetct local IP address ('-e auto') for advertising as preferred (#776) 2021-09-12 00:22:05 +05:45
Logan oos EvenandGitHub 7fa0cc1e0a added preferred socket handling (-e) (#765) 2021-09-09 14:07:29 +05:45
Logan oos EvenandGitHub c21accc2a1 enabled edge to bind to a specified IP address (-b) (#753) 2021-08-28 03:08:23 +05:45
Logan oos EvenandGitHub e09f3a4875 added federation support to user/password auth scheme (#741) 2021-07-31 22:17:07 +05:45
Logan oos EvenandGitHub c35129b8e2 added 'reload_communities' command to supernode management port (#740) 2021-07-24 03:46:50 +05:45
Logan oos EvenandGitHub 39aa50b4cd added manual MAC/IP address spoofing protection override at supernode (-M) (#716) 2021-06-21 17:03:07 +05:45
Logan oos EvenandGitHub 1586ae62a7 made n2n react more swiftly to (D)DNS changes (#705) 2021-06-07 17:57:49 +05:45
Logan oos EvenandGitHub c55e3e3246 multithreaded supernode name resolution (#645) 2021-06-04 03:52:12 +05:45
Logan oos EvenandGitHub a28327a0af added user-password edge authentication (#673) 2021-06-04 03:11:22 +05:45
randomize00andGitHub cfa92d28d8 add callback function for hin2n to protect socket (#684) 2021-04-14 11:31:50 +05:45
Logan oos EvenandGitHub 7c3951a10f revised tcp implementation (#674) 2021-03-26 20:45:31 +05:45
Logan oos EvenandGitHub aa1f4311f9 adapted packet format (#662)
* adapted packet format
2021-03-16 17:24:59 +05:45
Logan oos EvenandGitHub 23a9c871f8 increased resilience to supernode failure (#660) 2021-03-09 04:46:42 +05:45
Logan oos EvenandGitHub 1bcc64ccb3 fixed unrelated error message (#653) 2021-03-04 16:17:48 +05:45
Logan oos EvenandGitHub 20133f599c improved socket handling (#650) 2021-03-01 14:13:14 +05:45
Logan oos EvenandGitHub c8fabbdfe0 added more targeted routing for packet forwarding in federation (#643) 2021-02-23 18:51:14 +05:45
Logan oos EvenandGitHub a482fe112d added TCP support (#627)
(disabled on Windows)
2021-02-22 22:37:47 +05:45
Logan oos EvenandGitHub 09e8d5e730 limited number of concurrently pinged supernodes (#619) 2021-02-01 18:31:36 +05:45
Logan oos EvenandGitHub de76b16fd5 added missing 'metric' 2021-01-31 20:03:11 +05:45
anzz1andGitHub 9cac336488 added network interface metric option for windows (#606) 2021-01-30 18:00:01 +05:45