A New, Evolutive API and Transport-Layer Architecture for the Internet
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
debian Fixes for Debian/Ubuntu and Fedora packaging. (#382) Oct 6, 2017
docs updated JSON properties in examples (#393) Nov 20, 2017
examples Improved webrtc examples (#440) Mar 17, 2018
policy updated some VM scripts Jun 5, 2018
rpm Fixes for Debian/Ubuntu and Fedora packaging. (#382) Oct 6, 2017
socketapi NEAT Sockets API: added missing file function wrappers and helper scr… Nov 6, 2017
tests Improved webrtc examples (#440) Mar 17, 2018
.editorconfig Added editorconfig file Aug 12, 2016
.gitignore Clean up .gitignore Nov 10, 2017
.travis.yml travis: initial travis CI integration Aug 13, 2017
CMakeLists.txt re-enable multistreaming Feb 5, 2018
License License update Jan 31, 2017
README.md README: mention libuv and jansson version requirements Aug 10, 2017
autogen.sh Some fixes for the Ubuntu/Debian and Fedora packaging (#338) Jul 23, 2017
build-deb Added scripts for Ubuntu PPA builds. Nov 8, 2016
clean-deb Added RPM packaging files and scripts. Dec 2, 2016
cppcheck.sh improve cppcheck Feb 1, 2017
debian.conf Updated Ubuntu/Debian packaging (#188) Nov 26, 2016
filter-empty-entries Added scripts for Ubuntu PPA builds. Nov 8, 2016
make-deb Added RPM packaging files and scripts. Dec 2, 2016
make-ppa Some fixes for the Ubuntu/Debian and Fedora packaging (#338) Jul 23, 2017
make-rpm Added RPM packaging files and scripts. Dec 2, 2016
make-symbols Updated Ubuntu/Debian packaging (#188) Nov 26, 2016
neat.h Expose the transport protocol used to userspace (#438) Mar 14, 2018
neat_addr.c Refactor address handling and fix multihoming property (#411) Jan 4, 2018
neat_addr.h Refactor address handling and fix multihoming property (#411) Jan 4, 2018
neat_bsd.c Refactor address handling and fix multihoming property (#411) Jan 4, 2018
neat_bsd.h neat_new_flow refactoring May 9, 2017
neat_bsd_internal.h prefix: rename private global functions to use nt_ prefix Aug 28, 2017
neat_core.c Expose the transport protocol used to userspace (#438) Mar 14, 2018
neat_core.h prefix: rename private global functions to use nt_ prefix Aug 28, 2017
neat_he.c Delay HE candidates based on priority when property "__he_delay" is s… Mar 14, 2018
neat_he.h New Happy Eyeballs (#161) Sep 28, 2016
neat_internal.h Added support for tproxy property (#433) Feb 7, 2018
neat_json_helpers.c WebRTC Data-Channel support for NEAT (#429) Jan 30, 2018
neat_json_helpers.h prefix: rename private global functions to use nt_ prefix Aug 28, 2017
neat_linux.c Refactor address handling and fix multihoming property (#411) Jan 4, 2018
neat_linux.h [FIX] Move neat to root folder Oct 16, 2015
neat_linux_internal.h prefix: rename private global functions to use nt_ prefix Aug 28, 2017
neat_log.c Support nt_log without a NEAT context (#417) Jan 9, 2018
neat_log.h prefix: rename private global functions to use nt_ prefix Aug 28, 2017
neat_pm_socket.c Refactoring and Bugfixes (#410) Jan 3, 2018
neat_pm_socket.h prefix: rename private global functions to use nt_ prefix Aug 28, 2017
neat_pvd.c Fixes, compiler options, tests (#377) Aug 29, 2017
neat_pvd.h prefix: rename private global functions to use nt_ prefix Aug 28, 2017
neat_qos.c building locally shows bugs Oct 9, 2017
neat_qos.h Initial NEAT Abstract QoS values Oct 22, 2016
neat_queue.h whitespace changes Dec 21, 2016
neat_resolver.c Refactoring and new he delay property (#424) Jan 10, 2018
neat_resolver.h resolver: Hack for handling localhost Jan 2, 2018
neat_resolver_conf.c Fixing Coverity CIDs (#397) Dec 4, 2017
neat_resolver_conf.h prefix: rename private global functions to use nt_ prefix Aug 28, 2017
neat_resolver_helpers.c prefix: rename private global functions to use nt_ prefix Aug 28, 2017
neat_resolver_helpers.h prefix: rename private global functions to use nt_ prefix Aug 28, 2017
neat_security.c Libuv polling refactoring (#436) Feb 26, 2018
neat_security.h Fix usrsctp to handle multiple ctx (#358) Jul 27, 2017
neat_stat.c prefix: rename private global functions to use nt_ prefix Aug 28, 2017
neat_stat.h prefix: rename private global functions to use nt_ prefix Aug 28, 2017
neat_swig.i Support for Python / NEAT Python bindings (reopened) (#337) Jul 28, 2017
neat_unix_json_socket.c add NULL context nt_log functions rather than redifining them (#415) Jan 9, 2018
neat_unix_json_socket.h prefix: rename private global functions to use nt_ prefix Aug 28, 2017
neat_usrsctp.c Fixes, compiler options, tests (#377) Aug 29, 2017
neat_usrsctp.h Fix usrsctp to handle multiple ctx (#358) Jul 27, 2017
neat_usrsctp_internal.h prefix: rename private global functions to use nt_ prefix Aug 28, 2017
neat_webrtc.c WebRTC Data-Channel support for NEAT (#429) Jan 30, 2018
neat_webrtc_tools.c WebRTC Data-Channel support for NEAT (#429) Jan 30, 2018
neat_webrtc_tools.h WebRTC Data-Channel support for NEAT (#429) Jan 30, 2018
rename-symbols.sh rename-symbols: script for `neat_` to `nt_` renaming Aug 28, 2017
rpm.conf Added RPM packaging files and scripts. Dec 2, 2016
sed-file Refactoring and Bugfixes (#410) Jan 3, 2018
tls-trust.c Merge with master Apr 19, 2017
uncrustify-neat.cfg Added uncrustify config Aug 12, 2016

README.md

A New, Evolutive API and Transport-Layer Architecture for the Internet

NEAT supports FreeBSD, Linux, OS X and NetBSD

NEAT internals πŸ”©

NEAT is a callback based library and everything revovles around the neat_ctx struct. This struct has to be initialized before anything else can be done. NEAT uses libuv as event library, and this loop is available to users so that they can hook in and add their own callbacks.

One of the first things done in NEAT after the library has been initialized is to start monitoring the available addresses on all interfaces of the machine. NEAT supports multi-homing and we must therefore have an up-to-date view of the available (and connected) network resources available on a machine. Address events are published using an internal event API, which users also can hook into. It is useful if only a small subset of NEAT is wanted, for example monitoring the preferred lifetime of a v6 address. Look at neat_resolver.c for an example on how to use this API. An address is stored in a platform-independent structure.

After NEAT has been initialized, it is up to the user to do what he or she wants. A typical first step is to resolve a domain name.

Requirements ☝️

  • cmake
  • libuv (version 1.9 or later)
  • ldns
  • ljansson (version 2.7 or later)
  • libmnl (linux only)
  • libsctp-dev (linux only, for kernel SCTP support)
  • swig (for generating Python bindings)
OS Install Dependencies
Debian/Ubuntu* apt-get install cmake libuv1-dev libldns-dev libjansson-dev libmnl-dev libsctp-dev swig
FreeBSD pkg install cmake libuv ldns jansson swig30
OS X brew install cmake libuv ldns jansson swig
* Ubuntu 15.04 and higher

Quickstart πŸš€

$ cd <path-to-neat-src>
$ mkdir build && cd build
$ cmake ..
$ cmake --build .

This will generate makefiles and compile the library and the samples. You will find the shared and the static library in the build directory and the samples in build/examples directory. Note, that Python bindings are currently considered experimental and, therefore, have to be activated deliberately. To do so, change the first cmake call above to:

$ cmake .. -DSWIG_PYTHON=1

For an easy introduction to NEAT, have a look at our tutorial.

You may also look at neat_http_get.c in the samples directory for a practical example.

$ ./client_http_get www.neat-project.org

In order to (optionally) install the neat library simply run.

$ sudo make install

Don't forget to run ldconfig after installing neat the first time.

Read the docs πŸ’‘

Have a look at our documentation!

Buildbots πŸ”₯

We are running buildbots to support our continuous integration process.

If you are only interested in a single branch, just add ?branch=BRANCHNAME to the URL. http://buildbot.nplab.de:28010/waterfall?branch=master

Links πŸ”—

Acknowledgement

This work has received funding from the European Union's Horizon 2020 research and innovation programme under grant agreement No. 644334 (NEAT). The views expressed are solely those of the author(s).