Warning
This software is in early phase of development and is not ready for production environments.
Hoppipolla (Icelandic for "hopping into puddles") is a distributed framework for user-side responsible networking based on the SCION Internet protocol. It implements part of the Responsible Internet proposal with an approach inspired by the architecture designed in the Accounting Value Effects for Responsible Networking paper and by the User-driven Path verification and control for Inter-domain networks (UPIN) project.
Once installed, Hoppipolla allows the user to publish policies expressed in Answer Set Programming (ASP) to select network nodes (i.e., autonomous systems) that comply with them when routing packets to other remote addresses in the SCION network.
An example of such policy in natural language:
Do not route network traffic through nodes that are located in country X
Which, using the Hoppipolla-specific ASP syntax would look like:
-valid(Path) :- country(Hop, "X"), hop(Hop), path(Path), contains(Path, Hop).
The framework is constituted by a suite of services and the language-specific
SDKs used to interact with them from the client side. All of the services expose
a gRPC API defined in the protos
folder that can be used directly in place of
the SDK of choice.
In terms of external dependencies, Hoppipolla depends exclusively on SCION. The user is expected to provide an entrypoint to the SCION stack via a stable connection to the SCION daemon.
Follow this guide to install SCION and use it within the SCIONLab testbed.
At this stage, Hoppipolla is not ready for production in a fully distributed
environment. Therefore, for experimental work, it is recommendend that you run
it locally using docker compose
.
You can find an example of the configuration options that can be passed to the
services in the .env.example
file.
Important
Most notably, the HOPPIPOLLA_SCIOND_URI
env variable should be set to
the address of the SCION daemon (e.g., 127.0.0.1:30255).
The repository contains a docker-compose.yml
file which
runs all the necessary services. You can sping up Hoppipolla on your machine
simply by running:
docker compose up
Warning
TBD
The following snippet shows a simple usage of the Python SDK:
config = hp.HoppipollaClientConfig() # default values
client = hp.HoppipollaClient.from_config(config)
issuer = client.get_default_issuer()
policy1 = client.publish_policy(
issuer,
'-valid(Path) :- country(Hop, "X"), hop(Hop), path(Path), contains(Path, Hop).'
)
result = client.ping("1-ff00:0:110,10.0.0.1")
Hoppipolla is GNU GPL v3.0 licensed.