gnunet-handbook

The GNUnet Handbook
Log | Files | Refs

commit 3fa9c86a05aab83d0981686c5fbbd77037bba6c4
parent 774aea0562af2234696577f04b379bab40342000
Author: Martin Schanzenbach <schanzen@gnunet.org>
Date:   Fri,  6 Oct 2023 21:29:35 +0200

remove repo structure

Diffstat:
Mdevelopers/index.rst | 1-
Ddevelopers/repo.rst | 261-------------------------------------------------------------------------------
2 files changed, 0 insertions(+), 262 deletions(-)

diff --git a/developers/index.rst b/developers/index.rst @@ -44,7 +44,6 @@ new chapters, sections or insightful comments. contributing.rst style.rst - repo.rst util.rst architecture.rst diff --git a/developers/repo.rst b/developers/repo.rst @@ -1,261 +0,0 @@ -******************** -Repository Structure -******************** - -.. _Code-overview: - -``src`` Overview ----------------- -.. to ../repo.rst - -This section gives a brief overview of the GNUnet source code. -Specifically, we sketch the function of each of the subdirectories in -the ``gnunet/src/`` directory. The order given is roughly bottom-up (in -terms of the layers of the system). - -.. todo:: Reorganise this list - -``util/`` --- libgnunetutil - Library with general utility functions, all GNUnet binaries link - against this library. Anything from memory allocation and data - structures to cryptography and inter-process communication. The goal - is to provide an OS-independent interface and more 'secure' or - convenient implementations of commonly used primitives. The API is - spread over more than a dozen headers, developers should study those - closely to avoid duplicating existing functions. See - :ref:`GNUnet-libgnunetutil`. - - -``hello/`` --- libgnunethello - HELLO messages are used to describe under which addresses a peer can - be reached (for example, protocol, IP, port). This library manages - parsing and generating of HELLO messages. - -``block/`` --- libgnunetblock - The DHT and other components of GNUnet store information in units - called 'blocks'. Each block has a type and the type defines a - particular format and how that binary format is to be linked to a - hash code (the key for the DHT and for databases). The block library - is a wrapper around block plugins which provide the necessary - functions for each block type. - -``statistics/`` --- statistics service - The statistics service enables associating values (of type uint64_t) - with a component name and a string. The main uses is debugging - (counting events), performance tracking and user entertainment (what - did my peer do today?). - -``arm/`` --- Automatic Restart Manager (ARM) - The automatic-restart-manager (ARM) service is the GNUnet master - service. Its role is to start gnunet-services, to re-start them when - they crashed and finally to shut down the system when requested. - -``peerinfo/`` --- peerinfo service - The peerinfo service keeps track of which peers are known to the - local peer and also tracks the validated addresses for each peer (in - the form of a HELLO message) for each of those peers. The peer is not - necessarily connected to all peers known to the peerinfo service. - Peerinfo provides persistent storage for peer identities --- peers - are not forgotten just because of a system restart. - -``datacache/`` --- libgnunetdatacache - The datacache library provides (temporary) block storage for the DHT. - Existing plugins can store blocks in Sqlite, Postgres or MySQL - databases. All data stored in the cache is lost when the peer is - stopped or restarted (datacache uses temporary tables). - -``datastore/`` --- datastore service - The datastore service stores file-sharing blocks in databases for - extended periods of time. In contrast to the datacache, data is not - lost when peers restart. However, quota restrictions may still cause - old, expired or low-priority data to be eventually discarded. - Existing plugins can store blocks in Sqlite, Postgres or MySQL - databases. - -``template/`` --- service template - Template for writing a new service. Does nothing. - -``ats/`` --- Automatic Transport Selection - The automatic transport selection (ATS) service is responsible for - deciding which address (i.e. which transport plugin) should be used - for communication with other peers, and at what bandwidth. - -``nat/`` --- libgnunetnat - Library that provides basic functions for NAT traversal. The library - supports NAT traversal with manual hole-punching by the user, UPnP - and ICMP-based autonomous NAT traversal. The library also includes an - API for testing if the current configuration works and the - ``gnunet-nat-server`` which provides an external service to test the - local configuration. - -``fragmentation/`` --- libgnunetfragmentation - Some transports (UDP and WLAN, mostly) have restrictions on the - maximum transfer unit (MTU) for packets. The fragmentation library - can be used to break larger packets into chunks of at most 1k and - transmit the resulting fragments reliably (with acknowledgment, - retransmission, timeouts, etc.). - -``transport/`` --- transport service - The transport service is responsible for managing the basic P2P - communication. It uses plugins to support P2P communication over TCP, - UDP, HTTP, HTTPS and other protocols. The transport service validates - peer addresses, enforces bandwidth restrictions, limits the total - number of connections and enforces connectivity restrictions (e.g. - friends-only). - -``peerinfo-tool/`` --- gnunet-peerinfo - This directory contains the gnunet-peerinfo binary which can be used - to inspect the peers and HELLOs known to the peerinfo service. - -``core/`` - The core service is responsible for establishing encrypted, - authenticated connections with other peers, encrypting and decrypting - messages and forwarding messages to higher-level services that are - interested in them. - -``testing/`` --- libgnunettesting - The testing library allows starting (and stopping) peers for writing - testcases. It also supports automatic generation of configurations - for peers ensuring that the ports and paths are disjoint. - libgnunettesting is also the foundation for the testbed service - -``testbed/`` --- testbed service - The testbed service is used for creating small or large scale - deployments of GNUnet peers for evaluation of protocols. It - facilitates peer deployments on multiple hosts (for example, in a - cluster) and establishing various network topologies (both underlay - and overlay). - -``nse/`` --- Network Size Estimation - The network size estimation (NSE) service implements a protocol for - (securely) estimating the current size of the P2P network. - -``dht/`` --- distributed hash table - The distributed hash table (DHT) service provides a distributed - implementation of a hash table to store blocks under hash keys in the - P2P network. - -``hostlist/`` --- hostlist service - The hostlist service allows learning about other peers in the network - by downloading HELLO messages from an HTTP server, can be configured - to run such an HTTP server and also implements a P2P protocol to - advertise and automatically learn about other peers that offer a - public hostlist server. - -``topology/`` --- topology service - The topology service is responsible for maintaining the mesh - topology. It tries to maintain connections to friends (depending on - the configuration) and also tries to ensure that the peer has a - decent number of active connections at all times. If necessary, new - connections are added. All peers should run the topology service, - otherwise they may end up not being connected to any other peer - (unless some other service ensures that core establishes the required - connections). The topology service also tells the transport service - which connections are permitted (for friend-to-friend networking) - -``fs/`` --- file-sharing - The file-sharing (FS) service implements GNUnet's file-sharing - application. Both anonymous file-sharing (using gap) and - non-anonymous file-sharing (using dht) are supported. - -``cadet/`` --- cadet service - The CADET service provides a general-purpose routing abstraction to - create end-to-end encrypted tunnels in mesh networks. We wrote a - paper documenting key aspects of the design. - -``tun/`` --- libgnunettun - Library for building IPv4, IPv6 packets and creating checksums for - UDP, TCP and ICMP packets. The header defines C structs for common - Internet packet formats and in particular structs for interacting - with TUN (virtual network) interfaces. - -``mysql/`` --- libgnunetmysql - Library for creating and executing prepared MySQL statements and to - manage the connection to the MySQL database. Essentially a - lightweight wrapper for the interaction between GNUnet components and - libmysqlclient. - -``dns/`` - Service that allows intercepting and modifying DNS requests of the - local machine. Currently used for IPv4-IPv6 protocol translation - (DNS-ALG) as implemented by \"pt/\" and for the GNUnet naming system. - The service can also be configured to offer an exit service for DNS - traffic. - -``vpn/`` --- VPN service - The virtual public network (VPN) service provides a virtual tunnel - interface (VTUN) for IP routing over GNUnet. Needs some other peers - to run an \"exit\" service to work. Can be activated using the - \"gnunet-vpn\" tool or integrated with DNS using the \"pt\" daemon. - -``exit/`` - Daemon to allow traffic from the VPN to exit this peer to the - Internet or to specific IP-based services of the local peer. - Currently, an exit service can only be restricted to IPv4 or IPv6, - not to specific ports and or IP address ranges. If this is not - acceptable, additional firewall rules must be added manually. exit - currently only works for normal UDP, TCP and ICMP traffic; DNS - queries need to leave the system via a DNS service. - -``pt/`` - protocol translation daemon. This daemon enables 4-to-6, 6-to-4, - 4-over-6 or 6-over-4 transitions for the local system. It essentially - uses \"DNS\" to intercept DNS replies and then maps results to those - offered by the VPN, which then sends them using mesh to some daemon - offering an appropriate exit service. - -``identity/`` - Management of egos (alter egos) of a user; identities are essentially - named ECC private keys and used for zones in the GNU name system and - for namespaces in file-sharing, but might find other uses later - -``revocation/`` - Key revocation service, can be used to revoke the private key of an - identity if it has been compromised - -``namecache/`` - Cache for resolution results for the GNU name system; data is - encrypted and can be shared among users, loss of the data should - ideally only result in a performance degradation (persistence not - required) - -``namestore/`` - Database for the GNU name system with per-user private information, - persistence required - -``gns/`` - GNU name system, a GNU approach to DNS and PKI. - -``dv/`` - A plugin for distance-vector (DV)-based routing. DV consists of a - service and a transport plugin to provide peers with the illusion of - a direct P2P connection for connections that use multiple (typically - up to 3) hops in the actual underlay network. - -``regex/`` - Service for the (distributed) evaluation of regular expressions. - -``scalarproduct/`` - The scalar product service offers an API to perform a secure - multiparty computation which calculates a scalar product between two - peers without exposing the private input vectors of the peers to each - other. - -``consensus/`` - The consensus service will allow a set of peers to agree on a set of - values via a distributed set union computation. - -``reclaim/`` - A decentralized personal data sharing service used to realize a - decentralized identity provider. Supports OpenID Connect. See also - https://reclaim.gnunet.org. - -``rest/`` - The rest API allows access to GNUnet services using RESTful - interaction. The services provide plugins that can exposed by the - rest server. - -.. FIXME: Where did this disappear to? -.. ``experimentation/`` - The experimentation daemon coordinates distributed experimentation - to evaluate transport and ATS properties.